2016-05-25 11 views
1

私はまったくSSLを使用していません。非常にシンプルなクライアントサーバーを作成し、クライアントからサーバーにファイルを送信したり、サーバーからファイルを取得したりすることができます。私はkeytoolのコマンドラインから自己署名X509証明書を使ってキーストアを生成し、それを私のサーバディレクトリに保存しました。Java - SSLサーバーの作成

私が最初にガイドとしてhttp://stilius.net/java/java_ssl.phpを使用して自分のサーバーを作成したが、それは仕事を得ることができなかったので、私は、しかし少し困惑している、私は、サーバーとの私のキーストアをリンクする

System.setProperty("javax.net.ssl.keyStore", jksFilepath); 
System.setProperty("javax.net.ssl.keyStorePassword", jkspass); 

を使用していました。ファイルを取得しようとするたびに、Java SSLHandshakeException「共通の暗号スイートがありません」が表示されます。

ただし、私のサーバーをセットアップするのにhttp://www.java2s.com/Tutorial/Java/0490__Security/SSLContextandKeymanager.htm と同じコードを使用すると、それは問題なく動作します。

また、2番目のガイドではServerSocketを使用していますが、SSLSocketは使用しないでください。私は、サーバーを実行し、ファイルを取得するときに両方の間の切り替えは何も変更されていないようです。 2番目の例では、あなたの問題

の可能な重複のため

+0

(必要なパラメータなし)デフォルトコンテキストを作成しSSLContext.getDefault() 2番目のリンクをチェックを呼び出すに作成された最初の例ではKeyManagers

context = SSLContext.getInstance("TLS"); kmf = KeyManagerFactory.getInstance("SunX509"); FileInputStream fin = new FileInputStream(storename); ks = KeyStore.getInstance("JKS"); ks.load(fin, storepass); context.init(kmf.getKeyManagers(), null, null); 

でinitedされます。それは壊れていますhttp://www.java2s.com/Tutorial/Java/0490__Security/SSLContextandKeymanager.htm – pedrofb

+0

証明書をjreセ​​キュリティでインポートします。 –

+1

2番目の例は 'SSLServerSockst'を作成しますが、' ServerSocket'変数に格納します。 'SSLServerSocket'メソッドを呼び出す必要がなければ問題ありません。 – EJP

答えて

0

チェックこの Java SSLHandshakeException "no cipher suites in common"SSLContext and KeyManagerがinitedされているリンクします。最初の例ではそうではありません。 キーストアをキーストアとして使用する場合は、キーストアをロードしてKeyManagerFactoryを初期化する必要があります。

これは2番目の例のコードです。 SSLContextは、デフォルトのSSLSocketFactory

SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault(); 

SSLSocketFactory.getDefault()

関連する問題