Web 服务基于 SSL,它具有自签名证书,托管在远程系统中。我已经创建了一个访问该 Web 服务的客户端。这是通过将证书添加到 key store programatically 来完成的。 .
现在我听说,没有必要将证书添加到 keystore 以访问自签名 Web 服务。 相反,我们可以通过覆盖某些方法来禁用证书检查。这是真的?这些方法是什么?请帮忙。
最佳答案
这应该足够了。我在针对没有正确签名证书的测试和登台服务器测试代码时使用它。 但是,您真的应该认真考虑在生产服务器上获取有效的 SSL 证书。没有人愿意被窃听并侵犯他们的隐私。
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, new TrustManager[] { new TrustAllX509TrustManager() }, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier( new HostnameVerifier(){
public boolean verify(String string,SSLSession ssls) {
return true;
}
});
还有这个。
import javax.net.ssl.X509TrustManager;
import java.security.cert.X509Certificate;
/**
* DO NOT USE IN PRODUCTION!!!!
*
* This class will simply trust everything that comes along.
*
* @author frank
*
*/
public class TrustAllX509TrustManager implements X509TrustManager {
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
public void checkClientTrusted(java.security.cert.X509Certificate[] certs,
String authType) {
}
public void checkServerTrusted(java.security.cert.X509Certificate[] certs,
String authType) {
}
}
祝你好运!
===更新===
我只是想指出有一个服务叫 Let's Encrypt它可以自动生成和设置几乎所有人都认可的 SSL/TLS 证书,而且完全免费!
关于Java:禁用 SSL 证书检查的覆盖函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19723415/