23

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

openssl genrsa -des3 -out enc_key.pem 1024

cer ファイルにエクスポートしてから、Java keytool を使用して Java キーストア (jks) にインポートします。

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

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

javax.net.ssl.SSLHandshakeException: SSL ハンドシェイクに失敗しました。org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:433) で 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: no cipher suites in common at com.sun.net.ssl.internal.ssl.Handshaker.checkThrown (Unknown Source) at com.sun.net.ssl.internal.ssl.SSLEngineImpl com.sun.net.ssl.internal.ssl の .checkTaskThrown (不明なソース) com.sun.net.ssl.internal.ssl.SSLEngineImpl.wrap (不明なソース) の javax.net .ssl.SSLEngine.wrap (不明なソース)

...

原因: javax.net.ssl.SSLHandshakeException: no cipher suites in common at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLEngineImpl .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 Implisitとgenrsaを使用しているため、SSL_RSAを配置しました。私の意見はgenrsaがRSAを生成するためです)。それが正しいか?
  3. 誰かが解決策を知っていますか?
  4. または、Javaアプリで使用できるようになるまで、opensslコマンドラインから標準キーストアを生成する方法を誰もが知っています(もちろん暗号を使用します)。現在、openssl から証明書を生成し、キーストア Java をエクスポートできますが、使用した暗号と Java アプリでの使用方法がわからないためです。注: キーストアが Java から直接生成されている場合は実行できます。現在問題は、java keytool によって生成されたキーストアが、openssl などの認証 (およびその他の可能性) から生成された場合です。

どんな助けでも大歓迎です!ありがとう

4

1 に答える 1

49

キーペアの生成に 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

証明書と秘密鍵server.jksを含む SSL 対応サーバーで使用します。

于 2010-04-21T19:23:22.333 に答える