web-dev-qa-db-ja.com

既存の証明書署名要求(CSR)へのサブジェクト代替名(SAN)の追加

既存のCSRに複数のサブジェクト代替名を追加する方法を教えてもらえますか?

SANでCSRを生成したり、署名時にSANを追加したりすることについて話しているのではありません。これらの両方を行う方法を知っています。

背景:私たちが抱えている問題は、HPブレードシャーシでCSRを生成できることですが、それらは単一のSANしか許可しません。ブレードシャーシにキーをアップロードする方法(私が見つけることができない)がないため、結果の証明書を使用できなかったため、他の場所で生成されたCSRを使用できません。

私たちのCAの標準プロセスでは、SANが署名時間を追加することはできません。彼らは実験するつもりですが、私が私たちのために非標準的なプロセスを持っていることに依存する必要がないことを意味するので、私は私たちの終わりに解決策を見つけようとしています-非標準的なプロセスを使用する必要がある場合、私の経験では人生は最終的に困難になります。例えば。非定型業務を知っている職員が休暇等で不在の場合.

現在の方法は、Web GUIを介してブレードシャーシのオンボード管理に接続し、単一のCNでCSRを生成することです。

Web GUIは、CSRで単一のSAN=のみを許可します。

次に、openssl構成の次のスタンザで自己署名します。

[ v3_ca ]
subjectAltName = "DNS:bladesystem8,DNS:bladesystem8.services.adelaide.edu.au,DNS:bladesystem8-backup,DNS:bladesystem8-backup.services.adelaide.edu.au"

結果の証明書には追加のSANがあります。

9
Jason Tan

シャーシがSANの追加をサポートしていない場合は、シャーシからキーを取得し、opensslでCSRを生成する必要があります。

req_extensions = v3_req[ req ]セクションでコメント解除されていることを確認してください。

subjectAltName[ v3_req ]セクションに追加します。

新しいCSRを生成します。

openssl req -new -key extracted_c7000.key -out your_new.csr

既存のCSRを編集することはできません。

15
Cakemox

重要な注意:これはすべて投機的であるため、コードの奥深くにあり、私が同意するものと一致しない場合言って、コードを信じて。私はCAのエキスパートではない、私はテレビでそれを再生するだけだ。それは言った:

CSRの特徴としては難しいでしょう。プログラムでCSRを生成する最後の手順は、作成したすべてをハッシュし、秘密鍵で署名することです。したがって、これらの属性をCSRのテキストに追加することはできますが、署名はコンテンツと一致しないため、CAは署名しません。

ただし、あなたの場合、CAを管理します(または少なくとも連絡します)。これには2つのオプションがあります。

  1. CSRの署名を気楽に無視し、とにかく証明書を発行するようにCAに指示できます。
  2. 要求されたものとは異なる証明書をCAに発行させることができます(たとえば、属性を追加することにより)。

これらのうち、1番目が断然簡単です。これを行うには、OpenSSLの改ざん防止シールを破る必要がありますが、これにはかなり簡単にする機能がいくつかあります。 CSRを分解する方法を示すasn1parseから始めます。

0
BMDan

何らかの方法で秘密鍵のコピーを取得できれば、cakemoxの答えが間違いなく最も簡単ですが、基本的に「登録エージェント」証明書を使用してCSRに再署名できない場合は別の方法があります。

この css-security.comブログの投稿 には、重要な詳細がすべて含まれています。しかし、プロセスの概要は次のようになります。

  • 登録エージェント証明書を取得する
  • SSL証明書テンプレートを変更して、発行にEA証明書を要求する
  • SAN情報を必要とするCSRを取得する
  • SAN情報を追加しながら、EA証明書を使用してCSRを再署名します

私がこれを個人的に試したとき、私は証明書テンプレートの変更に関する部分をスキップしたと確信しています。自分で登録エージェント証明書を生成できると想定すると、実際のプロセスは次のようになります。

SAN拡張情報が含まれるsan.infを作成します

[Extensions]
2.5.29.17="{text}dns=mysan1.example&dns=mysan2.example"

リクエストに再署名します

certreq -policy -config "myca.example\CA" orig-request.csr san.inf corrected-request.csr

修正されたリクエストを送信します

certreq -submit -config "myca.example\CA" -attrib "CertificateTemplate:MyTemplate" corrected-request.csr

その後、通常どおり発行プロセスを進めます。

0
Ryan Bolger