事情是这样的,因为公司内部的SSL证书有问题,自己开发环境调整有问题,所以就想着怎么弄一个安全的证书,当然我也把后端的代码要了过来,前后端服务我本地是用nginx启动的,本文记录下SSL证书的生成过程
一开始是在window环境下尝试生成的,后面发现有问题没有继续处理转用linux环境生成
首先要准备必要的文件
自己找一个目录创建一个openssl.cnf文件, 文件命名没有强制要求
# $ touch openssl.cnf
# $ vi openssl.cnf
# openssl.cnf 文件
[ CA_default ]
copy_extensions = copy
 
[req]
distinguished_name = req_distinguished_name
# 这里开启v3_req 支持具体配置下面
x509_extensions = v3_req
prompt = no
 
[req_distinguished_name]
# 国家
C = CN
# 省份
ST = GD
# 城市
L = SZ
# 组织
O = juejin
# 部门
OU = test
# 域名
CN = test.example.com
#basicConstraints = CA:FALSE 默认生成终端证书
[v3_req]
basicConstraints=critical,CA:TRUE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
# 下面这个配置是为了给证书添加域名支持
subjectAltName = @alt_names
 
[alt_names]
# 解析域名,支持通配符域名 需配置
DNS.1 = test.example.com
#IP.1=127.0.0.1
生成CA根证书(这个证书要加入系统受信任根证书)
# 生成CA私钥,密码可以输入1234
$ openssl genrsa -des3 -out ca.key 2048
# 使用私钥来签名证书 subj的配置内容要和上面的一致,不然自签会验证不通过
$ openssl req -new \
  -key ca.key -out ca.csr \
  -subj '/C=CN/ST=GD/L=SZ/O=juejin/OU=test/CN=juejinRoot CA'
# 使用私钥+证书来生成公钥
# days是时间 这里直接10年一劳永逸
$ openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.crt
根据上面的CA生成服务器秘钥和证书
# 生成服务器私钥
$ openssl genpkey -algorithm RSA -out server.key
# 使用私钥来签名证书
$ openssl req -new -nodes \
    -key server.key -out server.csr -config openssl.cnf -extensions v3_req
# 生成SAN证书
$ openssl x509 -req -in server.csr \
    -out server.crt -CA ca.crt -CAkey ca.key \
    -CAcreateserial -extfile openssl.cnf -extensions v3_req
到这里证书就生成完毕了
把server.key和server.crt添加到nginx的配置里面
把ca.crt添加到受信任的根证书里面
就可以不用每次都去信任不安全的域名了