当社は、社員のみが特定のサブドメイン(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
まず要求を確認してください。