2016-09-10 12 views
3

残念ながら私はSSLを完全に新しくしています。現在、私はクライアントとJavaのサーバーアプリケーションとの間の安全な接続を確立しようとしています。以下のコードが私のために働きます(送信されたデータは暗号化されています)。JavaでSSLを正しく使用するには?

クライアント側:

socket = (SSLSocket) SSLSocketFactory.getDefault().createSocket(host, port); 

socket.setUseClientMode(true); 
socket.setEnabledCipherSuites(socket.getSupportedCipherSuites()); 
socket.startHandshake(); 

サーバー側:

sslServerSocket = (SSLServerSocket) serverSocketFactory.createServerSocket(requestPort()); 

sslServerSocket.setUseClientMode(false); 
sslServerSocket.setEnabledCipherSuites(sslServerSocket.getSupportedCipherSuites()); 
+0

すでにsocket.setUseClientMode(true);は既にクライアントであるため、冗長です。 'sslServerSocket.setUseClientMode(false);'はあなたが既にサーバーであるため冗長です。 socket.setEnabledCipherSuites(socket.getSupportedCipherSuites()); 'は安全ではありません。 'socket.startHandshake();'は不要です。 – EJP

+0

さて、そうする方法を教えてください。そして、なぜこれは安全ではないのですか?私が言ったように、私はSSLの初心者ですので、少し説明していただければ幸いです。 –

+0

これを正しく行うには、私が言及したすべてのコードを削除することです。 'サポートされている'暗号スイート 'には、安全性に欠けるものも含まれています。あなたのコードはそれらを使わずに動作するはずです。さもなければどこかで証明書の問題があります。 – EJP

答えて

2

すべての暗号/プロトコルを有効にすることはお勧めできません。あなたが望む暗号とプロトコルだけを有効にした方が良いでしょう。サーバーとサーバーの両方があなたによって書かれている場合は、必要なものだけを選択して構成します。

socket.setEnabledCipherSuites(...); 
socket.setEnabledProtocols(...); 

サポートされている暗号化方式とプロトコルはJSSE documentation

で見ることができるか、使用するのALGあなたは何を制御するために、「jdk.tls.disabledAlgorithm」を使用することができます。

+0

ほとんどの環境で、少なくともクライアントコードでは、有効化された暗号スイートを使用しない方がよいでしょう。 – EJP

関連する問題