可直接用openssl生成自签名证书并配置nginx启用https,无需第三方ca,适合内网开发测试;需用-addext指定san(如dns:localhost,ip:127.0.0.1)避免浏览器报错,再配置ssl_certificate与ssl_certificate_key路径及tls协议即可。

可以直接用 OpenSSL 生成自签名证书,再配置到 Nginx 中启用 HTTPS,整个过程不依赖第三方 CA,适合内网开发、测试或局域网服务快速验证加密通信。
生成含 SAN 的自签名证书和私钥
内网环境常用 IP 或 localhost 访问,若证书未声明对应域名或 IP,现代浏览器会提示“NET::ERR_CERT_COMMON_NAME_INVALID”。因此推荐一步生成带 SAN(Subject Alternative Name)的证书:
- 创建证书存放目录:
sudo mkdir -p /etc/nginx/ssl - 执行命令生成有效期 365 天的证书与私钥(自动包含
localhost和常见内网 IP):openssl req -x509 -nodes -days 365 -newkey rsa:2048 \-keyout /etc/nginx/ssl/nginx.key \-out /etc/nginx/ssl/nginx.crt \-subj "/CN=localhost" \-addext "subjectAltName = DNS:localhost,IP:127.0.0.1,IP:192.168.1.100"
⚠️ 注意:OpenSSL 3.0+ 才支持 -addext 参数;若版本较低(如 1.1.1),需配合配置文件方式生成 SAN。
Nginx 配置 HTTPS 服务
编辑站点配置(如 /etc/nginx/conf.d/default.conf),添加监听 443 端口的 server 块:
- 指定证书与私钥路径:
ssl_certificate /etc/nginx/ssl/nginx.crt;ssl_certificate_key /etc/nginx/ssl/nginx.key; - 启用基础安全协议和加密套件:
ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5; - 可选:添加 HTTP 自动跳转 HTTPS:
server { listen 80; return 301 https://$host$request_uri; }
客户端访问与信任处理
自签名证书不会被系统或浏览器默认信任,但内网测试中可通过以下方式解决:
- Chrome / Edge:访问时点击地址栏“不安全”,选择“继续前往(不安全)”临时绕过(仅限调试)
- Firefox:可导入
.crt文件至“证书管理器 → 证书机构”并勾选信任 - Linux/macOS 终端 curl 测试:加
-k参数忽略校验,例如curl -k https://localhost - Android/iOS 设备:将
nginx.crt文件通过邮件或网页下载后,在设置中手动安装为受信任的证书
验证与排错要点
配置完成后务必检查几个关键点:
- 确认 Nginx 加载了新配置:
sudo nginx -t - 重载服务:
sudo systemctl reload nginx(或nginx -s reload) - 检查 443 端口是否监听:
sudo ss -tnlp | grep :443 - 查看错误日志:
tail -f /var/log/nginx/error.log,常见报错如“no suitable certificate found”多因路径写错或权限不足(确保 nginx 进程能读取.key文件)











