ルート証明書の使用をドメインに制限することは可能ですか

ルート証明書の使用をドメインに制限することは可能ですか

顧客は、アプリケーションを動作させるために自己署名証明書を使用しています。動作させるには、証明書の署名に使用したルート証明書をインストールする必要があります。

ルート証明書を 1 つのドメインに対してのみ検証するように構成することは可能ですか?

答え1

経験則として:

いいえ顧客の CA 証明書を信頼するということは、その CA によって署名されたすべての証明書を信頼することを意味します。

エンドユーザーとして、顧客証明書または他の CA 証明書を特定の (サブ) ドメイン、つまり *.example.com と *.example.org のみに対して信頼し、それ以外に対しては信頼しないことを選択できる簡単なオプションを備えたアプリケーション/ライブラリを私は知りません。

Mozillaは、現在信頼されている政府支援のCAについても同様の懸念を抱いている。注目ポイントを開くそして例えばクロムGoogle サイトにアクセスするための追加のチェックが組み込まれており、これが不正な *.google.com 証明書と Diginotar CA の侵害が公開された原因です。

ただし、CA を信頼していない場合でも、その CA によって署名された特定のサーバー証明書をインポート/信頼することはできます。これにより、その証明書内のホスト名に対する SSL 警告が防止されます。これにより、アプリケーションはエラーやエラーなしで動作するはずです。

例外:

X.509v3 PKI標準のあまり使われていないオプションは、名前の制約拡張機能により、CA 証明書に、証明書の発行が許可されているドメイン名パターンのホワイトリストとブラックリストを含めることができます。

幸運にも、顧客が PKI インフラストラクチャを設定する際に自制し、CA 証明書に名前制約を含めている可能性があります。その場合、CA 証明書を直接インポートして、限られた範囲のドメイン名のみを検証できることがわかります。

答え2

@CryptoGuy がここでかなり良い答えを出していましたが、私はそれをさらに詳しく説明したいと思いました。

言い換えると:

サードパーティ CA が、希望する名前リストに発行された証明書 (その CA からのもの) を信頼するように制限できます。サードパーティ CA に名前制約拡張機能がない場合でも、相互認証を介して独自の内部 CA サーバーを使用してそれらを適用できます。秘訣は、内部 CA を使用してサードパーティ CA に署名することです。

リーフ SSL 証明書 -> クロス証明書 -> CA 証明書 -> 内部ルート証明書。

これを動作させる方法は次のとおりです(OpenSSL コマンドライン CA を使用)

シンプルなCAを作成する

openssl req -new -x509 -days 3650 -newkey rsa:2048 -sha256 -out root-ca.crt -keyout root-ca.key -subj "/CN=My Root CA"

中間 CA を作成するか…

名前制約付きの中間 CA 要求を作成します。

openssl req -new -days 3650 -newkey rsa:2048 -out domain-ca.req -sha256 -keyout domain-ca.key -config ossl_domain_com.cfg

ファイルに次の内容を追加しますossl_domain_com.cfg:

[ req ]
prompt=no
distinguished_name=req_distinguished_name
req_extensions=domain_ca

[ req_distinguished_name ]
CN=somedomain.com trust CA

[ domain_ca ]
basicConstraints=critical,CA:true,pathlen:1
nameConstraints=critical,permitted;DNS:.somedomain.com

次に、その中間ドメイン CA に自分の CA で署名します。

openssl x509 -req -in domain-ca.req -CA root-ca.crt -CAkey root-ca.key -sha256 -set_serial 1 -out domain-ca.crt -extensions domain_ca -extfile ossl_domain_com.cfg

…またはルートCAで再署名する

中間証明書の作成をスキップした場合は、ルート CA を使用して署名します。元のドメインの CA に、その証明書を使用して、自分の権限で再署名します。ここで CA 拡張機能を追加できます。

openssl x509 -in third_party_ca.crt -CA domain-ca.crt -CAkey domain-ca.key -set_serial 47 -sha256 -extensions domain_ca -extfile ossl_domain_com.cfg -out domain-cross-ca.crt

openssl x509 -x509toreqリクエストを作成するには、上記の中間体とまったく同じ方法で署名する を使用する必要がある場合があります。

次に、ルート CA、中間 CA、およびドメイン クロス CA をブラウザーの信頼データベースに追加します。

関連情報