プライベートPKIの最終エンティティ証明書にSubjectAltNamesを追加するにはどうすればよいですか?

プライベートPKIの最終エンティティ証明書にSubjectAltNamesを追加するにはどうすればよいですか?

当社は、社員のみが特定のサブドメイン(admin.example.comなど)にアクセスできるように証明書を発行する内部/個人PKIを持っています。

証明書の生成に使用するスクリプトは次のとおりです。

names="john maria foo bar"

for name in $names; do
        echo "$name"
        openssl genrsa -aes256 -out $name.key 2048

        # Creating the certificate signing request
        openssl req -new -key $name.key -out $name.csr

        # Signing the certificate
        openssl ca -in $name.csr -out $name.crt

        # Exporting both the key and the certificate in a p12 file
        openssl pkcs12 -export -clcerts -in $name.crt -inkey $name.key -out $name.p12
        # And now a bit of cleaning
        rm $name.csr
done

スクリプトは、従業員ごとに.key、.crt、および.p12ファイルを生成します。これにより、従業員はp12ファイルをブラウザに追加して(会社のCAルート証明書と共に)サブドメインにアクセスできます。

しかし、最近はChromeでは機能しなくなり、従業員が使用する個人証明書にSAN(サブジェクト代替名)を含める必要があるアップデートがあったようです。

次のようなFAQ/トピック代替名(SAN)、OpenSSL設定ファイルを修正しました。

[req]
req_extensions = v3_req

[ v3_req ]

# Extensions to add to a certificate request

basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = admin.example.com
DNS.2 = admindashboard.example.com

ただし、生成された証明書にはSANは含まれていません。

.csrファイルを破損するスクリプトの最後の部分を削除し、スクリプトを再起動し、次のようにcsrファイルをテストしました。

openssl req -text -noout -in john.csr | grep DNS

この時点で私が得た後に動作するようです。

DNS:admin.example.com, DNS:admindashboard.example.com

だから。

しかし、次のコマンドでcrtファイルをテストした場合

openssl x509 -text -noout -in john.crt | grep DNS

私は何も得られませんでした。

私は何を逃したことがありませんか?

ベストアンサー1

OpenSSL は、設定された場合にのみ要求の拡張を証明書にコピーします。

このオプションはcopy_extensions設定ファイルのセクションで呼び出されます。[ca]

欠落または設定されている場合、none拡張は要求から証明書にコピーされません。

これを設定すると、copy証明書にない追加の拡張が要求からコピーされます。

これを設定すると、copyallすべての拡張子がコピーされ、証明書のすべての拡張子が上書きされます。

man caそれについて教えてくれます。警告も付属しています。コマンドを使用して要求にランダムに署名する場合は、openssl caこのオプションが設定されている場合は、CA:Trueまず要求を確認してください。

おすすめ記事