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


9

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

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

背景:HPブレードシャーシではCSRを生成できますが、SANは1つしか許可されないという問題があります。ブレードシャーシにキーをアップロードする方法(私が見つけることができない)がないため、結果の証明書を使用できなかったため、他の場所で生成された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があります。


現在、ブレードシャーシで証明書をどのように生成していますか?接続にはどのような方法を使用していますか。ブレードシャーシのモデルは何ですか。
Eli、

シャーシはc7000です。はい、現在、シャーシにCSRを作成し、署名時にSANを追加していますが、これは自己署名証明書用です。
ジェイソンタン

現在それに接続するためにどの方法を使用していますか、またそのための証明書を生成するためのプロセスは何ですか?
Eli

主な質問を編集して、現在の方法を含めました。
Jason Tan

1
証明書と秘密鍵を別のマシンで生成してエクスポートすると、インポートできますか?
クリント

回答:


15

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

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

追加subjectAltNameする[ v3_req ]セクション。

新しいCSRを生成します。

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

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


Cakemoxが言ったこと。署名された後に証明書(つまり、署名されたCSR)を編集できる場合、認証局の認証の目的全体が無効になります。
MadHatter、2011

署名後にCSRを編集する必要はありません。つまり、ププロスを倒すことになります。CSRが生成された後、それが署名される前に編集したいと思います。opensslを使用して署名する前に、CSRの一部を編集することは間違いなく可能です。
Jason Tan

キーをダウンロードできたら、ダウンロードします。申し訳ありませんが、元の質問ではそのことについては触れていませんが、キーをダウンロードするための場所を見つけることができませんでした。キーのダウンロード方法を教えてくれた人に報奨金を支払うのも同じくらいうれしいです。
Jason Tan

FYI-openssl、特に「openssl req -subj」オプションを使用して署名する前に、CSRの一部を編集することは間違いなく可能です。ただし、これはv3 SAN拡張機能を追加できるとは限りません。追加のCNを含む新しい件名を指定できるようにするだけです。
Jason Tan

2
CSRはマシンの秘密鍵で署名されているため、生成後は編集できません(そうしないと、署名に失敗します)。ただし、CAが公開証明書に入力されたフィールドを編集することは可能です。これは、SANフィールドを変更する唯一の方法です(これをパブリックCAに送信するかどうかは制御できません)。
クリスS

0

重要な注意: これらはすべて推測にすぎないため、コードの奥深くにいて、私が言っていることに同意しない場合は、コードを信じてください。私はCAのエキスパートではありません。テレビでプレイするだけです。それは言った:

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

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

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

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


さらに調査すると、オプション#2も実際には非常に単純で、多くのCAによって実行されます(たとえば、SANとして証明書に追加するsite.comためwww.site.com)。
BMDan

0

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

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

  • 登録エージェント証明書を取得する
  • SSL証明書テンプレートを変更して、発行にEA証明書を要求する
  • SAN情報を必要とするCSRを取得する
  • EA証明書を使用して、SAN情報を追加しながら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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.