使用openssl创建包含SAN的证书
什么是SAN?
SAN(Subject Alternative Name)是SSL标准x509中定义的一个扩展,使用了SAN字段的SSL证书,可以扩展此证书支持的域名,使得 一个证书可以支持多个不同域名的解析。
- 创建一个"cert"目录用于保存证书和配置文件。
- 创建配置文件"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
- 生成根证书 使用命令行工具,进入到"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
使用私钥和证书来生成公钥
- 在"cert"目录下,分别创建"server"和"client"目录,它们分别用来保存服务器密钥和客户端密钥。
- 生成服务器密钥 使用命令行工具进入到"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
验证生成的证书
- 生成客户端密钥 使用命令行工具进入到"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