在 Mac OS 下,为 Nginx 创建自签名 SSL 证书

Nginx 2020-07-18 阅读 646 评论 0

为方便开发,有时候我们也需要在本地的调试环境中配置 https,跟生产环境一致。以下介绍在 Mac OS系统中,创建自签名证书,并在 Nginx 中配置 Server。

1. 创建 openssl.cnf

复制 openssl.cnf

cp /System/Library/OpenSSL/openssl.cnf openssl.cnf

openssl.cnf 末尾添加以下2行。test.cpming.top 为我本地 hosts 的一个域名,也可以是其他域名,如localhost

[v3_ca]
subjectAltName = DNS:test.cpming.top

2. 创建 SSL 证书

创建存储证书的目录:

mkdir -p /usr/local/etc/ssl/private
mkdir -p /usr/local/etc/ssl/certs

创建密钥和证书对:

sudo openssl req \
  -x509 -nodes -days 365 -newkey rsa:2048 \
  -subj "/CN=test.cpming.top" \
  -config openssl.cnf \
  -keyout /usr/local/etc/ssl/private/self-signed.key \
  -out /usr/local/etc/ssl/certs/self-signed.crt

3. 创建一个 Diffie-Hellman 密钥对

sudo openssl dhparam -out /usr/local/etc/ssl/certs/dhparam.pem 128

4. 配置 Nginx

配置一个 server,启用 80 和 443 端口,分别为 http 和 https 协议,重启 nginx 生效。

server {
    listen       80;
    listen       443 ssl;
    server_name  test.cpming.com;

    ssl_certificate     /usr/local/etc/ssl/certs/self-signed.crt;
    ssl_certificate_key /usr/local/etc/ssl/private/self-signed.key;

    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ssl_dhparam /usr/local/etc/ssl/certs/dhparam.pem;
    ...
}

5. 将自签名证书添加到受信任的根存储中

访问 http://test.cpming.top。由于我们创建的证书不是由系统的受信任证书颁发机构之一签名的,因此浏览器应该会显示一个大警告符号,并警告您的连接不是私有连接。为了解决这个问题,我们需要将自签名证书添加到受信任的根存储中。运行以下命令。

sudo security add-trusted-cert \
  -d -r trustRoot \
  -k /Library/Keychains/System.keychain /usr/local/etc/ssl/certs/self-signed.crt
最后更新 2020-07-18