2012-10-20 2 views
3

단순히 현재 URL이 HTTP 또는 HTTPS인지 여부를 확인하고자합니다. 문제는 테스트 환경에서 자체 서명 된 인증서가 여러 개 있기 때문에 인증서 가능성을 검증하는 것이 옵션이 아닙니다. 다음을 시도했지만 모든 경우에 thry가 작동하지 않는 것으로 보입니다.현재 URL에서 HTTP 또는 HTTPS 가져 오기

String protocol = request.getProtocol(); 
out.println(protocol); // prints out HTTP/1.1 on self signed servers 

Boolean secure = ((HttpServletRequest)pageContext.getRequest()).isSecure(); 
if (secure) { 
    out.println("secure") 
} else { 
    out.println("not secure") // always fails 
} 

은 내가 대해 GetRequest를 사용하고이 'https'문자열을 검색 할 수도있을 것 같군요 -하지만 난이 일을 진정으로 지원하는 방법이 있으리라 믿고있어.

+0

[java ee doc] (http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html#isSecure%28%29)는 'isSecure()'가 이 요청은 HTTPS와 같은 보안 채널을 사용하여 이루어졌습니다. 자기 서명 인증서에 신경 쓰지 않는 것 같습니다. – Haozhun

+0

그냥 추측하지만 실제 서명 인증서로 시도해 보셨습니까? 어쩌면 자체 서명 된 인증서가 안전하지 않기 때문에 false를 반환합니다. –

+0

isSecure'가 작동해야하지만 환경에 따라 다릅니다. HTTP 역방향 프록시 구성 애플리케이션 서버를 지키고있는 HTTP 서버는 무엇입니까? – home

답변

2

자체 서명 된 인증서 또는 공식 인증서가 사용되는지는 중요하지 않습니다. SSL/TLS가 배포 컨테이너에서 종료되지 않으면 'isSecure()'는 기본적으로 'false'를 반환합니다. 그러나 SSL/TLS가 배포 컨테이너에서 종료되지 않은 경우에도 Tomcat과 같은 일부 배포 컨테이너는 'isSecure()'호출에 'true'를 반환하도록 구성 할 수 있습니다. 예 : 이것은 (하드웨어)로드 밸런서에서 SSL이 종료되고 'sendRedirect()'가 상대 URL과 함께 사용되는 경우 유용합니다.