首页 文章

Tomcat Spring中的SSLSocket

提问于
浏览
0

我尝试在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 回答

  • -2

    Tomas Narros告诉你原因 . 这是一种收集服务证书(链)甚至完全忽略它的方法 .

    使用implements javax.net.ssl.X509TrustManager 创建一个TrustManager类

    您将在 checkServerTrusted(X509Certificate[] chain, String authType) 中收到服务器证书链 . 在此方法中,您可以编写简单的代码来保存收到的证书 . 如果您不想验证它们,只需返回而不抛出异常 .

    要实现您的TrustManager,请执行以下操作

    TrustManager[] myTrustManager = { new MyTrustManager() };
    SSLContext ctx = SSLContext.getInstance("TLS");
    
    if (sendClientCerts) {   //send my certs for authentication to the server
    
        X509KeyManager kmsd = ...
    
        ctx.init(kmsd, myTrustManager, null);
    } 
    else {
    
        ctx.init(null, myTrustManager, null);
    }
    
    // Finally get a SSL Socket Factory and return it
    SSLScketFactory ssf = ctx.getSocketFactory();
    
    SSLSocket socket = ssf.createSocket(...);
    
  • 1

    这意味着您要连接的服务器没有来自授权CA的有效证书 . 您必须检查您的信任库是否包含证书的CAs证书 .

    Here你可以找到关于这个主题的教程 .

相关问题