我收到以下错误:
javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到所请求目标的有效证书路径 在sun.security.ssl.Alerts.getSSLException(未知来源) at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source) 在sun.security.ssl.Handshaker.fatalSE(未知来源) 在sun.security.ssl.Handshaker.fatalSE(未知来源) at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source) 在sun.security.ssl.ClientHandshaker.processMessage(未知来源) 在sun.security.ssl.Handshaker.processLoop(未知来源) 在sun.security.ssl.Handshaker.process_record(未知来源) at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source) 在sun.security.ssl.SSLSocketImpl.startHandshake(未知来源) 在sun.security.ssl.SSLSocketImpl.startHandshake(未知来源) 在sun.net.www.protocol.https.HttpsClient.afterConnect(未知来源) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source) at com.towerdata.api.personalization.TowerDataApi.getJsonResponse(TowerDataApi.java:246) at com.towerdata.api.personalization.TowerDataApi.queryByEmail(TowerDataApi.java:101) 在EmailActivityMetricsRequestor.requestTowerData(EmailActivityMetricsRequestor.java:57) 在EmailActivityMetricsRequestor.Requestor(EmailActivityMetricsRequestor.java:44) 在Main.main(Main.java:21) 引发者:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到所请求目标的有效证书路径 在sun.security.validator.PKIXValidator.doBuild(未知来源) at sun.security.validator.PKIXValidator.engineValidate(Unknown Source) at sun.security.validator.Validator.validate(Unknown Source) at sun.security.ssl.X509TrustManagerImpl.validate(Unknown Source) at sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source) at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source) ......还有17个 引起:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径 at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source) 在java.security.cert.CertPathBuilder.build(未知来源) ......还有23个
我做了以下事情:
当我获得我要求的网站安全性的详细信息时,会出现3个证书。 rootca,中间和第3。我是否需要所有这些证书才能建立有效的密钥库?如果是这样,我该怎么做。我使用下面的代码为rootca创建一个密钥库,但这并没有解决我的问题。
.\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias alex -file C:\Users\Alex.cauthen\Documents\CA1.cer
编辑:此外,我正在调用此服务器的API,这意味着我调用了一个方法,它向我发出请求。我联系了他们的支持团队,他们说没有人遇到这个问题。我不知道这些信息是否有用。
javax.net.debug = ssl输出不成功时:
%%无效:[会话-1,TLS_RSA_WITH_AES_128_CBC_SHA] main,SEND TLSv1 ALERT:致命,描述= certificate_unknown main,WRITE:TLSv1警报,长度= 2 main,名为closeSocket()
随机成功时的输出:
***完成了 verify_data:{0,221,45,195,129,216,158,173,83,221,170,52}
%%缓存客户端会话:[Session-1,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256] main,WRITE:TLSv1.2应用数据,长度= 264 main,READ:TLSv1.2应用程序数据,长度= 241
答案 0 :(得分:2)
您只需要导入根CA证书,并且您使用的命令行是正确的。因此,您实际上并未将该文件用作信任存储。您需要将javax.net.ssl.trustStore
属性设置为其位置,或者使用已加载的SSLContext
初始化TrustManager
,然后从那里继续。
答案 1 :(得分:0)
所以我犯了一个非常愚蠢的错误。我没有在命令行中指定cacerts的正确路径,因此它在当前目录而不是安全文件夹中创建了一个文件夹cacerts。