0
ssl(クライアント)がサーバーとの接続を確立してハンドシェイクを行うために必要な時間を計算します。ここに私のコードがあり、それは正常に動作します。Javaのループ値でSSLのパフォーマンスが異なる理由
private boolean SslTlsConnection() throws IOException, NoSuchAlgorithmException, KeyStoreException, CertificateException, UnrecoverableKeyException, KeyManagementException {
KeyStore client = KeyStore.getInstance("JKS");
client.load(new FileInputStream(currentPath + "clientcert.keystore"), Password.toCharArray());
KeyStore trust = KeyStore.getInstance("JKS");
trust.load(new FileInputStream(currentPath + "myTrustStore.keystore"), Password.toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(client, Password.toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
tmf.init(trust);
SSLContext sc = SSLContext.getInstance("SSL");
TrustManager[] trustManagers = tmf.getTrustManagers();
sc.init(kmf.getKeyManagers(), trustManagers, new java.security.SecureRandom());
SSLSocketFactory ssf = sc.getSocketFactory();
sslsocket = (SSLSocket) ssf.createSocket(Properties.host, Properties.portNumber);
sslsocket.startHandshake();
System.out.println("Handshaking Complete");
System.out.println("Just connected to " + sslsocket.getInetAddress() + "\n");
transport = new IOTransport(sslsocket);
return false;
}
private void close(){
sslsocket.close();
}
私はパフォーマンスについて興味があります。私はループで複数の接続を実行し、私はハンドシェイクを行う必要がある時間を計算しています。私の質問は、クライアントがsslに接続する最初の時間が他のクライアントと比較して非常に時間がかかる理由です。私は何か間違った?
for (int i = 1; i < loopvalue; i++) {
long elapseTime = System.currentTimeMillis();
SslTlsConnection()
long elapseTime = (System.currentTimeMillis() - elapseTime);
close();
}
私はテストを試みました。結果は以下のとおりです
SSL_Execution_Time
First Execution Time 453ms
Second Execution Time 85ms
Third Execution Time 90ms
接続が閉じられると、交換されたキーは同じですか? – xXxpRoGrAmmErxXx
私は2番目または3番目の実行の前に私が上記のように接続を閉じたと思います。 – xXxpRoGrAmmErxXx
接続とセッションがあります(参照先のIBMの記事を参照)。 1つのセッションに複数の接続が存在します。 (私の前のコメントに間違いがあります) – mangotang