2009-06-15 16 views
20

Ho una pagina aspx che sta controllando Request.IsSecureConnection per assicurarti che sia vera, in caso contrario reindirizza alla pagina protetta a https://www.domain.com/page.aspx.Perché Request.IsSecureConnection restituisce false quando è previsto true

Il server ha un certificato SSL installato per il dominio e il browser mostra l'icona del lucchetto.

Lo stesso codice funzionava correttamente su un server diverso, ma ora Request.IsSecureConnection restituisce sempre false.

Ho creato un file aspx completamente vuoto, che stampa solo il valore restituito di Request.IsSecureConnection ed è ancora falso, quindi non c'è altro contenuto proveniente da una richiesta http standard.

Qualcuno potrebbe suggerire cosa potrebbe causare questo, o dare qualche suggerimento su come potrei scoprire cosa sta causando questo a restituire sempre false?

risposta

28

Se è presente un router di bilanciamento del carico o simile davanti al server Web con terminazione SSL, la connessione da lì al server Web non sarà su SSL. In questo caso, di solito è necessario verificare una connessione su una porta specifica o per le intestazioni impostate dal servizio di bilanciamento del carico.

+3

Oppure lasciare a lui il bilanciamento del carico per garantire che la connessione sia protetta dal client al tuo sito web. –

+0

Dovrebbe essere in grado di confermare questo sospetto emettendo Request.UserHostAddress e/o Request.UserHostName in quella pagina di test. Se quei valori non sono il client da cui si sta connettendo (o un proxy che sta passando il client), è probabile che identificheranno una sorta di bilanciamento del carico o proxy inverso che si trova di fronte al suo server web. –

+0

Request.UserHostAddress e Request.UsHomeHome restituiscono entrambi il mio indirizzo IP. – Will

1

Alcuni bilanciatori di carico aggiungono una nuova intestazione alla richiesta che è possibile utilizzare per determinare se la richiesta originale del client è arrivata su SSL. Con siti web Azure il seguente codice sembra funzionare:

if (string.IsNullOrEmpty(Request.Headers["x-arr-ssl"])) 
{ 
    // No SSL 
} 
else 
{ 
    // Secure connection 
} 

Alcuni altri bilanciatori di carico possono utilizzare un altro colpo di testa, ad esempio X-Forwarded-Proto.

+0

Il nostro utilizza "SSLSessionID" solo per un altro punto dati. –

Problemi correlati