使用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