2017-10-09 7 views
0

サーバーのRESTエンドポイント、たとえばxyz.comをヒットしたいとします。彼らはPEM形式の証明書を提供しています。私は自分のアプリケーションにエンドポイントに接続しておくべきです。証明書をSpringにインポートする際の問題点

私のアプリケーションはSpring Frameworkで書かれており、SpringはPEMを受け入れないため、PEMをP12形式に変換する必要があります。これは私が変換する方法である:

openssl pkcs12 -export -out certificate.p12 -inkey private.pem -in server_cert.pem 

certificate.p12 =結果のP12ファイルの

private.pem =秘密鍵

server_cert.pem =証明書ファイルサーバー

エラーは次のとおりです。

秘密鍵と一致する証明書がありません。

今私の質問:プライベートキーPEMファイルからP12ファイルを生成するために使用されなければならない

  1. 秘密鍵クライアントを使用してp12を生成すると、証明書とどのように一致する可能性がありますか(エラーメッセージは明白になります)?
  2. なぜ私はサーバーと通信する秘密キーが必要でしょうか?私の理解によると、SSLセッション中、クライアントの秘密鍵は画像には入りません。それとも私の理解が間違っていますか?
  3. サーバの秘密鍵を使用してp12を生成すると、なぜそれらを共有するのですか?

私は初心者ですから、どんなリンク/提案された読書/情報源/回答も歓迎します。

+0

どこから 'server_cert.pem'を取得しましたか?サーバーに接続するために使用する秘密鍵が与えられたときには、署名された証明書も与えられなければなりません。ファイルの名前から、server_cert.pemを使用しているように見えますが、これはあなたの証明書ではなくサーバーの証明書のみを含むものと想定しています。使用するために署名された証明書でそれを実行する必要があります。 –

+0

サーバdevは、エンドポイントを呼び出すすべてのクライアントに提供しています。 –

+0

一般に、 '' p12''のほとんどはクライアントに渡されます。あなたは彼らにp12を求めてみましたか?また、pemをダブルクリックすると、システム証明書ビューアが開きます。葉の証明書は何を言っていますか? SubjectDN、IssuerDN、SubjectAltNameなどの属性を探します。適切な証明書が与えられているかどうかを知るはずです。 –

答えて

1

あなたは「交渉フェーズ」でどのようにclient-authentication作品を見れば、最後の点から二番目は言う:

クライアントが以前以上の署名であるCertificateVerifyメッセージを送信クライアントの証明書の秘密鍵を使用してハンドシェイクメッセージを送信します。この署名は、クライアントの証明書の公開鍵を使用して検証できます。これにより、クライアントは証明書の秘密鍵にアクセスし、証明書を所有していることをサーバーに知らせることができます。だからあなたの質問に答えるために

  1. あなたがあなたに与えられた秘密鍵を使用する必要があります。
  2. PKCS12はJava KeyStoreの一種で、標準JKSに似ています。鍵ペアのリストを含めることができます。しかし、PKCS12のインターネット標準は、のみ1キーペアエントリ、すなわち関連する証明書チェーンを有する1個の秘密キーを有することである。秘密鍵と証明書チェーンは別々のエンティティとして与えられているので、コードを使用してPKCS12を自分で構築して、サービスを提供しているサーバーに対してクライアントを認証する必要があります。
  3. プロトコルレベルでハンドシェイクがどのように行われるかを確認する場合は、クライアントの秘密鍵(秘密鍵)を使用してデータに署名し、サーバーに送信します。ここでサーバーが検証されますあなたの公開鍵に基づくメッセージの真正性。サーバーがメッセージを検証すると、秘密鍵が所有されているという結論に至ります。
  4. サーバーの秘密鍵は与えられません。あなたには(あなたの)秘密鍵が与えられています。秘密鍵は誰にも与えられてはいけません。

秘密鍵と証明書チェーンを使用してp12を構築しているときに、失敗する可能性のあるものがあるか、些細なエラーが発生することがあります。うまくいかない場合は、KeyStore apiをプログラムで使用してp12を構築することもできます。

関連する問題