2017-09-26 2 views
0

나는 자바 서버가 그것은 SSL을 통해 클라이언트의 연결에 의해 두드리고되고,하지만 로그에 따르면, 클라이언트가 우리의 서버 인증서를 신뢰하지 않는 것 같습니다 : 우리는 아무 생각이JVM의 SSL 추적에서 클라이언트의 IP 주소를 어떻게 알 수 있습니까?

javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown 
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) 
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:154) 
    at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:2023) 
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1125) 
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387) 

을하는 클라이언트가이 문제를 일으키고 있으며 확인할 수있는 방법이 너무 많습니다. 그 중 일부는 원격 환경에서도 액세스 할 수 없습니다. javax.net.debug = all JVM 매개 변수를 설정해도 클라이언트가 연결을 설정하는 데 필요한 단서가 제공되지 않습니다.

SSL 연결을 설정하는 클라이언트의 IP 주소/호스트 이름에 대한 추가 정보를 제공 할 수있는 추가 JVM 인수 (Oracle JDK)를 아는 사람이 있습니까?

그렇지 않은 경우 클라이언트를 찾는 방법에 대한 아이디어가 있습니까? 나는 TCP/IP 패킷을 수집하고 불완전한 SSL 핸드 셰이크가 serverHello 메시지 직후에 종료 된 것을 찾으려고했다.

답변

0

HTTP 서버의 로그 수준을 높이면 자세한 내용을 볼 수 있지만 가장 빠른 해결책은 Wireshark 또는 다른 패킷 스니핑 도구를 시작하는 것입니다. 읽기가 훨씬 쉬워서 javax.net.debug 시스템 속성을 변경할 때마다 JVM을 다시 시작할 필요가 없습니다. 클라이언트가 웹 서비스를 호출하는 경우

0

이 유용 할 수 있습니다 :

@Resource 
WebServiceContext wsContext; 

HttpServletRequest request = (HttpServletRequest)wsContext.getMessageContext().get(SOAPMessageContext.SERVLET_REQUEST); 
String remoteIp = request.getRemoteAddr(); 
String remoteUser = request.getRemoteUser(); 
String remoteHost = request.getRemoteHost(); 

l.debug(String.format("Client - Remote IP address: %s, Remote User: %s, Remote Host: %s", remoteIp, remoteUser, remoteHost)); 
+0

정말. 이 오류는 TLS 핸드 셰이크 중에 발생하므로 HTTP가 들어오는 부분 즉, URL 요청 및 서블릿 호출에 도달하지 못합니다. – Lothar

관련 문제