现在,很多网站或者服务,都实现成基于SSL,并且提供证书下载安装才能访问。如果它能提供下载,当然什么问题有没有。
可是,如果你无权下载,并且它不是CA证书,只是自签名的Server端证书。只知道Added certificate to keystore ‘jssecacerts’ using alias ‘goauth.baoxan.net-1′它的端口和地址,你强行通过程序访问,可能会得到这样的错误:
1
2
|
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
)
|
没想到,Sun提供了一个工具程序,能够能过程序调用,得到Server端的证书。
工具类在googlecode源码地址为:InstallCert.java
在IDE里面运行,或者控制台进入class文件目录后:
java TestFetchingCert goauth.baoxan.net
选中你需要保存的那个证书序号,比如1,会自动生成certificate,包括他的alias:
Added certificate to keystore ‘jssecacerts’ using alias ‘goauth.baoxan.net-1′
然后把这个证书导成可见文本:(密码是默认的changeit)
keytool -export -alias goauth.baoxan.net-1 -keystore jssecacerts -rfc -file goauth.crt
进入jre的security目录,把它导入java可信任库(%JAVA_HOME%/jre/lib/security/cacerts):
cd /d C:\Program Files\Java\jdk1.6.0_24\jre\lib\security
keytool -import -alias goauthCA -file goauth.crt -keystore “%JAVA_HOME%/jre/lib/security/cacerts”
默认密码还是changeit
一切搞定,可以再java中访问这个goauth.baoxan.net的SSL服务了,比如单点登录的时候。
本人博客已搬家,新地址为:http://yidao620c.github.io/