openssl生成证书并设置本地 Nginx 的 HTTPS(证书设置信任)

创建密钥

首先,进入 nginx 配置目录,创建 openssl 配置文件 req.conf,其中的 CN, DNS.1, DNS.2 等需要替换为自己的域名:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = US
ST = VA
L = SomeCity
O = MyCompany
OU = MyDivision
CN = www.company.com
[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.company.net
DNS.2 = company.com
DNS.3 = company.net

接着,执行如下命令,创建证书:

1
openssl req -x509 -nodes -days 730 -newkey rsa:2048 -keyout cert.pem -out cert.pem -config req.conf -extensions 'v3_req'

配置nginx

1
2
3
4
5
6
7
8
9
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate cert.pem;
ssl_certificate_key cert.pem;
location / {
root /Users/example/hello/world;
index index.html index.htm;
}

服务器证书(ssl_certificate)是一个公开文件,每个请求连接的客户端都会收到一份。私有密钥(ssl_certificate_key)是加密单元,需要存储在保密的地方,但要确保 nginx 主线程可访问。私有密钥一般和证书存储到同一位置。

cert.pem 就是上一个步骤产生的证书和密钥,在一个文件中。

配置浏览器

打开 Chrome 的开发者工具下的【security】选项卡,查看当前的证书,然后下载下来,双击添加到操作系统中,修改为始终信任就可以了。

如果还继续显示是不安全,像下图这样
image.png

可以参照以下解决办法
Open developer tools
Goto the Application tab
Clear storage
Close and re-open tab

详细问题参照 “Active content with certificate errors”