2011-11-20 1 views

답변

83

HttpSerlvetRequest.isSecure()는 대답에 관계없이 작동합니다 생각합니다. ServletContainer는 다음과 같은 경우에 true를 리턴 할 책임이 있습니다.

  • ServletContainer 자체가 https에서 요청을 수락 할 수있는 경우.
  • ServletContainer 앞에 LoadBalancer가있는 경우. 그리고 LoadBlancer는 https에 대한 요청을 가지고 ServletContainer에 일반 http에 동일한 요청을 보냈습니다. 이 경우 LoadBalancer는 ServletContainer에 X-SSL-Secure : true 헤더를 보내야합니다.

컨테이너는 요청이 HTTPS에 수신 될 때,이 요청이 가능한 속성을 확인해야합니다 :

  • 이 javax.servlet.http.sslsessionid
  • javax.servlet.request.key_size
  • javax.servlet.request.X509Certificate
+1

어디에서 'X-SSL-Secure : true'를 얻었습니까? 계속 검색 중이므로이 헤더에 대한 추가 정보를 찾을 수 없습니다. – Zotov

+0

내 환경에서는 작동하지 않습니다 : 프론트 프록시로 아파치 2.4.10; 그것은 자바에서 알 수없는 것이기 때문에, 요청은 아파치에게 http 나 https로 행해졌 다. 물론, 나는 http to Java로 그것을 얻었지만 프론트 프록시가 어떻게 액세스되었는지 알 필요가있다. - 사실 @Zotov도 언급했듯이 : X-SSL-Sercure 헤더에 대한 정보는 거의 없습니다.그래서 나는 이것이 널리 구현되지 않았다고 가정합니다. – badera

+0

헤더 이름은별로 표준이 아니므로 다를 수 있습니다. 그러나 여기서는 프록시가 SSL에 대한 헤더를 추가 할 수 있고 서버가이를 읽을 수 있다는 개념입니다. Ex의 경우 Nginx는 X-SSL-Protocol을 추가합니다. 또한 맞춤 헤더로 대체 할 수 있습니다. –

10

isSecure. 상속 된 메서드를 확인하십시오.

-3

https 및 http는 다른 포트에서 실행됩니다. 따라서 요청에서 포트를 가져올 수 있으며 요청이 어느 포트에서 왔는지 알 수 있으므로 프로토콜을 알 수 있습니다. int port = request.getServerPort();

+4

@Krishnan 포트 번호는 임의로 선택할 수 있습니다. HTTP에서 44 개를 실행할 수 있습니다. 3 및 HTTPS on 80 또는 이들의 임의의 조합. – hd1

23

포트 번호는 신뢰할 수 없습니다.
그러나이 방식에 따라 달라질 수 있습니다 :

사용 :이 https 경우 request.getScheme()가 확인합니다.

그렇다면 보안 연결입니다.

나는이 톰캣 버전

+1

isSecure는 최소한 [1.2] (http://download.oracle.com/javaee/1.2.1/api/javax/servlet/ServletRequest.html#isSecure%28%29)로 돌아가며 Tomcat 전용이 아닙니다. . –