1. 生成根证书
创建根证书密钥文件:
openssl genrsa -out rootCA.key 2048
创建根证书的申请文件(10年有效期)
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.pem
方框中请认真填写
2、使用根证书生成服务器证书
为域名app.xxx.com生成服务器密钥
openssl genrsa -out app.xxx.com.key 2048
为域名app.xxx.com证书签名请求(CSR)
openssl req -new -key app.xxx.com.key -out app.xxx.com.csr
Common Name (eg, your name or your server’s hostname) []: 这里填写你的域名,也可以使用通配符:*.xxx.com,这样所有子域名都可以使用这个证书
创建一个配置文件v3.ext,以确保创建的证书包含正确的扩展:
uthorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = app.xxx.com
subjectAltName 可以指定多个,如DNS.2 = app2.xxx.com
使用根证书和根密钥为app.xxx.com签发证书
openssl x509 -req -in app.xxx.com.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out app.xxx.com.crt -days 3650 -sha256 -extfile v3.ext
3、配置Nginx
将生成的私钥(server.key)和证书(server.crt)用于你的Nginx配置。编辑你的Nginx配置文件(通常位于/etc/nginx/目录下),添加或修改以下行来指定证书和私钥的位置:
server {
listen 443 ssl;
server_name app.xxx.com;
ssl_certificate /path/to/your/server.crt;
ssl_certificate_key /path/to/your/server.key;
# 其他配置...
}
重新加载Nginx配置
sudo nginx -s reload
4、IOS无法使用此证书,缺少必要的拓展以及过期时间设置过长
可参考我的另一篇文章:自建SSL证书(兼容ios)
5、客户端需要导入rootCA.pem证书
查看另一篇文章:SSL浏览器导入自建证书