Naršyklė atveria VPN pagrindinio kompiuterio vardą per HTTPS be priekaištų, o SSTP klientas vis tiek atsisako prisijungti. Šioje poroje nėra nieko prieštaringo. SSTP naudoja TLS kaip išorinį transportą ir tada tame pačiame ryšyje vykdo savo užklausą bei PPP naudingąją apkrovą, todėl sėkmingas puslapio įkėlimas įrodo tik vieną siaurą dalyką: serveris atsako į GET 443 prievade. Klientas užduoda kitą klausimą, o serveris gali į jį atsakyti blogai.

Puslapis įkeliamas, o tunelis ne

Žmonės griebiasi naršyklės testo, nes jis greitas, o paskui rezultatą laiko įrodymu, kad serveris pasiekiamas ir sukonfigūruotas. Tai įrodymas apie GET į kelią, kurį atidarė adreso juosta, ir nieko daugiau. VPN pokalbis prasideda po to paties TLS rankos paspaudimo, bet siunčia metodą ir kelią, kurių žiniatinklio puslapis niekada nenaudoja. Todėl 200 atsakymas naršyklei nieko nesako apie tai, ar SSTP galinis taškas egzistuoja.

Atskirkite du stebėjimus ir paieška sutrumpės. Transportas ir sertifikatų grandinė veikia, o kažkas protokolo mainuose virš jų neveikia. Tai kitas tyrimas nei sugedęs prievadas ar pasibaigęs sertifikatas, ir jam reikia kitų įrodymų.

Ką SSTP klientas iš tikrųjų siunčia

Klientas siunčia HTTP užklausą metodu SSTP_DUPLEX_POST į kelią /sra_{GUID}/, tada laiko ryšio turinį atvirą kaip dvikryptį srautą, kuris neša PPP kadrus. Atitinkantis serveris atsako HTTP/1.1 200 ir nustoja elgtis kaip žiniatinklio serveris. Visa kita yra parašas: 405 arba 404 reiškia, kad galinio taško nėra, 301 arba 302 reiškia, kad kažkas nukreipia užklausą, o momentinis FIN reiškia, kad tarpinė ar serveris uždarė srautą.

Todėl taikinys turi būti SSTP serveris, o ne žiniatinklio serveris su prisuktu TLS sertifikatu. Metodas, kelias ir ilgalaikis turinys yra protokolo reikalavimai, todėl atvirkštinė tarpinė negali jų pridėti vien konfigūracija. Tarpinė, kuri puikiai perduoda įprastą HTTPS, vis tiek gali atmesti metodą, kurio nepažįsta.

Kur tarpinė ar žiniatinklio serveris nutraukia srautą

Tarpininkas patikrina HTTP užklausos eilutę prieš ką nors perduodamas, o pasirinktinis metodas su neįprastu keliu gali nepraeiti jo taisyklių. Kai kurie įrenginiai tiekia įprastą puslapį, o tunelį atmeta arba nutraukia, todėl klientas praneša apie ryšį, kuris prasideda ir paskui miršta, o ne apie švarų atmetimą. Kiti priima užklausą, o tada taiko turinio arba neveiklumo laiko limitą, kurio PPP keepalive pranešimai neatlaiko. Abu kliento pusėje atrodo vienodai, todėl nepavykęs etapas svarbesnis už klaidos tekstą.

443 prievado bendrinimas tarp svetainės ir SSTP yra maršrutizavimo pasirinkimas, o ne pažadas, kad kiekvienas šuolis abu pokalbius tvarkys vienodai. Jei kelyje yra apkrovos balansuotojas, ugniasienė ar TLS terminatorius, pridėkite jį prie įtariamųjų sąrašo prieš liesdami VPN konfigūraciją.

Tikrinkite etapus atskirai

Vykdykite patikras iš eilės ir sustokite ties pirmąja klaida, nes kiekvienas etapas atmeta skirtingą sluoksnį. Žemiau esanti TLS zondas atskiria sertifikato tapatybę nuo visko, ką daro SSTP. Pakeiskite pagrindinio kompiuterio vardą savo galiniu tašku ir perskaitykite subject bei grandinę, kurią jis išspausdina.

openssl s_client -connect vpn.example.com:443 -servername vpn.example.com

Tada susiekite likusius įrodymus su etapais, o ne spėliokite iš kliento klaidos. Žemiau esanti lentelė yra kontrolinis sąrašas, kurį cituoti biliete, su parašu, skiriančiu vieną nesėkmę nuo kitos.

StageWhat it provesFailure signature
TCP to 443A listener exists and the path is openTimeout or connection refused
TLS with SNIThe certificate matches the name you useName mismatch or untrusted chain
SSTP_DUPLEX_POST exchangeThe endpoint is an SSTP server405, 404, 301 or an early FIN
PPP authenticationThe user credential was acceptedAuth failure after a 200 response
Inner routingA permitted destination is reachableTunnel up, no reply from the target

Biliete užrašykite paskutinį sėkmingą etapą, o ne rašykite "nepavyksta prisijungti". MS-SSTP specifikacija dokumentuoja užklausą ir PPP mainus, einančius po TLS rankos paspaudimo, ir yra nuoroda, kodėl naršyklės testas negali pakeisti nė vieno iš jų.

Pirmiausia tapatybė, tada PPP

TLS tapatybė ir PPP autentifikavimas yra nuoseklūs, ne alternatyvūs, ir jų painiojimas nukreipia žmones prie neteisingo serverio nustatymo. Klientas pirmiausia patikrina serverio sertifikatą ir jo numatytą paskirtį, tada PPP derasi dėl savo būsenos ir autentifikuoja naudotoją iššūkio-atsakymo metodu arba EAP. Sertifikato problema duoda kitokią klaidą nei atmestas slaptažodis, ir nė viena klaida neaprašo etapo, kurį apima kita.

Pagrindinio kompiuterio vardo pakeitimas adresu arba sertifikato įspėjimo praleidimas pašalina patikrą, kuri būtų nustačiusi nepavykusį etapą, o ne ją ištaiso. Palikite įspėjimą ir perskaitykite jį. Taip pat neatstatykite PPP slaptažodžio, kai HTTP mainai niekada nepasiekė SSTP elgsenos, nes prisijungimo duomenų niekada nebuvo prašoma.

Susiję straipsniai