1. 程式人生 > >TLS初探(4)多域名證書

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"。