核心思路是生成含SAN的自签名证书并正确配置Nginx,再通过客户端手动信任或忽略校验;必须显式声明DNS和IP等SAN条目,否则浏览器报NET::ERR_CERT_COMMON_NAME_INVALID。
在测试环境用 Nginx 配 HTTPS,临时跳过证书验证的核心思路是:自己生成带 SAN 的自签名证书 + Nginx 正确加载 + 客户端主动忽略或信任。重点不是“跳过服务端验证”,而是让浏览器、curl 或前端请求不因证书问题中断连接。
现代浏览器(Chrome/Firefox/Safari)和 curl 会强制校验 Subject Alternative Name(SAN),只写 CN=localhost 不够,必须显式列出所有访问方式(域名、IP)。
sudo mkdir -p /etc/nginx/ssl
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"
(把 192.168.1.100 换成你服务器实际内网 IP)
sudo chmod 600 /etc/nginx/ssl/nginx.key 和 sudo chmod 644 /etc/nginx/ssl/nginx.crt
只需一个标准 443 server 块,路径、协议、加密套件三处不能错。
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_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
server { listen 80; return 301 https://$host$request_uri; }
自签名证书本身不被系统信任,需按需处理,无需全局部署根证书。
-k 参数,如 curl -k https://localhost
.crt 文件 → 导入钥匙串 → 右键证书 →「显示简介」→「信任」→ 设为「始终信任」http:// 调试接口配置完成后别忘了检查和重载:
nginx -t
sudo systemctl reload nginx 或 sudo nginx -s reload
ss -tlnp | grep :443
curl -k https://localhost 应返回响应,无证书报错