使用自签CA证书签发SSL证书
生成一个 CA 证书,用这个 CA 证书来签发其他 SSL 证书。只需将 CA 证书添加到信任列表,由其签名的 SSL 证书也可以自动被信任。
1. 创建 CA 证书私钥
以下两种加密方式,任选一种。ECC 密钥更小,256位ECC密钥等效于3072位RSA密钥,384位ECC密钥等效于7680位RSA密钥。
RSA 私钥openssl genrsa -out ca.key 2048
ECC 私钥openssl ecparam -genkey -name secp384r1 -out ca.key
-name
参数指定椭圆曲线openssl ecparam -list_curves
查看 openssl 支持的椭圆曲线
2. 生成 CA 证书
openssl req \
-subj "/C=CN/ST=BJ/L=Beijing/O=Myself/OU=Myself Org/CN=Self-signed CA/[email protected]" \
-new \
-x509 \
-days 3650 \
-key ca.key \
-out ca.crt
-subj
里面的字段可以自定义。
3. 创建域名证书私钥
RSA 私钥openssl genrsa -out server.key 2048
ECC 私钥openssl ecparam -genkey -name secp384r1 -out server.key
4. 生成域名证书签名请求
证书签名请求 subj 中的 CN (Common Name) 必须区别于 CA 的证书里面的 CN (Common Name)
openssl req \
-subj "/C=CN/ST=BJ/L=Beijing/O=Selfsigned Certificate/CN=Self-signed Certs for Dev" \
-new \
-key server.key \
-out server.csr
5. 创建域名证书配置文件
创建一个cert.ext文件,输入以下内容。alt_names 可按需添加域名和 IP。
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
IP.2 = 127.0.0.1
DNS.3 = *.localhost
DNS.4 = *.test.com
泛域名不生效,不知道为什么。
6. 用 CA 证书签发域名证书
openssl x509 -days 3650 -req -sha256 -extfile cert.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt
把 ca.crt 导入本地计算机, 浏览器就会自动信任用它签发的其他证书。
server.crt 和 server.key 用来部署到 web 服务器。
7. 效果
Firefox 已经自动信任了。
证书详情。
参考链接:
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。