web-dev-qa-db-ja.com

JavaキーストアはOpenSSLによって生成されたキーペアをインポートできますか?

Opensslで認証キーを生成します。これが私のコマンドです:

openssl genrsa -des3 -out enc_key.pem 1024

私はcerファイルにエクスポートし、次にJava keytoolを使用してJava keystore(jks)にインポートします。

キーストアはいいですね。 Javaアプリからキーストアをロードできます。

問題は、クライアントがサーバーに接続している場合(この場合は、WebサーバーではなくFTPサーバーであり、Apache minaを使用しています)、例外が発生しました:

javax.net.ssl.SSLHandshakeException:SSLハンドシェイクが失敗しました。 org.Apache.mina.coreでorg.Apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.Java:434)でorg.Apache.mina.coreで.filterchain.DefaultIoFilterChain.access $ 5(DefaultIoFilterChain.Java:429)

...

原因:javax.net.ssl.SSLHandshakeException:com.Sun.net.ssl.internal.ssl.SSLEngineImplのcom.Sun.net.ssl.internal.ssl.Handshaker.checkThrown(Unknown Source)に共通の暗号スイートがない.checkTaskThrown(Unknown Source)at com.Sun.net.ssl.internal.ssl.SSLEngineImpl.writeAppRecord(Unknown Source)at com.Sun.net.ssl.internal.ssl.SSLEngineImpl.wrap(Unknown Source)at javax.net .ssl.SSLEngine.wrap(不明なソース)

...

原因:javax.net.ssl.SSLHandshakeException:com.Sun.net.ssl.internal.ssl.SSLEngineImplのcom.Sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)に共通の暗号スイートがない.fatal(不明なソース)

聞きたいことがいくつかあります。

  1. Opensslで生成した認証の暗号とは何ですか?どうやって知ることができますか?多分コマンドラインopenssl xxxですか?
  2. http://Java.Sun.com/j2se/1.5.0/docs/guide/security/jsse/JSSERefGuide.html#AppA にアクセスします。そして、SSL_RSA_xxxを有効な暗号スイートに配置しましたが、それでも機能しません(SSLがsslを暗黙的に使用しているため、SSL_RSAを配置し、genrsaを使用しています。それが正しいか?
  3. 誰かが解決策を知っていますか?
  4. または、Java app(暗号なしでオフコース)で使用できるようになるまで、opensslコマンドラインから標準のキーストアを生成する方法を誰もが知っています。現在、opensslから証明書を生成してエクスポートできるためキーストアJavaですが、Javaアプリで使用した暗号とは何ですか。また、キーストアがJavaから直接生成されている場合は実行できます。問題は、Java keytoolがopensslなどの認証から生成したものである場合)によって生成されたキーストアの場合です。

どんな助けでも感謝します!ありがとう

22
Jef

OpenSSLを使用してキーペアを生成するのはなぜですか?なぜkeytoolを使用しないのですか?

genrsaツールは、秘密鍵を生成するだけです。対応する証明書をどのように作成していますか?プライベートキーをJavaキーストアにどのようにインポートしますか? (keytoolが秘密キーをインポートできるのは既存のキーストアからであり、Java 6以降からのみであるためです。)

あなたの問題はあなたのキーストアにキーエントリが含まれていないことだと思います(秘密キー対応する証明書)。 keytoolを使用してキーストアの内容を一覧表示すると、エントリはいくつありますか?それらはキーエントリですか、信頼できるエントリですか?


サーバーは、サーバー自体を認証するために秘密鍵にアクセスする必要があります。秘密鍵をインポートするには、Java 6拡張keytoolを使用します。

OpenSSLを使用してキーと証明書を作成したら、OpenSSLを使用してPKCS#12キーストアを作成します。

openssl pkcs12 -export -in cert.pem -inkey key.pem > server.p12

次に、このストアをJavaキーストアに変換します。

keytool -importkeystore -srckeystore server.p12 -destkeystore server.jks -srcstoretype pkcs12

次に、証明書が含まれているSSL対応サーバーでserver.jksを使用しますand秘密鍵。

49
erickson