我尝试在Spring容器中切换到SSL套接字:
SSLSocketFactory f = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket c = (SSLSocket) f.createSocket(socket, srvAddr, srvPort,true);
并得到以下错误:
javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到所请求目标的有效证书路径
socket是alredy打开正常socket(new Socket(srvAddr,srvPort);)
我做错了什么?
2 回答
Tomas Narros告诉你原因 . 这是一种收集服务证书(链)甚至完全忽略它的方法 .
使用implements
javax.net.ssl.X509TrustManager
创建一个TrustManager类您将在
checkServerTrusted(X509Certificate[] chain, String authType)
中收到服务器证书链 . 在此方法中,您可以编写简单的代码来保存收到的证书 . 如果您不想验证它们,只需返回而不抛出异常 .要实现您的TrustManager,请执行以下操作
这意味着您要连接的服务器没有来自授权CA的有效证书 . 您必须检查您的信任库是否包含证书的CAs证书 .
Here你可以找到关于这个主题的教程 .