SSLSocketFactory в Java - PullRequest
       53

SSLSocketFactory в Java

8 голосов
/ 29 марта 2012

Какую роль играет SSLSocketFactory класс в Java при использовании HttpsURLConnection? Документация по Java не очень помогает.

Есть ли способы связать хранилище ключей и хранилище доверенных сертификатов с объектом sslsocketfactory, чтобы он указывал на хранилище ключей и хранилище доверенных сертификатов?

Иначе как соединение узнает местоположение хранилища ключей и хранилища доверенных сертификатов (я не хочу использовать java System Properties)?

1 Ответ

10 голосов
/ 29 марта 2012

Это делается через SSLContext.Вы инициируете один и затем используете его фабрику сокетов для создания экземпляров HttpsConnection.

Вот примерный пример того, как мне управлять этим в моем приложении:

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

после этого ваш 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;
    }
}

Upd от Bruno: будьте осторожны, доверяя любому сертификатукак бы удобно это ни было, делает соединение уязвимым для MITM-атак

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...