CAによって署名された有効な証明書をJavaで作成するプロセスで混乱しています。Javaには、公開鍵と秘密鍵と証明書を作成するため
のツールがあることを私は知っています。
また、JKSとPKCS#12もサポートしています。
したがって、公開鍵と秘密鍵のペアと証明書
を使用してキーストアを作成できます。たとえば、これにより、証明書(自己署名)を使用してキーストアが作成されます。
これまでのところ理解しています。
もちろん、秘密鍵を使用せずに、CSR要求の証明書をエクスポートしてVerisignなどのCAに送信できます。
この部分の後、私は迷子になります。
CAが署名し、キーストアに再インポートする必要がありますか?これにより、すでにキーストアにある元の証明書が置き換えられますか?
ただし、それでも自己署名されます。keytool
keytool -genkey -keyalg RSA -alias aCert -keystore someKeystore.keystore
発行者はCA自体ではありませんか?しかし、これはどのように可能ですか?私は公開鍵のみを送信し、証明書は送信しませんか?
プロセスをクリアするのに何か助けがありますか?
更新:
CAは証明書(Verisignなど)に署名することも発行者ですか?または、証明書に署名することはできissuer==subject
ますか?
ありがとう
2 に答える
あなたはCSRの創造の時点まで正しいです。次のようなものを使用します。
$ keytool -certreq -alias myalias -file myalias.csr -keystore keystore
以下を含むCSRを生成します。
- 公開鍵(自己署名証明書から抽出)
- 識別名(つまり、証明書が要求されたエンティティの名前)
秘密鍵で署名されています。次に、CAは次の新しい証明書を生成します。
- 件名=DN(CSRから、または申請プロセス中に提供した詳細を使用して自動生成されたもの)
- 発行者=CAのDN
- 公開鍵=CSRから
これをキーストアにインポートして戻し、元の自己署名証明書を置き換える必要があります。
$ keytool -import -alias myalias -keystore keystore -file myalias.crt
多くの場合、CAは、信頼されたルートによって署名された中間証明書を使用して新しい証明書に署名します。この場合、自分の証明書の前に中間証明書をインポートする必要があります。
$ keytool -import -trustcacerts-alias中間-ファイルintermediate.crt-keystoreキーストア
編集: keytoolのドキュメントからのこのあいまいなセクションは、驚くほど明確です(証明書の「チェーン」について説明している場合、これは、ルートにリンクする中間証明書を指します):
keytoolは、それぞれに秘密鍵と関連する証明書「チェーン」を含む鍵ストア「鍵」エントリを作成および管理できます。チェーンの最初の証明書には、秘密鍵に対応する公開鍵が含まれています。
キーが最初に生成されるとき(-genkeyサブコマンドを参照)、チェーンは単一の要素である自己署名証明書を含むことから始まります。自己署名証明書とは、発行者(署名者)がサブジェクト(証明書によって公開鍵が認証されているエンティティ)と同じ証明書です。-genkeyサブコマンドを呼び出して新しい公開鍵と秘密鍵のペアを生成するたびに、公開鍵を自己署名証明書にラップします。
その後、証明書署名要求(CSR)が生成され(-certreqサブコマンドを参照)、認証局(CA)に送信された後、CAからの応答がインポートされ(-importを参照)、自己署名証明書は次のようになります。証明書のチェーンに置き換えられました。チェーンの最下部には、サブジェクトの公開鍵を認証するCAによって発行された証明書(応答)があります。チェーン内の次の証明書は、CAの公開鍵を認証する証明書です。
CAが証明書に署名すると、自己署名は終了します。自己署名証明書には発行者==件名があります。CAが署名すると、発行者はCAになります。これは、CA自身の証明書のサブジェクトに対応し、別の発行者によって署名されます。つまり、証明書チェーンがあり、すでに信頼されているルートで終了します。トラストストアで。