提到HTTPS,我们第一反应是证书。要安全加密通信,就得部署SSL/TLS证书。而对于很多开发者来说,第一步接触HTTPS时,往往不想马上去买正规证书,或者仅仅是本地测试、内网环境,于是就会问:Nginx支持自签名证书吗?答案支持,完全没问题。但是支持不等于“适合正式使用”。
在谈Nginx之前,先搞清楚证书的含义。
自签名证书即你给自己发的证书。就是你自己用OpenSSL工具生成一套证书和私钥。没有第三方机构认证,浏览器不信任你。优点免费、随便用、立刻生成。缺点也很直观,浏览器会警告“不受信任连接”
正规证书(由CA签发),浏览器默认信任它们的根证书。优点自动信任、无警告、安全感。缺点也很直接,免费证书要定期续期、付费证书成本高。
Nginx支持自签名SSL吗?
是的,Nginx 对证书来源不做限制。不管你用的是 Let’s Encrypt、还是用openssl手动生成的自签名证书,Nginx 都一样能跑。
Nginx 的 SSL 配置核心是这两个参数:
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
你只要有一套 .pem(证书) 和 .key(私钥),Nginx 就能给你跑出一个HTTPS服务。
用自签名证书部署 Nginx HTTPS 服务
下面是一份完整流程,适合测试环境或局域网应用。
步骤 1:生成自签名证书
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout self.key \
-out self.crt \
-subj "/C=CN/ST=Beijing/L=Beijing/O=MyOrg/CN=example.com"
这条命令会生成:
self.crt:公钥证书
self.key:私钥
可以随意放在你系统中的任意目录,比如 /etc/nginx/ssl/
步骤 2:配置 Nginx 启用 HTTPS
修改或新增配置块:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/self.crt;
ssl_certificate_key /etc/nginx/ssl/self.key;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
然后测试配置并重启 Nginx:
nginx -t
systemctl restart nginx
访问 https://example.com,能打开,但浏览器会弹出“连接不安全”,提示证书不受信任。
这是正常现象,因为自签名证书没有权威机构担保。
什么时候可以用自签名证书?
虽然浏览器会警告,但并不代表自签名证书就是错的。在以下场景,它反而是好帮手:
1. 本地开发调试
你不想每次都用HTTP跑项目,想测试HTTPS接口是否可用,自签名证书可以立刻搭建HTTPS,不用注册、不用等待。
2. 内网服务 / 自建面板
某些管理系统面板、API 网关等,如果你明确知道访问来源(比如 IP 白名单、固定内网域名),完全可以用自签名证书,浏览器提示点跳过即可。
3. 测试 HTTPS 流量、验证配置文件
有些配置,比如 HTTP/2、TLS1.3、OCSP Stapling 等,只在启用 HTTPS 后才有效。你想提前验证时,自签名证书是“最佳临时工具”。
如果你只是想快速开启HTTPS、验证一套Nginx + TLS配置,自签名证书是个理想选择。但如果你准备对外开放服务,强烈建议用正规签发的证书。