作者:E4b9a6, 创建:2023-07-15, 字数:1283, 已阅:179, 最后更新:2023-07-15
在开发过程中,如果需要在本地部署开发环境和测试环境时使用HTTPS,通常会选择自签证书来实现
但自签证书会导致浏览器显示不友好的HTTPS证书警告,因为浏览器无法确认该证书的安全性,原因是自签证书并不是浏览器内置的CA证书所提供的
为了避免这个错误,可以通过制作自己的CA证书并将其安装到客户端来解决
以下是创建自己的CA证书并安装到客户端解决这个问题的实践
首先,创建根CA证书,我们将其命名为ChancelCA
:
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt -subj "/CN=ChancelCA"
接下来,生成HTTPS证书,以chancel.me
的泛域名为例,可以填入*.chancel.me
作为泛域名:
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr -subj "/CN=*.chancel.me"
然后,创建一个openssl签发配置文件(signing.conf
),内容如下:
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = *.chancel.me
接下来,使用根CA证书签署服务器证书请求:
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -sha256 -extfile signing.conf
至此,证书签署完毕,所有文件如下所示:
➜ tree
.
├── ca.crt
├── ca.key
├── ca.srl
├── server.crt
├── server.csr
├── server.key
└── signing.conf
将server.crt
和server.key
传输到Nginx服务器上,并在Nginx配置文件中进行如下配置:
listen 443 ssl;
ssl_certificate server.crt;
ssl_certificate_key server.key;
...
最后,将根CA证书安装到客户端,然后访问时就不会再提示HTTPS证书自签警告了