Java中的SSLSocketFactory
问题内容:
SSLSocketFactory
Java类在使用时起什么作用HttpsURLConnection
?Java文档没有太大帮助。
有什么方法可以将密钥库和信任库与sslsocketfactory对象绑定,使其指向密钥库和信任库?
否则,连接如何知道密钥库和信任库的位置(我不想使用java System Properties
)?
问题答案:
它通过SSLContext完成。初始化一个,然后使用它的套接字工厂创建HttpsConnection实例。
这是我如何在应用程序中进行管理的粗略示例:
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(myKeyManagerFactory.getKeyManagers(), myTrustManagerArray, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
之后,您对https站点的openConnection()调用将使用您在此处初始化的sslsocketfactory。
在此,供TrustManager在ssl上下文中使用的代码将信任所有证书:
TrustManager[] myTrustManagerArray = new TrustManager[]{new TrustEveryoneManager()};
class TrustEveryoneManager implements X509TrustManager {
public void checkClientTrusted(X509Certificate[] arg0, String arg1){}
public void checkServerTrusted(X509Certificate[] arg0, String arg1){}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
从Bruno更新:当心,信任任何证书,无论证书多么方便,都会使连接容易受到MITM攻击