创建自签名Certificate Authority
1. 创建根私钥用于签署证书
openssl genpkey -algorithm RSA -out rootCA.key -aes256
genpkey 生成私钥
-algorithm RSA 指定所使用的算法为RSA(常用的公钥加密算法)
-out *.key 指定输出文件的名称和路径
-aes256 指定使用AES-256加密算法对私钥进行加密,意味着每次使用时都要输入加密信息,包括服务器重启
- 在可信安全环境或要使用自动化脚本的情况下,可以不使用
2. 使用根私钥创建CA根证书
openssl req -key rootCA.key -new -x509 -out rootCA.crt -days 3650
req 用于生成证书请求(Certificate Signing Request, CSR)或自签名证书
-key *.key 指定要使用的用来签署生成的证书的私钥文件
-new 表示要生成一个新的证书请求或证书
- 在使用了
-x509选项指示直接生成自签名证书时-new可以省略,但为保持清晰建议保留
-x509 指示openssl生成一个自签名X.509证书而不是证书请求
- 在使用
req生成自签名证书时,-x509是必需选项
-days 指定证书的有效期,按天计
使用自签名CA签署服务器证书
1. 创建用于服务器下发证书的私钥
openssl genpkey -algorithm RSA -out server.key -aes256
- 解释同CA根私钥
- 该私钥可以与多个证书签署关联,适用于服务器面向多用户的情况
2. 生成证书签署请求CSR
openssl req -new -key server.key -out new.csr -config *.cnf -extensions v3_ext
- 解释同CA根证书创建
- 这里不使用
-x509,req默认生成证书请求
-config表示在生成证书时使用配置文件
3. 使用根证书签署服务器证书
openssl x509 -req -in new.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out new.crt -days 3650 -extfile *.cnf -extensions v3_ext
x509 openssl工具集中用于处理和管理X.509个数的数字证书
- 功能包括:查看证书、证书格式转换、生成自签名证书、从CSR生成证书、检查证书有效性等
-req 表示输入的是一个CSR,用现有的CSR生成证书
-in *.csr 指定输入的CSR文件,文件包含证书的签名请求
-CA *.crt 指定用于签名的根证书文件,该证书会被用来验证生成的服务器证书
-CAkey *.key 指定根证书的私钥文件,用于对新的服务器证书进行签名
-CAcreateserial 表示如果没有现有的序列号文件,openssl会自动创建一个新的序列号文件,序列号文件用于唯一标识证书
-out *.crt 指定生成的服务器证书文件名和路径
-days 指定生成证书的有效期
4. 验证证书链
openssl verify -CAfile rootCA.crt new.crt
verify openssl的验证命令,用于检查证书的有效性
-CAfile *.crt 指定CA根证书文件,用于验证要验证的签名证书
*.crt 要验证的服务器证书,检查该证书是否由指定的CA签发并且验证该证书链是否完整
- 如果验证成功会输出
OK
5. (可选)生成的*.crt服务器证书能够满足大多数需求,有些情况下需要按需进行格式等的转换
6. 后续处理
- 清理CSR证书签署请求
- 保存生成的证书和私钥,ubuntu下证书一般在
/etc/ssl/certs/,私钥保存在安全位置/etc/ssl/private/
服务器证书的使用
- 访问服务器的客户端浏览器:手动导入创建的自签名CA证书(
.crt)
- 想让系统上的命令行工具、服务等信任自签名的CA证书须执行
sudo update-ca-certificates
openssl.cnf文件示例
[ req ]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = v3_ext
[ req_distinguished_name ]
C = CN
ST = HLJ
L = HRB
O = HIT
OU = CS
CN = i.cnblogs.com
[ v3_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = i.cnblogs.com
DNS.2 = i.csdn.com
IP.1 = 127.0.0.15
IP.2 = 192.168.2.11
- 注意当前openssl中要求必须启动SAN,即有上述
subjectAltName、alt_names部分