2016-11-17 6 views
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 

答えて

0

最初のsslハンドシェイクは1回だけ実行されます。クライアントとサーバーは、プロトコル(ssl vs tls)とcypherで合意し、キーを交換します。したがって、最初の握手でヒットが取られます。その後、唯一起こっているのは、既に交換された鍵を使った暗号化と復号化だけです。

http://www.ibm.com/support/knowledgecenter/SSFKSJ_7.1.0/com.ibm.mq.doc/sy10660_.htm

+0

接続が閉じられると、交換されたキーは同じですか? – xXxpRoGrAmmErxXx

+0

私は2番目または3番目の実行の前に私が上記のように接続を閉じたと思います。 – xXxpRoGrAmmErxXx

+0

接続とセッションがあります(参照先のIBMの記事を参照)。 1つのセッションに複数の接続が存在します。 (私の前のコメントに間違いがあります) – mangotang

関連する問題