クライアント/サーバーチャットアプリケーションを記述する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
誰も私がこのエラーを解決するのに役立つでしょうか?
サーバーには、ルート証明書から拡張されたjavaに認識されている既知の証明書が必要です。実際の証明書が必要になるか、keytoolsを使用してcacertsにインポートする必要があります。あとでデバッグを有効にして、進行中のエラーを確認することもできます。 – benchpresser
あなたのスニペットがここで働いていました(2台のマシンが同じネットワーク上でoracle java 8 u121を実行しています)。 'System.setProperty(" javax.net.debug "、" ssl ");' – nandsito
@nandsito私の環境は以下の通りです:どちらのコンピュータもjava 1.8.0_121と両方のコンピュータを実行しています同じネットワークに接続されています。両方ともWindows 10を実行しています。コンピュータAはサーバとクライアントを実行しています。コンピュータAのクライアントは正常に動作しています。私はcopypasteへのリンクを追加します:[リンク] https://codepaste.net/fmyekg – beli