
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
昆明IT培训的老师这一期给大家讲配置Java SSL访问网站证书
最近在开发Java访问Azure ServiceBus时遇到SSL证书问题,导致JAVA报错,不能正常访问,报错信息如下:
javax.net.ssl.SSLException: Connection has been shutdown: 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
解决方法:配置要访问网站的域名证书,并导入的服务器jdk环境中
编译javac InstallCert.java
运行InstallCert,参数是你调用的网址(Azure事件中心的地址),如果是80端口可以省略port
java InstallCert [host]:[port]
例:java InstallCert #:443
运行后会列出证书让你选择,输入1回车,最后会在当前目录生成一个jssecacerts文件。
1.导出证书文件
1) 使用CMD命令进入jssecacerts文件所在目录
2) 运行以下命令,导出证书文件:
keytool -exportcert -alias [host]-1 -keystore jssecacerts -storepass changeit -file [host].cer
例:keytool -exportcert -alias www.#-1 -keystore jssecacerts -storepass changeit -file www.#.cer<br>
将证书文件导入系统keystore
keytool -importcert -alias [host] -keystore [path to system keystore] -storepass changeit -file [host].cer
例:keytool -importcert -alias www.# -keystore "C:\Program Files\Java\jre1.8.0_111\lib\security\cacerts" -storepass changeit -file www.#.cer
# Example:
java InstallCert #:443
Loading KeyStore /usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/security/cacerts...
Opening connection to #:443...
Starting SSL handshake...
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
<...>
Server sent 1 certificate(s):
1 Subject O=Woot Inc, C=US, ST=Texas, L=Carrollton, CN=*.#
Issuer CN=SecureTrust CA, O=SecureTrust Corporation, C=US
sha1 4b 46 ca 6b 83 05 b3 51 ff c6 e7 9c fd b3 9b e3 3f 2e c4 53
md5 e8 a5 88 1b d5 67 bb fc 88 cc b1 c5 2b ac c4 7d
Enter certificate to add to trusted keystore or 'q' to quit: [1]
[enter]
[
[
Version: V3
Subject: O=Woot Inc, C=US, ST=Texas, L=Carrollton, CN=*.#
Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5
<...>
Added certificate to keystore 'jssecacerts' using alias '#-1'
keytool -exportcert -alias #-1 -keystore jssecacerts -storepass changeit -file #.cer
Certificate stored in file <#.cer>
(sudo) keytool -importcert -alias # -keystore /usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/security/cacerts -storepass changeit -file #.cer
Owner: O=Woot Inc, C=US, ST=Texas, L=Carrollton, CN=*.#
Issuer: CN=SecureTrust CA, O=SecureTrust Corporation, C=US
<...>
Trust this certificate? [no]:
yes
Certificate was added to keystore