フィールドのサブジェクトの代替名を含むCSRを生成しました。
openssl req -out mycsr.pem -new -key mykey.pem -days 365
これを検査すると、新しいフィールドが存在するため、期待どおりに見えます。
X509v3 Subject Alternative Name:
DNS: my.alt.dns
ただし、これを使用して証明書に署名すると、何らかの理由でそのフィールドが省略されます。
次のコマンドで生成します。
openssl ca -out mycert.pem -infiles mycsr.pem
それが含まれるために私のCA証明書が同じAlt名を含まなければならないということはあり得ますか?
以下を使用できます。
copy_extensions = copy
CA_default
セクションのopenssl.cnf
。
ただし、このスレッドで指摘されているように、CSRの拡張機能を信頼できることが確実な場合のみ http://openssl.6102.n7.nabble.com/subjectAltName-removed-from-CSR-when -signing-td26928.html
システム全体のopenssl.conf
を編集したくない場合は、.crt
から.csr
にSANを追加するためのネイティブのopenssl CLIオプションがあります。使用する必要があるのは、opensslの-extfile
および-extensions
CLIパラメータだけです。
次に例を示します。
openssl x509 -req -days 3650 -in alice.csr -signkey aliceprivate.key -out alice.crt -extfile alice-csr.conf -extensions v3_req
これには、次のようなalice-csr.confファイルが必要です(適切なデータを入力してください)。このファイルは、.csr
を生成するためにopenssl req -new -key aliceprivate.key -out alice.csr -config alice-csr.conf
コマンドで使用されました。
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
Prompt = no
[req_distinguished_name]
C = DE
ST = Thuringia
L = Erfurt
O = Alice Corp
OU = Team Foo
CN = server-alice
[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = server-alice
DNS.2 = localhost
-extensions v3_req
オプションは、ファイル[v3_req]
のalice-csr.conf
セクションに対応していることを覚えておいてください。ここでは、サブジェクトの別名を定義します。
すべてのステップを再現できる完全に理解できる例を常に高く評価しているので、Spring Bootマイクロサービスを特徴とするサンプルプロジェクトを作成しました: https://github.com/jonashackt/spring-boot-rest-clientcertificates-docker-compose
代替名を使用してCSRに署名する方法については、こちらで詳しく説明しています: https://www.feistyduck.com/library/openssl-cookbook/online/ch-openssl.html#creating-certificates-valid-for-multiple-hostnames
つまり、alt名のみを含むsomething.ext
ファイルを作成します。
subjectAltName = DNS:*.my.alt.dns, DNS:my.alt.dns
次に、このファイルをopenssl x509 -req ...
コマンドで参照します:-extfile something.ext
。これは、CSRの準備時ではなく、署名時に発生することに注意してください。