【发布时间】:2012-04-12 20:58:23
【问题描述】:
SSLSocketFactory类在java中使用HttpsURLConnection时起什么作用? java 文档没有多大帮助。
是否有任何方法可以将密钥库和信任库与 sslsocketfactory 对象绑定,使其指向密钥库和信任库?
否则连接如何知道密钥库和信任库的位置(我不想使用 java System Properties)?
【问题讨论】:
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 攻击
【讨论】: