Рассмотрим следующую функцию:
public Certificate[] getCertificates(String ip) throws Exception {
try (SSLSocket sslSocket = (SSLSocket) sslContext.getSocketFactory().createSocket()) {
SocketAddress socketAddress = new InetSocketAddress(ip, port);
sslSocket.connect(socketAddress, 10000);
Certificate[] certificates = sslSocket.getSession().getPeerCertificates();
return certificates;
}
}
На каких условиях этот код может зависнуть? В принципе, я установил тайм-аут 10 секунд для фазы подключения, но возможно ли, что код будет надолго блокироваться на части getSession().getPeerCertificates()
?
Пожалуйста, учтите тот факт, что ip и порт может быть произвольным (даже не SSL или иногда даже не маршрутизируемым)
Кроме того, вот как я инициирую sslContext
private SSLContext getSslContext() throws Exception {
SSLContext sslCtx;
sslCtx = SSLContext.getInstance("TLSv1.2");
sslCtx.init(null, new TrustManager[]{new X509TrustManager() {
private X509Certificate[] accepted;
@Override
public void checkClientTrusted(X509Certificate[] xcs, String string) {
}
@Override
public void checkServerTrusted(X509Certificate[] xcs, String string) {
accepted = xcs;
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return accepted;
}
}}, null);
return sslCtx;
}