
在安裝了 Windows 10 的電腦上,我必須使用 OpenSSL。我已經下載了 1.0.2n 版本並遵循本指南:建立具有多個主機名稱的 SSL 憑證我修改了openssl.cfg設定檔(位於C:\OpenSSL-Win64\bin)。
經過一些測試,我可以毫無問題地產生金鑰和憑證。
我的問題如下:我對證書產生的指示是這樣的主題別名必須只有 1 個值且必須與通用名場地。因此,如果(填寫證書)我將 commonName 欄位填寫為example.com,主題備用名稱也必須是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 繼承為主題備用名稱?如果是的話,怎麼辦?
答案1
用於${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:
...