java中的SSLSocketFactory

Ash*_*win 9 java ssl https

SSLSocketFactoryjava 中的类在使用时扮演什么角色HttpsURLConnection?java文档没有多大帮助.

有没有办法将密钥库和信任库绑定到sslsocketfactory对象,使其指向密钥库和信任库?

否则,连接将如何知道密钥库和信任库的位置(我不想使用java System Properties)?

ygg*_*raa 11

它是通过SSLContext完成的.您初始化一个然后使用它的套接字工厂来创建HttpsConnection实例.

以下是我在应用程序中管理此操作的粗略示例:

SSLContext sc = SSLContext.getInstance("SSL");
sc.init(myKeyManagerFactory.getKeyManagers(), myTrustManagerArray, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
Run Code Online (Sandbox Code Playgroud)

之后你的openConnection()调用https站点将使用你在这里初始化的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;
    }
}
Run Code Online (Sandbox Code Playgroud)

来自Bruno的更新:当心,信任任何证书,无论多么方便,都会使连接容易受到MITM攻击

  • 您应该指出,信任任何证书,无论多么方便,都会使连接容易受到MITM攻击. (5认同)
  • (我只是指出了这一点,否则,人们往往复制/粘贴,而不考虑它做什么.我更喜欢使用的测试我自己的测试CA,它更现实,更不可能离开不安全的代码,生产代码.) (3认同)