1

現在の状況:

HTTPS/SSL を使用して特定の URL に POST を実行します。これが機能するために、私の(元)同僚が次の質問を投稿しました:Java HTTPSクライアント証明書認証

したがって、基本的には.p12形式のキーストアがあり、トラストストアは.jksファイルです。

POST リクエストを受け取るサーバーを制御することはできません。

問題:

サーバー管理者は.der 、古い証明書の有効期限が近づいているため、いくつかの新しいファイルを提供してくれました。

私はSSL証明書とkeytool-および-コマンドにかなりopenssl慣れていないため、ここから先に進む方法がわかりません.

1) 新しいファイルを生成する必要が.p12あり.jksますか? .jksそれとも、新しいファイルを生成するだけでよいですか?

2) 証明書からこれらのファイルを生成するにはどうすればよい.derですか? コマンドが最も多い Web サイトをいくつか見つけましたkeytool/opensslが、必要なものを正常に生成できませんでした。

私が試した最後のコマンド(役に立たなかった)は次のとおりです。

keytool -storepass dsmserver -keystore c:\temp\newkeystore.jks -importcert -alias "c:\temp\newcert.der" -trustcacerts
4

2 に答える 2

3

待って、どの証明書の有効期限が切れましたか? 彼らのものだった場合、新しいファイルを送信する必要はありませんでした (結局のところ、たとえば、stackoverflow.com の SSL 証明書の有効期限が切れて新しい証明書がインストールされたときに、ブラウザーを更新する必要はありません)。相互認証 (クライアント証明書認証) を行っている場合は、4 つの証明書が関係します: 自分の証明書、その証明書、自分の証明書に署名した機関の証明書、およびその証明書に署名した機関の証明書です。彼らはあなたに証明書を送信し、あなたが信頼する認証局によって適切に署名されていることを確認します (それがトラストストアの目的です - これは、彼らの側から証明書に署名するために信頼する認証局のリストです)。続いて、証明書を送信すると、信頼できる認証局によって適切に署名されていることが確認されます。(もちろん、これらはすべて、SSL ハンドシェイク手順によって JSSE の舞台裏で自動的に行われます)

証明書は、そのような名前が特定の公開鍵によって識別されるという (署名された) アサーションであることを思い出してください。そのため、証明書の有効期限が切れている場合は、新しい証明書を生成し、既に信頼している CA によって署名され、古い証明書をこの証明書に置き換えます。ソフトウェアが (舞台裏の SSL ハンドシェイクの一部として自動的に) 新しいものを取得すると、署名者 (「発行者」) が誰であるか、信頼できる機関のリストにあるかどうか (および適切に署名されているかどうか) がチェックされます。 )。これがチェックアウトされると、自動的に承認されます。認証局を変更していて、新しい認証局をまだ信頼していない場合を除き、これを実現するために帯域外で何かを送信する必要はありません。もしそうなら、あなたは使用することができます

keytool -import -keystore <truststore> -file <certificate file> -alias <someca>

一方、証明書の有効期限が切れている場合は、要求されていないものを送信するべきではありません。代わりに、次の方法で CSR を生成する必要があります。

keytool -genkey -alias <myalias> -keystore <keystore>.p12 -storetype pkcs12
keytool -certreq -alias <myalias> -file request.csr -keystore <keystore>.p12 -storetype pkcs12

これにより、キーストアが新しい秘密鍵で更新され、「request.csr」という名前のファイルが作成されます。このファイルを署名のために送信する必要があります。彼らは署名付き証明書で応答し、次を使用してキーストアにインポートします。

keytool -import -alias <myalias> -file <signed certificate>.cer

私が推測しなければならない場合、彼らはあなたのためにこれらの3つのステップを実行しようとし、無効な証明書と対応する秘密鍵を送ろうとしたようです-Javaは(当然です!)インポートを阻止するために最善を尽くしますこれは、秘密鍵自体が、信頼されていないチャネル (電子メールだと思いますか?) を介して送信されたときに汚染されたためです。これは、PKI の目的を無効にします。

于 2012-04-12T18:47:26.030 に答える
1

次のリンクからファイルをダウンロードします: ImportKey.Java

次のコマンドを実行します。

 javac ImportKey.java
 java ImportKey key.der cert.der

  - arg1 is your key and arg2 iscertificate.

コマンドは鍵を Java Key Store に置きます。

于 2012-04-12T09:51:11.100 に答える