SSTP klientas priima serverį tik po to, kai TLS patikra pavyksta, ir ta patikra lygina vardą, grandinę ir paskirtį. Vardas imamas iš ryšio profilio, o ne iš adreso, kurį galbūt atsitiktinai galite pinginti. Kai vienas iš trijų nesutampa, klientas praneša apie sertifikato problemą ir niekada nepasiekia prisijungimo užklausos.

Profilio vardas nusprendžia, kas tikrinama

SSTP vykdo TLS per TCP 443, todėl klientas elgiasi kaip bet kuris kitas TLS klientas: paima pagrindinio kompiuterio vardą iš profilio, paprašo to vardo ir palygina sertifikatą su juo. Jei profilyje įvesite IP adresą, palyginimas tampa IP adresų palyginimu, kurio dauguma serverio sertifikatų neatitinka.

Todėl naršyklės testas gali pavykti, nors VPN nepavyksta, nes naršyklė naudojo kitą vardą nei profilis. Ta pati skirtis atsiranda, kai split-horizon DNS išsprendžia VPN pagrindinio kompiuterio vardą į vidinį adresą, o naršyklė pasiekė viešą. Pirmiausia suderinkite profilį su dokumentuotu pagrindinio kompiuterio vardu, tada lyginkite sertifikatus. Visa kita, ką pakeisite prieš tai, yra spėjimas.

Ką turi turėti serverio sertifikatas

Šiuolaikiniai klientai lygina su subjekto alternatyvių vardų plėtiniu, todėl pagrindinio kompiuterio vardas turi būti ten kaip DNS įrašas. Vien bendro vardo nepakanka dabartiniams patikros rinkiniams, o pakaitos simbolis apima vieną žymą, o ne bet kurį jūsų sugalvotą subdomeną. Trys sertifikatai parodo ribą: teisingas vardas su netinkama paskirtimi patvirtina tapatybę ir tada nepavyksta paskirties patikroje, teisingi vardas ir paskirtis su trūkstamu tarpiniu sertifikatu nepavyksta grandinėje, o vardas, esantis tik bendrame varde, nepavyksta anksčiau, nei kas nors iš tų dviejų pradeda reikšti.

Sertifikatui taip pat reikia serverio autentifikavimo paskirties – išplėstinio rakto naudojimo vertės, nurodytos Microsoft SSTP specifikacijoje, tai yra serverAuth su objekto identifikatoriumi 1.3.6.1.5.5.7.3.1. Rakto naudojimas ir galiojanti grandinė užbaigia rinkinį. Sertifikatas, kuris yra serveryje, išduotas teisingam vardui, bet tik kliento autentifikavimui, vis tiek nepavyksta.

Patikrinkite grandinę ir laikrodį prieš prisijungimo duomenis

Laiko ir pasitikėjimo gedimai duoda tą patį matomą rezultatą kaip vardo neatitikimas, ir abu pigiau diagnozuoti nei slaptažodžio problemą. Patikrinkite serverio laikrodį ir kliento laikrodį, tada perskaitykite grandinę taip, kaip ją mato klientas:

# from the client, or any host that runs openssl
openssl s_client -connect vpn.example.com:443 -servername vpn.example.com -showcerts </dev/null 2>/dev/null | openssl x509 -noout -subject -dates -ext subjectAltName
openssl s_client -connect vpn.example.com:443 -servername vpn.example.com -verify_return_error </dev/null
# on the Windows server that holds the SSTP listener
w32tm /query /status

Pirmoji komanda išspausdina vardą, galiojimo laikotarpį ir alternatyvius vardus, su kuriais klientas lygins. Antroji praneša apie tikrinimo klaidas su pateikta grandine, ir būtent ten pasirodo trūkstamas tarpinis sertifikatas. Windows sistemoje laiko tarnybos užklausa pasako, ar laikrodis koreguojamas, ar tiesiog nukrypo.

Vidinis CA prideda dar vieną sąlygą: klientas turi pasitikėti tuo CA. Įdiekite organizacijos šakninį sertifikatą per patvirtintą platinimo kanalą, o ne iš puslapio, siūlančio pakaitinį sertifikatą, nes tas sprendimas yra visas pasitikėjimo modelis mažu mastu.

Serverio patikra ir naudotojo autentifikavimas yra nuoseklūs etapai su skirtingomis nesėkmėmis. Sertifikato klaida reiškia, kad klientas niekada nepasitikėjo serveriu, o atmestas slaptažodis reiškia, kad pasitikėjo, tačiau duomenys buvo neteisingi. Sertifikato patikros išjungimas norint pasiekti slaptažodžio užklausą pašalina garantiją, o ne ją pataiso. Norėdami įrodyti, kad likusi kelio dalis veikia, išbandykite tą patį pagrindinio kompiuterio vardą ir prievadą iš kliento, kuris jau pasitiki grandine, o įdiegtą profilį palikite ramybėje.

Pataisykite vardą arba sertifikatą ir bandykite dar kartą

Taisymą nusprendžia trys sąlygos. Jei profilio vardas neteisingas, pataisykite profilį arba pridėkite trūkstamą vardą prie sertifikato. Jei grandinė nepilna, įdiekite tarpinį sertifikatą serveryje. Jei paskirtis neteisinga, išduokite iš naujo, o ne lopšykite aplinkui.

Po pakeitimo vėl prisijunkite palaikomu klientu ir patvirtinkite, kad pasirodo prisijungimo užklausa, o tada kad tunelis pakyla. Biliete užrašykite naudotą pagrindinio kompiuterio vardą, išdavėją ir galiojimo pabaigos datą. Tas įrašas paverčia kitą atnaujinimą suplanuotu darbu, o ne dar vienu sutrikimu, ir parodo kitam žmogui, kuri iš trijų sąlygų iš tikrųjų buvo pažeista.

Susiję straipsniai