2016-08-03 2 views
1

. socketFactorySSLSocketFactory.getDefault()입니다. 그러나 연결 시간 초과를 설정하려고합니다. 따라서,이 코드에 선 위에 변경 :HTTPS 문제는 연결은 ConnectionTimeout

sslSocket = (SSLSocket) socketFactory.createSocket(); 
sslSocket.connect(new InetSocketAddress(host, port), connectionTimeout); 

하지만 나는 다음과 같은 예외가 있어요 :

Exception in thread "main" jodd.http.HttpException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; 

원인 예외 :이 디버깅 할 때

sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 

, 나는 '을 첫 번째 경우 코드는 요청 된 사이트에서 유효한 모든 인증서를 가져옵니다. 두 번째 경우에는 이러한 인증서가 누락되어 오류가 발생했습니다.

첫 번째 one-liner 버전처럼 작동하려면 2-liner 변경 사항을 추가해야합니까?

COMPLETE 스택 트레이스 여기

jodd.http.HttpException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; <--- sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
    at jodd.http.HttpRequest.open(HttpRequest.java:667) 
    at jodd.http.HttpRequest.open(HttpRequest.java:649) 
    at jodd.http.HttpRequest._send(HttpRequest.java:747) 
    at jodd.http.HttpRequest.send(HttpRequest.java:742) 
    at jodd.JoddHttpTest.main(JoddHttpTest.java:56) 
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) 
    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949) 
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302) 
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296) 
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1509) 
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216) 
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979) 
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:914) 
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062) 
    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) 
    at jodd.http.net.SocketHttpConnectionProvider.createSSLSocket(SocketHttpConnectionProvider.java:153) 
    at jodd.http.net.SocketHttpConnectionProvider.createHttpConnection(SocketHttpConnectionProvider.java:68) 
    at jodd.http.HttpRequest.open(HttpRequest.java:665) 
    ... 4 more 
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:387) 
    at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292) 
    at sun.security.validator.Validator.validate(Validator.java:260) 
    at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324) 
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229) 
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124) 
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1491) 
    ... 14 more 
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
    at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141) 
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126) 
    at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) 
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382) 
    ... 20 more 
---[cause]------------------------------------------------------------------------ 
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
    at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141) 
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126) 
    at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) 
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382) 
    at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292) 
    at sun.security.validator.Validator.validate(Validator.java:260) 
    at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324) 
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229) 
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124) 
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1491) 
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216) 
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979) 
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:914) 
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062) 
    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) 
    at jodd.http.net.SocketHttpConnectionProvider.createSSLSocket(SocketHttpConnectionProvider.java:153) 
    at jodd.http.net.SocketHttpConnectionProvider.createHttpConnection(SocketHttpConnectionProvider.java:68) 
    at jodd.http.HttpRequest.open(HttpRequest.java:665) 
    at jodd.http.HttpRequest.open(HttpRequest.java:649) 
    at jodd.http.HttpRequest._send(HttpRequest.java:747) 
    at jodd.http.HttpRequest.send(HttpRequest.java:742) 
    at jodd.JoddHttpTest.main(JoddHttpTest.java:56) 
+0

전체 스택 추적을 게시하십시오. 너의 질문에. – EJP

+0

스택 트레이스에 따르면'startHandshake()'를 호출합니다. 이게 진짜 코드인가요? – EJP

+0

@EJP 네, 왜요? 나는 여러 가지 예에서 이것을 보았다. 그리고 효과가 있었습니까? 정교하게 주시겠습니까? – igr

답변

1

는 대답이다. 내 경험에 의하면

(이 솔루션은 어디에서나 볼 수 있지만!) 작동하지 않습니다. 일반 소켓을 만든 다음 SSL 소켓으로 포장 : socketFactorySSLSocketFactory 인스턴스가

Socket sock = new Socket(); 
sock.connect(new InetSocketAddress(host, port), connectionTimeout); 
sslSocket = (SSLSocket)socketFactory.createSocket(sock, host, port, true); 

입니다 대신에, 나는 다음과 같은했다.