Как подключить слушателя к SSL Handshake? - PullRequest
1 голос
/ 19 октября 2011

Я хотел бы получить уведомление, когда начинается новое соединение SSL и начинается рукопожатие. Мне нужно получить сертификат до того, как будет вызвано хранилище ключей.

Есть ли способ зарегистрировать слушателя этого процесса, чтобы я мог решить, в порядке ли сертификат и должен ли он быть проверен по хранилищу ключей, или отменить его сразу.

Примерно так, но для SMTP-соединений:

URL req = new URL(getUrl);

HttpsURLConnection con = (HttpsURLConnection) req.openConnection();

con.setHostnameVerifier(new HostnameVerifier()
{

    public boolean verify(String hostname, SSLSession session)
    {
        return true; //My decision
    }
});

Я использую сервер электронной почты JAMES 2.3.2 (если это что-то значит).

Заранее спасибо!

1 Ответ

2 голосов
/ 19 октября 2011

Вам необходимо установить SSLFactory соединения.В следующем примере не используется менеджер ключей и TrustManager по умолчанию.Ваши чеки будут идти методом checkServerTrusted.

HttpsURLConnection con = (HttpsURLConnection) req.openConnection();
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, // No Key Manager
             new TrustManager[] { new X509TrustManager()
               {
                 @Override
                 public void checkClientTrusted(X509Certificate[] arg0, String arg1)
                     throws CertificateException
                   {}

                 @Override
                 public void checkServerTrusted(X509Certificate[] arg0, String arg1)
                     throws CertificateException {
                      // check the certs
                 }

                 @Override
                 public X509Certificate[] getAcceptedIssuers()
                   {
                     return null;
                   }

               } }, // TrustManager 
             new java.security.SecureRandom());
con.setSSLSocketFactory(context.getSocketFactory());
...