2009-06-15 14 views
20

Ich habe eine aspx-Seite, die Request.IsSecureConnection überprüft, um sicherzustellen, dass es wahr ist, wenn es nicht eine Umleitung auf die sichere Seite um https://www.domain.com/page.aspx.Warum gibt Request.IsSecureConnection false zurück, wenn true erwartet wird

Der Server hat ein SSL-Zertifikat für die Domäne installiert, und der Browser zeigt das Vorhängeschlosssymbol an.

Derselbe Code lief auf einem anderen Server einwandfrei, aber jetzt gibt Request.IsSecureConnection immer false zurück.

Ich habe eine vollständig leere Aspx-Datei erstellt, die nur den Rückgabewert von Request.IsSecureConnection druckt und es immer noch falsch ist, so dass kein anderer Inhalt von einer Standard-HTTP-Anfrage kommt.

Kann jemand vorschlagen, was könnte dies verursachen, oder geben Sie irgendwelche Hinweise, wie ich herausfinden könnte, was bewirkt, dass dies immer falsch zurückgibt?

Antwort

28

Wenn sich vor Ihrem Web-Server mit SSL-Terminierung ein Load-Balancing-Router oder Ähnliches befindet, ist die Verbindung von dort zu Ihrem Webserver nicht über SSL. In diesem Fall müssen Sie normalerweise nach einer Verbindung an einem bestimmten Port suchen oder nach Headern, die vom Load Balancer eingerichtet werden.

+3

Oder überlassen Sie es dem Load Balancer, um sicherzustellen, dass die Verbindung vom Client zu Ihrer Website sicher ist. –

+0

Er sollte in der Lage sein, diesen Verdacht zu bestätigen, indem er Request.UserHostAddress und/oder Request.UserHostName auf dieser Testseite ausgibt. Wenn diese Werte nicht der Client sind, von dem er eine Verbindung herstellt (oder ein Proxy, den der Client durchläuft), werden sie wahrscheinlich eine Art Load Balancer oder Reverse Proxy identifizieren, der vor seinem Webserver sitzt. –

+0

Request.UserHostAddress und Request.UserHostName geben beide meine IP-Adresse zurück. – Will

1

Einige Load Balancer fügen der Anforderung einen neuen Header hinzu, mit dem Sie feststellen können, ob die ursprüngliche Anforderung vom Client über SSL gekommen ist. Mit Azure Websites scheint der folgende Code zu arbeiten:

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

Einige andere Loadbalancer eines anderen Header verwenden können, zum Beispiel X-Forwarded-Proto.

+0

Ours verwendet "SSLSessionID" nur für einen anderen Datenpunkt. –

Verwandte Themen