0

SSLSocket を使用してデータを交換する単純なクライアント/サーバー システムを構築しようとしています。(JavaSE 6) サーバーには独自の証明書が必要ですが、クライアントには必要ありません。

私はこれから始めました http://java.sun.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html#CreateKeystore サーバーのキーと自己署名証明書を生成するには。要約すると:

    Create a new keystore and self-signed certificate with corresponding public/private keys. 
keytool -genkeypair -alias mytest -keyalg RSA -validity 7 -keystore /scratch/stores/server.jks

    Export and examine the self-signed certificate.
keytool -export -alias mytest -keystore /scratch/stores/server.jks -rfc -file server.cer

    Import the certificate into a new truststore.
keytool -import -alias mytest -file server.cer -keystore /scratch/stores/client.jks

次に、サーバーコードで行います

System.setProperty("javax.net.ssl.keyStore", "/scratch/stores/server.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "123456");

SSLServerSocketFactory sf = sslContext.getServerSocketFactory();
SSLServerSocket sslServerSocket = (SSLServerSocket)sf.createServerSocket( port );

Socket s = sslServerSocket.accept();

「javax.net.ssl.SSLException: 有効な SSL 暗号スイートに対応する利用可能な証明書またはキーがありません」というメッセージが表示されるため、基本的にいくつかの点が欠けています。サーバーを実行しようとすると。

証明書に問題がある可能性はありますか? keytool で -validity を使用すると、証明書は自己署名されるため、間違っていなければ機能するはずです。

ドキュメントを読むと、SSLContext を正しくセットアップするには、プロパティ「javax.net.ssl.keyStore」を設定するだけで十分なようです。なにか提案を?

4

1 に答える 1

1

私は物事を少し台​​無しにしました、完全な解決策はここにあります: https://forums.oracle.com/forums/thread.jspa?threadID=1531716

于 2010-07-09T12:20:31.770 に答える