2016-02-03 173 views
2

我试图检索使用Java的使用SSL证书的论坛的索引页:Java“的sun.security.validator.ValidatorException:PKIX路径建设失败”证书验证错误

WebClient webClient = new WebClient(...); 
HtmlPage sectionPage = webClient.getPage("https://rstforums.com/"); 

我已经在调用任何与SSL相关的方法之前以编程方式推荐here禁用SNI。在第二次回答this问题,并从this一个我加入论坛的证书,证书列表中的第三:

C:\Program Files\Java\jdk1.8.0_65\jre\lib\security>keytool -import -alias RST_CERT -file forums_certificate -keystore cacerts 

其中forums_certificate包含:

-----BEGIN CERTIFICATE----- 
MIIDmjCCAoKgAwIBAgIQLIJ9H3N2RZkAeZ8Jmma6RzANBgkqhkiG9w0BAQsFADBI 
MRswGQYDVQQDExJFU0VUIFNTTCBGaWx0ZXIgQ0ExHDAaBgNVBAoTE0VTRVQsIHNw 
b2wuIHMgci4gby4xCzAJBgNVBAYTAlNLMB4XDTE1MTEyNDEyNTI0MFoXDTE2MTEy 
NDEyNTMyMlowWjELMAkGA1UEBhMCUk8xGjAYBgNVBAMTEXd3dy5yc3Rmb3J1bXMu 
Y29tMS8wLQYJKoZIhvcNAQkBFiByc3Rmb3J1bXMuY29tQGRvbWFpbnNieXByb3h5 
LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK9jSCt9p+g3wdP9 
KhmNQuB5NZMlDoL0A5ONzUat5RPf1iQ91+1EWfS1j93X6m5mMSs5+RMc259TjMPv 
oxSq9lK7Z0ZwUdHPkjVmMDKOOlho2zh1ZTh7W26dT8UmeuofgFCxaJBuThalWkpg 
qT5GgpcuIXWQVlB4vD43/wdPhWFUZ1QhFgK/HppiXVfKNbBRNM69iSbjzkBbstXI 
68yLxtbzwOqEdIpJ5CWxQCr0+BCk7SPGHyXbJaVL1SuQ/7Th8PkJd43bBTLsVY5w 
WemSZfEoqeCeHUxeMSdMy1FKkUBTlvZBn+KBVUAJ419rE+Jgrp4tikwjJxEjB/Ko 
Uwdkb9ECAwEAAaNuMGwwCQYDVR0TBAIwADATBgNVHSUEDDAKBggrBgEFBQcDATAd 
BgNVHQ4EFgQU9+VnJO4u71+3bAS9hYFiXtzG+FswKwYDVR0RBCQwIoIRd3d3LnJz 
dGZvcnVtcy5jb22CDXJzdGZvcnVtcy5jb20wDQYJKoZIhvcNAQELBQADggEBAHxq 
icR/mSh0TTQlb6SreCyxNyO4KflAOnp3yFnFStVo7wxI5Ixb2jCUP/IGxSwJeN2p 
AEzAWXls9NoMVcEIbIfGcdsvJS1yyh6GeWVzBrMNOde1/2590ipsPKyQAk2j1zPl 
96kWnPWTB6DtSbB3AI4dWeawwkh2D5+NL5HMjQwm3Lb3EhKQgBPLboygg12E+JXP 
ydZjIZWC/42nN5ZMHXXrGnxac5F3tMwkyng0qDWLpSoa3c3ep43Tgwo08RFuZzuV 
7hvvG006M4QMQj/nbQXzhbjko3cRVegvV9xKnNxe5oCArTK5HNkfPhEM/G48ed4h 
z99OS5+RiB/NLTfzlPc= 
-----END CERTIFICATE----- 

证书已经成功添加并出现在列出其条目时的密钥库:

rst_cert, Feb 3, 2016, trustedCertEntry, 
Certificate fingerprint (SHA1): 25:39:98:FC:FF:DE:2D:24:BC:F0:78:93:D6:2E:5A:55:64:D5:09:8A 

当我尝试重新运行应用程序时一个新的请求,被赋予了同样的错误:

sun.security.validator.ValidatorException: PKIX path building failed: sun.securi 
ty.provider.certpath.SunCertPathBuilderException: unable to find valid certifica 
tion path to requested target 
     at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:387) 
     at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.jav 
a:292) 
     at sun.security.validator.Validator.validate(Validator.java:260) 
     at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.j 
ava:324) 
     at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerIm 
pl.java:229) 
     at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustMan 
agerImpl.java:124) 
     at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker. 
java:1491) 
     at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.jav 
a: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.writeRecord(SSLSocketImpl.java:747) 
     at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123) 
     at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:138) 
     at SSLPoke.main(SSLPoke.java:31) 
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to 
find valid certification path to requested target 
     at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBu 
ilder.java:146) 
     at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCert 
PathBuilder.java:131) 
     at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) 
     at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382) 
     ... 15 more 

我有建议here(下载SSLPoke),但错误依然存在。为什么证书不被识别?

+0

你使用的是'HtmlUnit'吗?如果是,为什么不禁用/忽略SSL检查? –

+0

您是否检查证书的内容?它说“www.rstforums.com”而不是“forum.com”。 –

+0

@ Eng.Fouad我确实禁用了它。 – Sebi

回答

3

我设法删除并使用openssl(从cygwin(我在Win7上工作))将证书添加到密钥库)。

要使用OpenSSL的检索证书:

openssl x509 -in <(openssl s_client -connect rstforums.com:443 -prexit 2>/dev/null) -out ~/rst_cert.crt 

要从商店中目前rst_cert

keytool -importcert -file ~/example.crt -alias example -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit 

的:

keytool -delete -alias rst_cert -keystore cacerts 

添加证书使用OpenSSL的下载使用Firefox下载的证书显然无效。

+0

这似乎是一个好主意。但是 - openssl x509 -in <(openssl s_client -connect mydomain.com:443 -prexit 2>/dev/null)-out〜/ rst_cert.crt 给出以下错误。 #### ####打开Certificate/proc/3756/fd/63时出错#### #### 9072:error:02001003:system library:fopen:No such process:bss_file.c:398: fopen('/ proc/3756/fd/63','rb') #### 9072:错误:20074002:BIO例程:FILE_CTRL:系统库:bss_file.c:400: ####无法加载证书 (请删除#并阅读) – smilyface

相关问题