java – 验证服务器Verisign证书throws不可信服务器证书异常
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 验证服务器Verisign证书throws不可信服务器证书异常,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3523字,纯文字阅读大概需要6分钟。
内容图文
![java – 验证服务器Verisign证书throws不可信服务器证书异常](/upload/InfoBanner/zyjiaocheng/793/d13e12f14bde43088745bb59b03744aa.jpg)
在尝试将HttpsURLConnection连接到我们的后端时,我在验证Verisign证书时遇到问题.
目前的认证链:
$openssl s_client -connect host:443
0 s:/C=AT/ST=xxx/L=xxx/O=xxx/CN=host
i:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)10/CN=VeriSign Class 3 International Server CA - G3
1 s:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)10/CN=VeriSign Class 3 International Server CA - G3
i:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2006 VeriSign, Inc. - For authorized use only/CN=VeriSign Class 3 Public Primary Certification Auth
ority - G5
2 s:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2006 VeriSign, Inc. - For authorized use only/CN=VeriSign Class 3 Public Primary Certification Auth
ority - G5
i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
3 s:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
我很确定我已经下载并将所有证书添加到KeyStore中,但我仍然得到异常:“javax.net.ssl.SSLException:不可信服务器证书”,原因是java.security.cert.CertificateException:java.security .cert.CertPathValidatorException:找到TrustAnchor但证书验证失败.
我获取连接的代码:
String keyStoreType = KeyStore.getDefaultType();
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(null, null);
keyStore.setCertificateEntry("verisign_0", getVerisign0());
keyStore.setCertificateEntry("verisign_1", getVerisign1());
keyStore.setCertificateEntry("verisign_2", getVerisign2());
keyStore.setCertificateEntry("verisign_3", getVerisign3());
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(keyStore);
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, tmf.getTrustManagers(), null);
HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
urlConnection.setSSLSocketFactory(context.getSocketFactory());
return urlConnection;
当调用connection.connect()时,问题正在发生.所有getVerisign()方法都返回正确的证书.有没有我忘记的一步?也许是一个特殊的订单,应该添加证书?
为了澄清,我已经使用swisssign证书确切地使用了这种技术并且它有效.我正面临这个问题,因为一些Android 2.1,2.2设备没有一些根证书.提前致谢.
堆栈跟踪:
[0] = {java.lang.StackTraceElement@830078967208}"org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:168)"
[1] = {java.lang.StackTraceElement@830078967584}"org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:366)"
[2] = {java.lang.StackTraceElement@830078967960}"org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.getSecureSocket(HttpConnection.java:168)"
[3] = {java.lang.StackTraceElement@830078968368}"org.apache.harmony.luni.internal.net.www.protocol.https.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:399)"
[4] = {java.lang.StackTraceElement@830078968816}"org.apache.harmony.luni.internal.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:147)"
解决方法:
没有进一步的代码,我无法分辨,但是,我可以看到你加载受信任的证书,但你在哪里加载自己的密钥库?如果是在其他代码中,我无法分辨.
当您尝试使用外部Truststore时会发生什么? $JAVA_HOME / JRE / lib / security中/ cacerts中
假设您确实想要使用动态信任存储(通常它们非常静态),请查看
http://jcalcote.wordpress.com/2010/06/22/managing-a-dynamic-java-trust-store/
内容总结
以上是互联网集市为您收集整理的java – 验证服务器Verisign证书throws不可信服务器证书异常全部内容,希望文章能够帮你解决java – 验证服务器Verisign证书throws不可信服务器证书异常所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。