我希望在新的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 Email服务器2.3.2(如果这意味着什么)。
提前谢谢!
答案 0 :(得分:2)
您需要设置连接的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());