Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web services 服务器证书和客户端信任库_Web Services_Ssl - Fatal编程技术网

Web services 服务器证书和客户端信任库

Web services 服务器证书和客户端信任库,web-services,ssl,Web Services,Ssl,我正在尝试使用ssl调用Web服务。 如何获取相关服务器证书,以便将其导入我的信任库? 我从main方法知道如何使用属性com.ibm.ssl.enableSignerExchangePrompt,但我会手动将服务器证书添加到我的信任库中 我不希望在我的任何servlet中设置此属性 非常感谢您的帮助 谢谢 Damien如果您在web浏览器中浏览该网站,您可以点击小挂锁图标查看安全信息,并在弹出的对话框中保存证书 Chrome的步骤 单击挂锁(在地址栏中) 单击“证书信息” 在“详细信息”选项卡

我正在尝试使用ssl调用Web服务。 如何获取相关服务器证书,以便将其导入我的信任库? 我从main方法知道如何使用属性com.ibm.ssl.enableSignerExchangePrompt,但我会手动将服务器证书添加到我的信任库中

我不希望在我的任何servlet中设置此属性

非常感谢您的帮助 谢谢
Damien

如果您在web浏览器中浏览该网站,您可以点击小挂锁图标查看安全信息,并在弹出的对话框中保存证书

Chrome的步骤

  • 单击挂锁(在地址栏中)
  • 单击“证书信息”
  • 在“详细信息”选项卡下,您可以选择“复制到文件…”

  • 通过实现自己的X509TrustManager,可以通过Java编程实现这一点

    
    public class dummyTrustManager implements X509TrustManager {
    
            public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                //do nothing
            }
    
            public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                // do nothing
            }
    
            public X509Certificate[] getAcceptedIssuers() {
                //just return an empty issuer
                return new X509Certificate[0];
            }
        }
    
    然后,您可以使用此信任管理器创建SSL socket

    
    SSLContext context = SSLContext.getInstance("SSL");
    context.init(null, new TrustManager[] { new dummyTrustManager() },
                                new java.security.SecureRandom());
    
    SSLSocketFactory factory = context.getSocketFactory();
    InetAddress addr = InetAddress.getByName(host_);
    SSLSocket sock =  (SSLSocket)factory.createSocket(addr, port_);
    
    然后,使用该套接字,您可以提取服务器证书(put)并导入它 在受信任的密钥库中)


    你在用什么编程语言?顺便说一句,除非您真的想添加证书程序,否则有很多工具可以做到这一点,而无需编写一行代码。您可以通过为服务器获取适当的证书(由知名CA签名)来解决此问题。将特定证书添加到信任库的一个缺点是,如果服务器的证书发生更改,应用程序将停止工作,直到您再次更新信任库。顺便说一句,您可以访问(并保存)checkServerTrusted中已存在的证书。
    
    SSLSession session = sock.getSession();
    Certificate[] certchain = session.getPeerCertificates();