2011-06-21 7 views
1

私は周りを見回し、私が望むものに完全に答えた質問は表示されませんでしたが、これが重複している場合は、質問に私を指摘してください。JavaでのSSL接続の作成

今、私はSSLServerSocketからデータを受け取るJavaサーバーを作成しようとしています。今のところそれを印刷します。私は最終的にこのデータをAndroidから取得したいと思っていますが、今はデータ受信を開始する前にSSLExceptionをスローします。

コード:

System.setProperty("javax.net.ssl.keyStore","C:\\ProgramFiles\\jre6\\bin\\server.jks"); 
System.setProperty("javax.net.ssl.keyStorePassword","password"); 
SSLServerSocketFactory factory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); 
ServerSocket ss = factory.createServerSocket(6543); 
Socket s = ss.accept(); 

あり、それを処理するために、その後の多くのコードがあるが、それがハングアップし、そこに例外をスローしますので、私はそれが任意のを助ける掲示わからないんだけど、それはするかどうか、ちょうどそれのためのコメント。

私はUbuntuの上でopensslのためのチュートリアル次の証明書を作成し、それを上に移して使用して、私のキーストアを作成しました:

keytool -import -file "C:\Documents and Settings\matt\Desktop\server.crt" -keystore server.jks 

私は簡単に私は完全にこれの大部分がどのように機能するかを理解していないことを認めることができますだから、どんな助けもありがとう。また、私はこの質問の範囲外にしておきたいと思います。私はこれがかなり大きな質問であると感じているからですが、できるだけクライアントを接続する方法についていくつかの洞察もしたいと思います。すべてのトラブルに感謝し、すべての助けを借りて前もって感謝します。

EDIT:

私は、その後のチュートリアルはここにある: http://www.akadia.com/services/ssh_test_certificate.html

おかげで再び!

EDIT:

例外がスローされている:

javax.net.ssl.SSLException: No available certificate or key corresponds to the SSL cipher suites which are enabled 

私はGoogleに例外を試してみましたが、ほとんどすべては私が私の印象の下で午前ストアを作成する方法を説明したチュートリアル(でした既に持っている)。私はこれらの検索結果に目を通し続けます。

ありがとうございます!あなたが必要なもの

keytool -import -file "server.crt" -keystore server.jks 

は、秘密鍵+証明書を持っていることです。

+0

あなたは[あなたのソケットオブジェクト] .getEnabledCipherSuites()と[あなたのソケットオブジェクト] .getSupportedCipherSuitesを実行することはできます - そして、あなたの証明書だった暗号と一緒に(あなたの質問にその出力を貼り付けRC4-128などのために作成された)? – jefflunt

答えて

3

あなたはこのようなキーストアを作成する場合は、あなただけのキーストアに証明書を置きます。

証明機関が発行した証明書がすでにある場合は、別の場所からインポートするか、または限定された使用の場合は自己署名証明書を作成します。

OpenSSLで作成した証明書に自己署名(または自分で使用するミニCA(CA.plなど))している場合は、おそらく変換の手間がかかりません。 keytoolで直接自己署名証明書を生成することもできます。

keytool -genkeypair -dname "cn=Mark Jones, ou=JavaSoft, o=Sun, c=US" 
    -alias business -keypass kpi135 -keystore /working/mykeystore 
    -storepass ab987c -validity 180 

(それが唯一のローカルのテストのためかどうかcn=localhost)あなたはcn=your.fqdn.host.nameを使用していることを確認してください:公式keytoolドキュメントの"Generating Your Key Pair" exampleを参照してください。 (私はkeytoolもJava 7で提供されていると考えられています。

秘密鍵+証明書を既に持っている場合は、PKCS#12形式で再利用したいと考えています(通常.p12ファイル)の場合は、this questionに記載されている方法を使用してインポートできます。

OpenSSLで作成したものがPEM形式の場合は、OpenSSLを使用してPKCS#12ファイルにバンドルして上記のようにインポートする方が簡単かもしれません。これはこれで行うことができます。

openssl pkcs12 -export -in cert.pem -inkey key.pem -out creds.p12 
+0

ありがとう、私はこれらの実装に取り​​組んでいます。これはおそらく私が必要とするすべてをカバーするようです。 – Matt

+0

私は、PKCS#12ファイルをJavaで使用できるようにするために、必ずしもPKCS#12ファイルをJKSフォーマットに変換する必要はありません。より便利な場合は、 'PKCS12'ストアタイプで直接使用することができますjavax.net.ssl.keyStoreType')。 – Bruno

関連する問題