我正在创建一个需要接受自签名证书的 jax-ws 客户端应用程序。但是,当您尝试导入自签名证书时,就会出现这个常见的SSL 握手异常问题。因此,最常见的解决方法是扩展 JSSE 安全提供程序并初始化 SSL 上下文以接受所有证书,例如:
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
TrustManager[] trustCerts = new TrustManager[]{new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkServerTrusted(X509Certificate[]
certs, String authType) throws CertificateException {
return;
}
public void checkClientTrusted(X509Certificate[]
certs, String authType) throws CertificateException {
return;
}
}
};
SSLContext sc = SSLContext.getInstance("SSLv3");
sc.init(null, trustCerts, null);
SocketFactory factory = sc.getSocketFactory();
SSLSocket socket;
socket = (SSLSocket) factory.createSocket(mInstance.getHostName(),getSecureConnectionEndpoint().getPort());
socket.startHandshake();
setCerts(socket.getSession().getPeerCertificates());
这是我能找到的唯一解决方法。这里有许多类似的问题,例如导入 SSL 证书,它们都提出了相同的解决方案。
这显然很容易受到中间人攻击,而且这种解决方案似乎仅用于测试目的是合法的。
所以我的问题是,当您尝试以编程方式导入证书时,有没有办法让整个过程更加安全?
先感谢您!