1

これはばかげた質問かもしれませんが、信頼できるSSL証明書をJavaサーバーに取得する方法を見つけようとして、一日中インターネットを探し回っています.

詳細:

接続を受け入れる SSLServerSocket を作成する Java サーバーを作成しました。keytool を使用して、domain.key というキーストアと証明書要求 (csr) を作成しました。次に、認証局 (starfield) に連絡し、CSR を提供しました。私はそれらの3つを持っています。1 つは domain.com.crt と呼ばれ、1 つは sf_bundle.crt と呼ばれ、もう 1 つは sf_intermediate.crt と呼ばれます。

よく検索した結果、証明書をキーストアにインポートする必要があることがわかりました。キーストアは、公開/秘密キーを持つものと同じにすることも、別のファイルにすることもできます。domain.trust という別のファイルに入れることにしました。

次に、サーバーを変更して、次を使用してトラスト ストアとキーストアをインポートしました。

System.setProperty("javax.net.ssl.keyStore", "domain.key");
System.setProperty("javax.net.ssl.trustStore", "domain.trust");

キーストアのパスワードとトラストストアのパスワードの対応する行に沿って。

問題は、クライアントを使用して接続しようとすると、証明書が販売署名されていると常に表示されることです。

http://certlogik.com/ssl-checker/を使用してテストしています。

私は明らかにステップを逃しましたが、どこにあるのかわかりません。

どんな助けでも大歓迎です

4

3 に答える 3

0

まず、SSLハンドシェイク中に何が起こるかを理解する必要があります。たぶん、あなたは問題を絞り込むことができます。インターネット上のさまざまなドキュメントを参照できます。http://www.pierobon.org/ssl/ch/detail.htm

  1. 実行中のサーバには、CAStarFieldがインストールされている必要があります。または、CAStarFieldとの信頼関係が必要です。
  2. rclient証明書は、CA StarFieldによってCSR署名されている必要があります。これは、すでに行っていると思います。
  3. これで、証明書をサーバーに提示すると、サーバーは所有しているCAを確認します。
  4. したがって、サーバーにCA StarFieldがあり、証明書がStarFieldによって署名されている場合、自己署名エラーが発生することはありません。
  5. これは、証明書がCAによって署名されていない場合にのみ取得されます。証明書を開き、発行者の詳細を確認してください。
于 2012-10-30T21:39:30.573 に答える
0

まず、キーストアとトラストストアの違いについて混乱しているようです。この答えは興味深いかもしれません。

基本的に、クライアント証明書認証を使用する場合を除き、サーバーの観点からトラスト ストアを変更する必要はありません。

よく検索した結果、証明書をキーストアにインポートする必要があることがわかりました。キーストアは、公開/秘密キーを持つものと同じにすることも、別のファイルにすることもできます。

最初に持っていた CSR から取得した証明書を使用できるようにするには、CSR を生成したキーストアにその証明書をインポートして戻す必要があり、証明書チェーン全体と共に正しいエイリアスにインポートする必要があります。秘密鍵が格納されている場所。

これは本質的にこの質問の問題と同じですが、ここではサーバー側の問題です。

次を使用して、秘密鍵を持つエイリアス名を見つけますkeytool -list -keystore store.jks

Your keystore contains 1 entry

myalias, Feb 15, 2012, PrivateKeyEntry, 
Certificate fingerprint (MD5): xxxxxxxx

正しい順序で証明書と CA 証明書のチェーンを含むバンドルを準備します (最初に自分の証明書、次に各発行者を 1 つずつ)。

-----BEGIN CERTIFICATE-----
MIICajCCAdOgAwIBAgIBAjANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJVSzEa
....
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICkjCCAfugAwIBAgIJAKm5bDEMxZd7MA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNV
....
-----END CERTIFICATE-----

(区切り文字を含むopenssl x509 -text -noout各ブロックを標準入力に貼り付けて、各証明書の内容を確認できます。)---BEGIN/END---

次に、そのファイルを 1 つの手順でインポートします。

keytool -importcert -keystore store.jks -alias myalias -file bundle.pem
于 2012-10-31T01:52:38.670 に答える
0

問題は、クライアントを使用して接続しようとすると、証明書が販売署名されていると常に表示されることです。

これは、ルート CA 証明書がクライアントに送信されていることを示しています。
使用するこの別のキーストアをどのように作成したかについては言及していません。
次のようなことを行う必要があります。

keystore.setKeyEntry("alias", privateKey, password, chain);  


chain[0]--> サーバーの証明書--> 署名者
chain[1]の証明書
....
chain[N]--> ルートまでの署名者

于 2012-10-30T21:28:01.560 に答える