2017-03-19 12 views
0

クライアント/サーバーチャットアプリケーションを記述するIm。私はそれらの2つの間の接続を暗号化したい。私は初めてそれをやっていて、難しいと感じています。私の理解では、クライアントのトラストストアとサーバーのキーストアが必要です。私はそれらを生成するには、このガイドに従っている:http://peoplesofttutorial.com/generating-key-store-and-trust-store-using-keytool/JAVA、SSLSocket接続の問題

クライアント:

 System.setProperty("javax.net.ssl.trustStore" , "hrms.truststore"); 
     System.setProperty("javax.net.ssl.trustStorePassword" , "123456"); 
     SSLSocketFactory sslsf = (SSLSocketFactory) SSLSocketFactory.getDefault(); 
     SSLsocket = (SSLSocket) sslsf.createSocket(server, port); 

サーバー:

 System.setProperty("javax.net.ssl.keyStore" , "pskey.keystore"); 
     System.setProperty("javax.net.ssl.keyStorePassword","123456"); 
     SSLServerSocketFactory sslsocketfactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); 
     sslserversocket = (SSLServerSocket) sslsocketfactory.createServerSocket(Port);  

Serverが正常に起動されます。サーバーと同じコンピュータで実行されているクライアントに接続すると、問題なく接続できますが、同じネットワーク上にある別のコンピュータから接続すると、このエラーが発生します。javax.net.ssl.SSLException:Received致命的なアラート:internal_error

誰も私がこのエラーを解決するのに役立つでしょうか?

+0

サーバーには、ルート証明書から拡張されたjavaに認識されている既知の証明書が必要です。実際の証明書が必要になるか、keytoolsを使用してcacertsにインポートする必要があります。あとでデバッグを有効にして、進行中のエラーを確認することもできます。 – benchpresser

+0

あなたのスニペットがここで働いていました(2台のマシンが同じネットワーク上でoracle java 8 u121を実行しています)。 'System.setProperty(" javax.net.debug "、" ssl ");' – nandsito

+0

@nandsito私の環境は以下の通りです:どちらのコンピュータもjava 1.8.0_121と両方のコンピュータを実行しています同じネットワークに接続されています。両方ともWindows 10を実行しています。コンピュータAはサーバとクライアントを実行しています。コンピュータAのクライアントは正常に動作しています。私はcopypasteへのリンクを追加します:[リンク] https://codepaste.net/fmyekg – beli

答えて

0

私は私の問題を解決しました。私のトラストストアとキーストーンはプロジェクトファイルに入っていましたが、実行可能なjarファイルにコンパイルしたとき、私はトラストストアとキーストアがその実行可能なjarファイルに含まれていると思っていました。私は、実行可能なjarを持つ1つのフォルダにトラストストアとキーストアを入れて解決しました。

解決策は本当に簡単で、問題は全体的に私の経験不足のために発生しました。

ありがとうございました。