Dneska se podíváme na problémy s připojováním SSTP VPN pomocí uživatelských certifikátů. Tedy ověřování pomocí EAP a PEAP. Tzn. to nejbezpečnější, co jde. Je to jenom seznam postřehů, co nefunguje. Měl jsem s tím už několikrát trable, tak to tu chci zdokumentovat.
Uživatelský certifikát
Windows 7 - na Windows 7 je s certifikátem jen jeden problém. Nesmí být uložen v CNG (Cryptography Next Generation). Ale jeho privátní klíč musí být umístěn v CSP (Cryptographic Services Provider). Jinak dostanete error:
Error 789
Cannot load dialog
A certificate could not be found that can be used
with this Extensible Authentication Protocol.
Jak to poznáte, kde je ten uživatelský certifikát? Jednoduše. Spustíte v příkazové řádce:
CERTUTIL -user -repairstore my *
a v jeho výpisu si najdete blok s vaším certifikátem. Na řádku Provider = hledáte jméno poskytovatele, buď CSP, nebo CNG. Jmen tam může být různých více. Toho špatného CNG poskytovatele poznáte tak, že se jmenuje Key Storage Provider. Ti správní CSP se tak nikdy nejmenují :-)
Windows 8 - tady to funguje s oběma, i s CSP i s CNG. No zázrak! Ale narazil jsem na jiný problém. V uživatelském certifikátu nesmí být nic jiného, než Client Authentication. Tedy přesněji takto. Uživatelské certifikáty mají pole Enhanced Key Usage (EKU), které musí obsahovat Client Authentication (OID 1.3.6.1.5.5.7.3.2). Ale když mám v certifikátu ještě Smart Card Logon (OID 1.3.6.1.4.1.311.20.2.2) tak to nefunguje. Hláška:
Error connecting to
Error 0x80420100. There was an unknown error.
Řešení? Zkoušel jsem poladit takovou tu novou tabulku Configure Certificate Selection. Ale nepomohlo. Prostě v certifikátu nesmí být nic jiného než Client Authentication.
Certifikát SSTP serveru
Nejhlavnější problém s certifikátem SSTP web serveru je jeho CRL cesta. Nejjednodušší je koupit si na něho certifikát od nějaké veřejné certifikační autority, kde CRL cesty máte zajištěny a nemusíte to řešit. Klient SSTP na stanicích totiž zkoumá CRL cestu a ověřu, jestli nebyl certifikát serveru zneplatněn.
Pokud použijete svůj vlastní, vydaný vnitřní certifikační autoritou (CA), tak musíte zařídit z venku, anonymně, dostupné CRL. Jinak dostanete error:
Error 0x80092013
The revocation function was unable to check revocation
because the revocation server was offline
Co z toho plyne? Musíte mít v tom certifikátu HTTP cestu. Vnitřní autority tam dávají hlavně LDAP cestu. Takže tam musíte přidat i nějakou HTTP cestu, která navíc nevyžaduje ověření. Musí to jít stáhnout z internetu.
Ověřit dostupnost CRL z klienta můžete prověřit tak, že si stáhnete certifikát toho serveru a potom pomocí příkazu certutil:
CERTUTIL -URL sstp-server-cert.cer
Jak ale stáhnete ten certifikát SSTP serveru z internetu? Jednoduše. Vždyť je to normální HTTPS server. Stačí tedy do prohlížeče na klientovi vložit toto SSTP URL:
https://vas-vpn-server/sra_{BA195980-CD49-458b-9E23-C84EE0ADCD75}
a certifikát serveru najdete nahoře u adresy. Měl by samozřejmě být platný a prohlížeč by neměl hlásit žádné problémy.
Windows 7 - jo a s Windows 7 jsem měl následující problém. I když byly v certifikátu serveru i HTTP cesty, stejně to někdy neběželo. V situaci, kdy nebyly na prvním místě. Když byl první LDAP, tak to neověřovalo. Stačilo, aby ta LDAP cesta byla až druhá a fičí. Na Windows 8 jsem to nepozoroval, tam to funguje spolehlivě, i když je ta HTTP cesta až druhá.