直接用 OpenSSL 一步生成含 SAN 的自签名证书并配置 Nginx 即可快速启用 HTTPS;需使用 -addext 指定 DNS 和 IP(如 DNS:localhost,IP:127.0.0.1,IP:192.168.1.100),Nginx 配置中指定 ssl_certificate 与 ssl_certificate_key 路径,并启用 TLSv1.2+。

直接用 OpenSSL 一步生成自签名证书,再配进 Nginx 的 server 块,就能在测试环境快速启用 HTTPS。浏览器会提示“不安全”,但不影响功能验证,适合本地开发、内网测试或 CI/CD 环境。
快速生成证书(推荐单步命令)
执行以下命令,同时生成私钥(nginx.key)和自签名证书(nginx.crt):
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout nginx.key -out nginx.crt \ -subj "/C=CN/ST=Beijing/L=Beijing/O=Test/CN=localhost" \ -addext "subjectAltName = DNS:localhost,IP:127.0.0.1,IP:192.168.1.100"
说明:
- -addext 是关键:现代浏览器强制校验 SAN(Subject Alternative Name),只填 CN=localhost 不够,必须显式加入所有可能访问的地址,比如 localhost、127.0.0.1 和你的实际内网 IP
- OpenSSL 3.0+ 支持 -addext;若用 1.1.1 或更旧版本,需改用配置文件方式生成(可提供模板)
- 生成的 .key 文件无密码(-nodes 参数),Nginx 启动时不会卡住,适合自动化
证书文件权限与存放位置
把证书放好,并设严格权限,避免私钥泄露:
- 建议路径:/etc/nginx/ssl/(Linux)或 C:\nginx\conf\ssl\(Windows)
- 设置权限:
sudo chmod 600 nginx.key && sudo chmod 644 nginx.crt - 确保 Nginx 主进程有读取权限,且目录不可被非 root 用户遍历
Nginx 配置 HTTPS server 块
在 nginx.conf 或站点配置文件中添加或修改 server 块:
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
注意:
- listen 443 ssl; 必须带 ssl 标志,否则 Nginx 不启用 TLS
- 如果还要支持 HTTP 跳转,可加一个
listen 80;块并用return 301 https://$host$request_uri; - ssl_protocols 至少启用 TLSv1.2,禁用已不安全的 SSLv3/TLSv1.0
验证与调试
配置完后别急着 reload,先检查语法和证书有效性:
- 检查配置:
sudo nginx -t - 重载服务:
sudo nginx -s reload - 浏览器访问
https://localhost,确认能加载页面(忽略警告) - 终端验证:
curl -k https://localhost(-k 跳过证书校验)或openssl s_client -connect localhost:443 -servername localhost查看证书详情


















