TLS初探(4)多域名證書
在“TLS初探(2)證書簡介”中提過,如想使用泛域名,可在Subject DN(Distingushed Name)的CN(Common Name)中使用*萬用字元,例如*.abc.com。而如果想使用同一證書匹配多個域名,可以使用X.509中擴充套件欄位的Subject Alternative Name欄位來進行多域名支援。
為此如果想支援多域名證書,首先就要想辦法在CSR證書請求中增加對X.509 v3擴充套件欄位的支援,預設的openssl.cnf配置檔案中並未開啟支援;但是個人推薦還是不要修改預設的openssl.cnf配置,而是拷貝一份至CA證書同級目錄下,從而確保對每個CA證書制定請求和簽發規則。
(一)製作多域名證書請求檔案(CSR)
首先找到openssl.cnf中“[ req ]”配置,並開啟其下“req_extenstions = v3_req”配置,如下所示:
[ req ]
......
req_extensions = v3_req
表示對於證書籤發請求檔案,啟用req_extensions,並且擴充套件欄位參照“v3_req”配置,接著同樣找到“[ v3_req ]”,從而在其下新增Subject Alternative Name擴充套件,如下所示:
[ v3_req ] ...... subjectAltName = @alternative_names ...... [alternative_names] DNS.1 = *.example.com DNS.2 = *.jm.com
其中@alternavtive_names表明引用"alternative_names"作為擴充套件域名配置,接下來即可使用指定配置檔案生成CSR:
openssl req -new -key server.key -out server.csr -config openssl.cnf
生成的CSR中可以確認已新增Subject Alternative Name,如下圖所示:
(二)利用CSR簽發多域名證書
生成的攜帶Subject Alternative Name的CSR檔案之後,理想情況下應該就可直接生成攜帶Subject Alternative Name的證書檔案。但是如果直接利用“openssl ca”命令生成證書檔案,你會發現,Subject Alternative Name並未生成至證書之中。
還是要修改“openssl.cnf”配置,需要在簽發證書時,將CSR中的擴充套件欄位複製到證書中去,需要開啟copy_extensions配置,如下所示:
[ CA_default ]
......
copy_extensions = copy
如此,在簽發證書時,即會將CSR檔案中的擴充套件欄位複製至證書檔案中,具體命令如下:
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -days 3650 -config openssl.cnf
檢視生成的證書可確認Subject Alternative Name已被簽發至證書中:
需要注意的是“[ v3_ca ]”的配置會覆蓋CSR中的相同欄位。
補充說明:如果希望簽發的證書也作為CA證書可用於後續簽發證書,可在“[ usr_cert ]”下設定"basicConstraints=CA:TRUE"。