Il browser apre il nome host della VPN via HTTPS senza protestare, e il client SSTP continua a rifiutarsi di connettersi. Nulla in questa coppia è contraddittorio. SSTP usa TLS come trasporto esterno e poi esegue la propria richiesta e il carico PPP dentro quella connessione, quindi una pagina caricata correttamente dimostra solo una cosa molto stretta: l'host risponde a un GET sulla porta 443. Il client pone un'altra domanda, e il server potrebbe rispondere male.

La pagina carica e il tunnel no

Le persone ricorrono al test del browser perché è veloce, e poi prendono il risultato come prova che il server è raggiungibile e configurato. È una prova su un GET al percorso aperto dalla barra degli indirizzi, niente di più. La conversazione VPN inizia dopo lo stesso handshake TLS, ma invia un metodo e un percorso che una pagina web non usa mai. Quindi una risposta 200 per il browser non dice nulla sull'esistenza dell'endpoint SSTP.

Separa le due osservazioni e la ricerca si accorcia. Trasporto e catena di certificati funzionano, e qualcosa nello scambio di protocollo sopra di essi non funziona. È un'indagine diversa da quella di una porta rotta o di un certificato scaduto, e richiede prove diverse.

Che cosa invia davvero il client SSTP

Il client invia una richiesta HTTP con il metodo SSTP_DUPLEX_POST al percorso /sra_{GUID}/, poi mantiene aperto il corpo della connessione come flusso bidirezionale che trasporta frame PPP. Un server conforme risponde HTTP/1.1 200 e smette di comportarsi come un server web. Qualsiasi altra cosa è una firma: 405 o 404 significa che l'endpoint non c'è, 301 o 302 significa che qualcosa reindirizza la richiesta, e un FIN immediato significa che un proxy o un server ha chiuso il flusso.

Per questo l'obiettivo deve essere un server SSTP e non un server web con un certificato TLS avvitato sopra. Il metodo, il percorso e il corpo di lunga durata sono requisiti del protocollo, quindi un proxy inverso non può aggiungerli con la sola configurazione. Un proxy che inoltra perfettamente HTTPS normale può comunque rifiutare un metodo che non riconosce.

Dove un proxy o un server web spezza il flusso

Un intermediario ispeziona la riga di richiesta HTTP prima di inoltrare qualsiasi cosa, e un metodo personalizzato con un percorso insolito può fallire le sue regole. Alcuni dispositivi servono una pagina normale mentre rifiutano o interrompono il tunnel, così il client segnala una connessione che parte e poi muore invece di un rifiuto pulito. Altri accettano la richiesta e poi applicano un timeout di corpo o di inattività che i keepalive PPP non sopravvivono. Entrambi sembrano uguali dal lato client, per questo la fase che ha fallito conta più del testo dell'errore.

Condividere la porta 443 tra un sito web e SSTP è una scelta di routing, non una promessa che ogni salto tratti le due conversazioni allo stesso modo. Se sul percorso c'è un bilanciatore di carico, un firewall o un terminatore TLS, aggiungilo alla lista dei sospetti prima di toccare la configurazione VPN.

Verifica le fasi separatamente

Esegui i controlli in ordine e fermati al primo fallimento, perché ogni fase esclude uno strato diverso. La sonda TLS qui sotto separa l'identità del certificato da tutto ciò che fa SSTP. Sostituisci il nome host con il tuo endpoint e leggi il subject e la catena che stampa.

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

Poi mappa le prove rimanenti sulle fasi invece di indovinare dall'errore del client. La tabella qui sotto è la lista di controllo da citare nel ticket, con la firma che separa un fallimento dal successivo.

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

Registra nel ticket l'ultima fase riuscita invece di scrivere "impossibile connettersi". La specifica MS-SSTP documenta la richiesta e lo scambio PPP che seguono l'handshake TLS, ed è il riferimento per cui un test nel browser non può sostituire né l'una né l'altro.

Prima l'identità, poi PPP

L'identità TLS e l'autenticazione PPP sono sequenziali, non alternative, e confonderle manda le persone verso l'impostazione sbagliata del server. Il client valida prima il certificato del server e il suo scopo previsto, poi PPP negozia il proprio stato e autentica l'utente con un metodo challenge-response o EAP. Un problema di certificato produce un errore diverso da una password rifiutata, e nessuno dei due errori descrive la fase coperta dall'altro.

Sostituire il nome host con un indirizzo, o cliccare oltre l'avviso di certificato, elimina il controllo che avrebbe identificato la fase fallita invece di correggerla. Mantieni l'avviso e leggilo. Non reimpostare nemmeno una password PPP quando lo scambio HTTP non ha mai raggiunto il comportamento SSTP, perché la credenziale non è mai stata richiesta.

Articoli correlati