在使用HttpsURLConnection时,java中的SSLSocketFactory类扮演了什么角色?java文档帮不了多少忙。
有没有办法将密钥库和信任库绑定到sslsocketfactory对象,使其指向密钥库和信任库?
否则,连接如何知道密钥库和信任库的位置(我不想使用java System Properties)?
发布于 2012-03-29 16:35:12
这是通过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的Upd :请注意,信任任何证书,无论它多么方便,都会使连接容易受到MITM攻击
https://stackoverflow.com/questions/9921548
复制相似问题