【发布时间】:2018-02-07 03:04:21
【问题描述】:
有一个私人网络服务器(支持 https),我需要经常在其上读取/设置一些信息。我做了一些java代码来自动完成。当我使用 Chrome 访问它时,第一次连接很慢(可能 5 秒)但连续连接很快(大约 1S)。使用我的 java 代码,每次都很慢。我知道问题是在与我的代码的每次连接中都会执行完整的 TLS 握手。我的问题是,Chrome 做了什么来让它更快,我如何在我的代码中模拟它?以下是我的部分代码:
class MyTrust implements X509TrustManager{
public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
public X509Certificate[] getAcceptedIssuers() {return null; }
}
在另一个建立连接的类中:
URLConnection conn = (HttpsURLConnection) url.openConnection();
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, new TrustManager[] { new MyTrust() }, new java.security.SecureRandom());
((HttpsURLConnection) conn).setSSLSocketFactory(sc.getSocketFactory());
我正在阅读Java Secure Socket Extension (JSSE) Reference Guide,但发现它很难理解。是 SessinID 还是 Principal 有效?谁能给我一些提示?
【问题讨论】:
-
您的 java 代码需要超过 5 秒才能完成一次 TLS 握手?
-
不“超过”,或多或少 5 秒。但我不在乎第一次连接所消耗的时间。我的观点是如何跳过每次连接的完全握手。
标签: java performance ssl tls1.2 httpsurlconnection