Openssl
如何將 commonName 繼承到主題備用名稱
在我安裝了 Windows 10 的電腦上,我必須使用 OpenSSL。我已經下載了 1.0.2n 版本並遵循本指南:使用多個主機名創建 SSL 證書我修改了 openssl.cfg 配置文件(位於 C:\OpenSSL-Win64\bin 中)。
經過一些測試,我可以毫無問題地生成密鑰和證書。
我的問題如下:我對證書生成的指示是,主題備用名稱必須只有 1 個值,並且必須與通用名稱欄位匹配。因此,如果(填寫證書)我用example.com填寫 commonName 欄位,那麼 Subject Alternative Name 也必須是example.com。我知道我可以每次更改 cfg 文件並在 v3-req 部分手動設置 SAN 的值,但我想避免這種情況;我正在尋找一種方法來複製我在 SAN 欄位中提示輸入公用名的值。
所以,我嘗試了這個:在 openss.cfg 文件中,我轉到了 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 = commonName:copy
也就是說,我試圖利用 :copy 功能,但不幸的是,此操作不起作用。如果在生成證書後,我啟動命令
req -text -noout -in <filename.csr>
為了驗證我的證書,在特定部分我得到這個:
X509v3 Subject Alternative Name: DNS:commonName.copy
[alt_names]
如您所見,輸出是我在該部分下的聲明的右側。所以,問題是:有沒有一種方法可以將 commonName 繼承到主題替代名稱?如果是,如何?
用於
${section::name}
讀取先前定義的變數。這是一個有效的範例:
[ req ] prompt = no string_mask = default # The size of the keys in bits: default_bits = 2048 distinguished_name = req_dn req_extensions = req_ext [ req_dn ] # Or traditional org style: countryName = gb organizationName = example commonName = acme.example.test [ req_ext ] subjectAltName = @alt_names [alt_names] DNS.1 = ${req_dn::commonName} DNS.2 = alt.example.test
其次是:
openssl req -nodes -new -keyout test.key -out test.csr -config ./openssl.cnf
這導致:
openssl req -noout -text -in test.csr
給予:
... Attributes: Requested Extensions: X509v3 Subject Alternative Name: DNS:acme.example.test, DNS:alt.example.test Signature Algorithm: sha256WithRSAEncryption 92:1c:e0:0e:6d:7d:2e:b4:64:c5:ab:ff:6a:37:dd:35:98:58: ...