使用openssl創建包含SAN的證書

 閱讀大約需要1分鐘

使用openssl創建包含SAN的證書

什麼是SAN?

SAN(Subject Alternative Name)是SSL標準x509中定義的一個擴展,使用了SAN字段的SSL證書,可以擴展此證書支持的域名,使得 一個證書可以支持多個不同域名的解析。

  1. 創建一個"cert"目錄用於保存證書和配置文件。
  2. 創建配置文件"openssl.cnf",並保存到"cert"目錄下,內容如下:
[CA_default]
copy_extensions = copy
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
# 國家
C = CN
# 省份
ST = Jl
# 城市
L = Cc
# 組織
O = hacker's home
# 部門
OU = hacker's home
# 域名
CN = localhost
[v3_req]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
# 解析域名
DNS.1 = localhost
  1. 生成根證書 使用命令行工具,進入到"cert"目錄下,並執行如下命令:
openssl genrsa -out ca.key 2048

生成私鑰

openssl req -new -key ca.key -out ca.csr

使用私鑰來簽名證書

openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.crt

使用私鑰和證書來生成公鑰

  1. 在"cert"目錄下,分別創建"server"和"client"目錄,它們分別用來保存服務器密鑰和客戶端密鑰。
  2. 生成服務器密鑰 使用命令行工具進入到"cert/server"目錄下,並執行如下命令:
openssl genrsa -out server.key 2048 

生成服務器私鑰

openssl req -new -nodes -key server.key -out server.csr -config openssl.cnf -extensions 'v3_req'

使用私鑰來簽名證書

openssl req -noout -text -in server.csr

驗證證書CSR的擴展屬性:

openssl x509 -req -in server.csr -out server.pem -CA ca.crt -CAkey ca.key -CAcreateserial -extfile openssl.cnf -extensions 'v3_req'

生成SAN證書

openssl x509 -noout -text -in server.pem

驗證生成的證書

  1. 生成客戶端密鑰 使用命令行工具進入到"cert/client"目錄下,並執行如下命令:
openssl genrsa -out client.key 2048 

生成服務器私鑰

openssl req -new -nodes -key client.key -out client.csr -config openssl.cnf -extensions 'v3_req'

使用私鑰來簽名證書

openssl x509 -req -in client.csr -out client.pem -CA ca.crt -CAkey ca.key -CAcreateserial -extfile openssl.cnf -extensions 'v3_req'

生成SAN證書

openssl密鑰用法:

數字簽名:digitalSignature

認可簽名:nonRepudiation

密鑰加密:keyEncipherment

數據加密:dataEncipherment

密鑰協商:keyAgreement

證書籤名:keyCertSign

CRL簽名:cRLSign

僅僅加密:encipherOnly

僅僅解密:decipherOnly