Nginx本地测试自签名SSL证书:一步生成openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout nginx.key -out nginx.crt,CN填访问域名/IP;配置listen 443 ssl及证书路径,设私钥600权限,导入nginx.crt至系统信任库可消除浏览器警告。

Linux 下为 Nginx 生成自签名 SSL 证书用于本地开发测试,核心目标是快速启用 HTTPS、绕过购买成本,同时尽量减少浏览器反复提示“不安全”。关键在于两件事:正确生成证书(含匹配访问地址),以及让 Nginx 正确加载。
一步生成基础证书(适合 localhost 或单域名)
如果你只是在 localhost 或一个固定测试域名(如 test.local)上跑服务,用一条 OpenSSL 命令就能搞定:
- 执行命令:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout nginx.key -out nginx.crt - 运行后会提示填写信息,重点填对 Common Name(CN):
- 若用
https://localhost访问 → CN 填localhost - 若用
https://test.local→ CN 填test.local - 若用
https://192.168.1.100→ CN 填该 IP(但注意:部分浏览器对 IP 的 CN 支持较弱)
- 若用
- 生成的两个文件:
nginx.key(私钥)、nginx.crt(证书),建议统一存到/etc/nginx/ssl/
配置 Nginx 启用 HTTPS
编辑你的 server 配置块(如 /etc/nginx/sites-enabled/default 或自定义 conf 文件):
- 监听 443 端口并启用 SSL:
listen 443 ssl; - 指定证书路径:
ssl_certificate /etc/nginx/ssl/nginx.crt; - 指定私钥路径:
ssl_certificate_key /etc/nginx/ssl/nginx.key; - 推荐加上安全基础项(兼容现代浏览器):
ssl_protocols TLSv1.2 TLSv1.3;ssl_prefer_server_ciphers off; - 保存后检查语法:
sudo nginx -t,无误则重载:sudo systemctl reload nginx
让浏览器少点“不安全”提示(可选但实用)
默认情况下,Chrome/Firefox 会拦截并显示全屏警告。有三种应对方式:
- 临时跳过:Chrome 地址栏点锁图标 → “详情” → “前往……(不安全)”;Firefox 点“高级” → “接受风险并继续”
-
导入证书到系统信任库(推荐给团队共享环境):
- 把
nginx.crt复制到 Linux 桌面或下载到本地电脑 - 双击安装 → 选择“存储到:受信任的根证书颁发机构”(Windows/macOS)或导入到系统 ca-certificates(Linux 桌面)
- 重启浏览器即可自动信任
- 把
-
支持多地址(如 localhost + 127.0.0.1):基础命令不支持多个域名/IP。需额外建
ssl.conf文件,写入:subjectAltName = DNS:localhost,IP:127.0.0.1
再运行:openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout nginx.key -out nginx.crt -config ssl.conf -extensions req_ext
权限与路径注意事项
Nginx worker 进程通常以非 root 用户(如 www-data 或 nginx)运行,但不能读取私钥文件会导致静默失败:
- 证书目录建议设为:
sudo mkdir -p /etc/nginx/ssl && sudo chmod 700 /etc/nginx/ssl - 私钥必须仅 root 可读:
sudo chmod 600 /etc/nginx/ssl/nginx.key - 证书文件可设为 644:
sudo chmod 644 /etc/nginx/ssl/nginx.crt - 确保 Nginx 配置中路径拼写准确,且文件属主为 root(
sudo chown root:root /etc/nginx/ssl/*)


















