首页 文章

PKIX路径构建错误:不确定我是否正确创建密钥库

提问于
浏览
0

我收到以下错误:

javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法在sun.security.ssl.Alerts找到所请求目标的有效证书路径 . get.SLException(未知来源)sun.security.ssl.SSLSocketImpl.fatal(未知来源)sun.security.ssl.Handshaker.fatalSE(未知来源)sun.security.ssl.Handshaker.fatalSE(未知来源)at sun . 位于sun.security.ssl.Handshaker.processLoop(未知来源)sun.security.ssl.Handshaker.process_record的sun.security.ssl.ClientHandshaker.processMessage(未知来源)的security.ssl.ClientHandshaker.serverCertificate(未知来源)未知来源)sun.security.ssl.SSLSocketImpl.readRecord(未知来源)sun.security.ssl.SSLSocketImpl.performInitialHandshake(未知来源)sun.security.ssl.SSLSocketImpl.startHandshake(未知来源)sun.security . sun.net.www.protoc上的ssl.SSLSocketImpl.startHandshake(未知来源)来自sun.net.www.protocol.http.HttpURLConnection.getInputStream(未知来源)的sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(未知来源)的ol.https.HttpsClient.afterConnect(未知来源) . 位于com.towerdata.api.personalization.TowerDataApi.getJsonResponse(TowerDataApi.java:246)的com.towerdata.api.personalization.TowerDataApi.queryByEmail(TowerDataApi.java)中的net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(未知来源) :101)在EmailActivityMetricsRequestor.requestTowerData(EmailActivityMetricsRequestor.java:57)位于Main.main(Main.java:21)的EmailActivityMetricsRequestor.Requestor(EmailActivityMetricsRequestor.java:44)引起:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法在sun.security.validator.PKIXValidator.engineValidate(未知)sun.security.validator.PKIXValidator.doBuild(未知来源)找到所请求目标的有效证书路径来自sun.security.ssl.X509TrustManagerImpl.validate(未知来源)sun.security.ssl.X509TrustManagerImpl.checkTrusted(未知来源)sun.security的sun.security.validator.Validator.validate(未知来源) . ssl.X509TrustManagerImpl.checkServerTrusted(未知来源)... 17更多引起:sun.security.provider.certpath.SunCertPathBuilderException:无法在sun.security.provider.certpath.SunCertPathBuilder.engineBuild(未知)找到所请求目标的有效证书路径来自java.security.cert.CertPathBuilder.build(未知来源)......还有23个

我做了以下事情:

  • 我更新了JRE8,认为CA可能已经过时了

  • 在Jclipse中将JRE8更改为我的构建路径 . 我第一次这样做,它解决了我的问题,我能够发出HTTP请求,直到我关闭了eclipse . 之后再次出现同样的错误 .

  • 通过谷歌浏览器下载了他们的根证书,并尝试通过执行以下命令将其添加到密钥库(使用Windows,在管理模式下运行cmd.exe)

  • 我也试过在Admin模式下运行Eclipse

当我获得我要求的网站安全性的详细信息时,会出现3个证书 . rootca,中间和第3 . 我是否需要所有这些证书才能 Build 有效的密钥库?如果是这样,我该怎么做 . 我使用下面的代码为rootca创建一个密钥库,但这并没有解决我的问题 .

.\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias alex -file C:\Users\Alex.cauthen\Documents\CA1.cer

编辑:此外,我正在调用此服务器的API,这意味着我调用一个方法,它向我发出请求 . 我联系了他们的支持团队,他们说没有人遇到这个问题 . 我不知道这些信息是否有用 .

javax.net.debug = ssl输出不成功时:

%% Invalidated:[Session-1,TLS_RSA_WITH_AES_128_CBC_SHA] main,SEND TLSv1 ALERT:fatal,description = certificate_unknown main,WRITE:TLSv1 Alert,length = 2 main,called 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

2 回答

  • 2

    您只需要导入根CA证书,并且您实际上不使用该文件作为信任存储的命令行 . 您需要将 javax.net.ssl.trustStore 属性设置为其位置或使用已加载的 TrustManager 初始化 SSLContext ,然后从那里继续 .

  • 0

    所以我犯了一个非常愚蠢的错误 . 我没有在命令行中指定cacerts的正确路径,因此它在当前目录而不是在安全性文件夹中创建了一个文件夹cacerts .

相关问题