先看效果
在浏览器访问https://fake.server.com
可以访问本地127.0.0.1
的服务,并且浏览器不报不安全的提示
![nginx_local_https]()
生成根证书 Root CA
1 2 3 4 5
| openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -subj "/CN=MyLocalRootCA" -out rootCA.crt
|
生成服务端证书
1 2 3 4 5
| openssl genrsa -out fake_server.key 2048
openssl req -new -key fake_server.key -out fake_server.csr -subj "/CN=fake.server.com"
|
创建 SAN 配置文件
下面的命令直接拷贝进终端即可生成 SAN 配置文件。
1 2 3 4 5 6 7 8 9 10 11
| cat > fake_server.ext <<EOF [ v3_req ] authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names
[ alt_names ] DNS.1 = fake.server.com EOF
|
extendedKeyUsage = serverAuth 非常关键,否则 Safari 不信任
subjectAltName 必须有你访问的域名
用 Root CA 签发 Server 证书(带 SAN)
1
| openssl x509 -req -in fake_server.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out fake_server.crt -days 3650 -sha256 -extfile fake_server.ext -extensions v3_req
|
配置 Nginx 使用生成的证书
将生成的 fake_server.crt
和 rootCA.crt
合并成 fake_server_bundle.crt
供 Nginx
使用。
1
| cat fake_server.crt rootCA.crt > fake_server_bundle.crt
|
1 2 3 4 5
| server { listen 443 ssl; server_name fake.server.com; ssl_certificate /path/to/your/nginx/certs/fake_server_bundle.crt; ssl_certificate_key /path/to/your/nginx/certs/fake_server.key;
|
在 macOS 导入 rootCA.crt(注意不是 fake_server.crt)
1
| sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain rootCA.crt
|
也可以手动操作导入系统
钥匙串(比登录
钥匙串更可靠):
打开“钥匙串访问” → 选择系统钥匙串中的系统
→ 导入 rootCA.crt
→ 设置为“始终信任” (证书名字是 MyLocalRootCA )。
在 /etc/hosts 添加以下内容
1
| 127.0.0.1 fake.server.com
|
重启 Nginx
退出浏览器并重新打开
这样浏览器会信任任何由这个 Root CA 签发的证书(包括你的 fake_server.crt
)。