1

クライアントはC#で記述され、サーバーはJAVAで記述されています。そのため、接続しようとすると、サーバーjavax.net.ssl.SSLHandshakeException: no cipher suites in commonとC#の「EOFまたは0バイト」でエラーが発生しました。

[C#]:

  TcpClient tc = new TcpClient(server, 1337); 


            using (sslStream = new SslStream(tc.GetStream())){ }

[JAVA]:

   SSLServerSocketFactory ssocketFactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
   SSLServerSocket server = (SSLServerSocket) ssocketFactory.createServerSocket(1337);
   server.setEnabledCipherSuites(server.getEnabledCipherSuites());

そして、JAVA起動プロパティ:

-Djavax.net.ssl.trustStore=Certificatename -Djavax.net.ssl.trustStorePassword=thereisapw -Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol -Djavax.net.debug=ssl TCPServer
4

1 に答える 1

2

トラストストアは、提示されたリモート証明書を信頼する方法を定義します。キーストアは、あなたが持っている(そしてあなたが秘密鍵を持っている)証明書のためのものです。(違いの詳細については、こちらをご覧ください。「キーストア」に関する用語は、2つの意味を持つ可能性があるため、混乱する可能性があります)。

ここでは、サーバーを実行しようとしていますが、独自の証明書を設定していません。キーストアに証明書をインポート/作成し、それをキーストアとして使用する必要があります。

キーストアを指定しない場合、サーバーは証明書/キーを見つけることができません。その結果、デフォルトで有効になっている暗号スイートを使用できなくなります。


これをどこから入手したかはわかりませんが、必要ありません。-Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol

于 2012-09-05T15:48:10.987 に答える