本文详细介绍了通过OpenSSL生成自签名泛域名(域名通配符)证书的方法,以用于在本地实验环境部署网站安全证书(SSL证书)。
演示环境
系统版本:Ubuntu 20.04 LTS Desktop
软件版本:OpenSSL 1.1.1.f
一. 安装OpenSSL
sudo apt update
sudo apt install openssl
二. 生成自签名CA根证书
- 使用RSA算法生成CA根证书私钥并使用AES256加密
命令如下:
openssl genpkey -algorithm RSA -out cakey.pem -outform PEM -pkeyopt rsa_keygen_bits:2048 -aes-256-cbc
参数说明:
-algorithm 密钥生成算法,通常使用RSA算法
-out [filename] 生成的密钥文件名称
-outform [PEM | DER] 文件输出格式,默认为DER
-pkeyopt [option args] 私钥生成设置,如私钥长度、加密算法
- 生成CA根证书申请请求(CSR)
命令如下:
openssl req -new -key cakey.pem -out ca.csr
- 生成CA根证书并签名
命令如下:
openssl x509 -req -days 3650 -in ca.csr -signkey cakey.pem -out ca.crt -extensions v3_ca
三. 生成客户端SSL证书
- 使用RSA算法生成客户端SSL证书私钥
openssl genpkey -algorithm RSA -out clientkey.pem -outform PEM -pkeyopt rsa_keygen_bits:2048
- 生成客户端SSL证书申请请求(CSR)
openssl req -new -key clientkey.pem -out client.csr
- 准备客户端SSL证书签名环境
mkdir -p demoCA/newcerts
touch demoCA/index.txt
touch demoCA/serial
openssl rand -hex 16 > demoCA/serial
cat >> client.ext <<EOF \
subjectAltName = DNS:*.example.com, DNS:example.com \
EOF
注:将 example.com 替换成自己的域名
- 生成客户端SSL证书并完成签名
openssl ca -days 365 -in client.csr -out client.crt -cert ca.crt -keyfile cakey.pem -extfile client.ext
四. 生成结果
自签名CA根证书:ca.crt; cakey.pem; ca.csr
自签名客户端证书:client.crt; clientkey.pem; client.csr
注:使用时将 clientkey.pem 和 client.crt 部署到服务器即可
五. 本地信任自签名根证书
通过上述步骤生成自签名证书并部署后,通过浏览器访问自己的网站,发现会提示证书不受信任,为了便于本地调试,可以打开 ca.crt 并选择安装证书,安装到 [受信任的根证书颁发机构] 即可。