考虑以下职能:
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;
}发布于 2020-07-11 13:40:05
,但是在
getSession().getPeerCertificates()上代码会被阻塞很长时间吗?
不是的。对getPeerCertificates()的SSLSession调用返回由对等方在SSL握手中提供的证书的副本。通过上一行的connect调用返回的调用,握手已经完成。
https://stackoverflow.com/questions/62849700
复制相似问题