今天在程序中用到了HTTPS连接的HTTPURLConnnection, 运行是发生了下面的错误,发现是要安装证书文件,稍微找了一下,把证书文件安装了,就正确了,在这里把证书文件的命令保存一下,以备以后查看:
Suppose:
$JAVA_HOME = "C:\Program Files\Java\jdk1.6.0_01"
Run the following command to import the certifate file.
keytool -import -trustcacerts -alias cng_domain -file cng.cer -keystore % $JAVA_HOME/jre/lib/security/cacerts
至于怎么从浏览器里面导出证书文件我就不多说了。
chrome下面导出证书大家请看:http://asialee.iteye.com/blog/1612513
[size=large]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 com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1520)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:182)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:176)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:975)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:123)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:511)
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:449)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:817)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1029)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1056)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1040)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:405)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:170)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:836)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:230)
at cng.api.GatewayConnector.procesRequest(GatewayConnector.java:141)
at cng.api.GatewayConnector.processPreAuthRequest(GatewayConnector.java:49)
at cng.test.Application.processPreAuth(Application.java:24)
at cng.test.Application.main(Application.java:13)
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:285)
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:191)
at sun.security.validator.Validator.validate(Validator.java:218)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126)------------Begin Pre-Auth------------------------
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:954)
... 15 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:280)
... 21 more
Exception in thread "main" java.lang.NullPointerException
at cng.test.Application.printResponse(Application.java:68)
at cng.test.Application.processPreAuth(Application.java:27)
at cng.test.Application.main(Application.java:13)
[/size]
chrome导出证书向导,希望对大家有用.





大小: 107.7 KB

大小: 105.6 KB

大小: 98.2 KB

大小: 55.9 KB
分享到:


2009-04-02 23:54
浏览 7928
评论
6 楼
andyxl
2014-04-18
一定要放到 security下,不然没有用的。
5 楼
asialee
2013-03-20
System.setProperty("javax.net.ssl.trustStore", "D:\\UTA\\DOC_E_Health_XML\\Keystore\\jssecacerts
4 楼
asialee
2012-08-23
八岭书生 写道
Client client = new Client(new URL(workerurl));
Object[] rst = client.invoke("syncSheetState", new Object[]{requestXml});
String returnStr = (String) rst[0];
我用以上代码去调用https所发布的服务 仍会抱你所写的那种错误 证书我已添加了。。
加我qq吧: 327379252,咱们讨论一下。
3 楼
八岭书生
2012-08-23
Client client = new Client(new URL(workerurl));
Object[] rst = client.invoke("syncSheetState", new Object[]{requestXml});
String returnStr = (String) rst[0];
我用以上代码去调用https所发布的服务 仍会抱你所写的那种错误 证书我已添加了。。
2 楼
TuZiGuai
2011-12-06
我就是按照大侠的这种方式导入的证书,还是提示没有安装证书这个错误。我的应用是跑在tomcat里,tomcat用的是eclipse自带的jdk,并不是我之前导入证书的JDK,改了一下配置,OK了!
1 楼
asialee
2011-03-16
keytool -import -trustcacerts -alias scm_domain -file F:/aaa/test.cer -keystore "%JAVA_HOME%/jre/lib/security/cacerts"
这么写
-file F:/aaa/test.cer
这个是要你从浏览器导出的证书文件。
-keystore "%JAVA_HOME%/jre/lib/security/cacerts" 指明的是证书的位置,这个不要改,你只要设置JAVA_HOME就可以了。
这个会让你输入密码, 密码默认为changeit
如果有什么问题,加我qq:327379252

被折叠的 条评论
为什么被折叠?



