文档中心
Nginx閰嶇疆HTTPS鏃犺瘉涔︼紵涓€鏂囨暀浣犲浣曞畨鍏ㄥ疄鐜帮紙闄勫疄鎿嶆渚嬶級
时间 : 2025-09-27 16:27:26浏览量 : 3
为什么需要HTTPS?先讲个“快递盒”的故事

想象你要寄一份机密文件,如果直接用透明塑料袋(HTTP),路上谁都能偷看。但若装进带锁的保险箱(HTTPS),即使被截获,对方也打不开。这就是HTTPS的核心作用——加密传输,防窃听、防篡改。
传统HTTPS依赖SSL/TLS证书(就像保险箱的钥匙),但某些内网测试或临时场景下,你可能不想花钱买证书(比如Let's Encrypt)或走复杂流程。这时候,“无证书HTTPS”就成了折中方案。
什么是“无证书HTTPS”?它安全吗?
严格来说,真正的HTTPS必须要有证书。但通过以下两种方式可以“模拟”HTTPS效果:
1. 自签名证书:自己生成一把“钥匙”,缺点是浏览器会警告“不安全”(好比自制锁,别人不认)。
2. Nginx的`ssl_verify_client off`:允许客户端不验证服务端证书(类似快递员不检查你的身份证就签收,风险极高)。
?? 注意:无证书的“HTTPS”实际是明文传输!只是端口用了443(像把快递塞进保险箱但不锁)。
实操:用Nginx配置“伪HTTPS”(自签名证书为例)
场景假设
公司内网有个后台页面`http://admin.internal.com`,你想改成`https://`但暂时没证书。
步骤1:生成自签名证书(自制钥匙)
```bash
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/nginx/self.key -out /etc/nginx/self.crt
```
- `-nodes`:私钥不加密(省去输入密码的麻烦)
- 填写信息时,`Common Name`写你的域名(如`admin.internal.com`)
步骤2:Nginx配置监听443端口
编辑配置文件(如`/etc/nginx/sites-enabled/admin.conf`):
```nginx
server {
listen 443 ssl;
server_name admin.internal.com;
ssl_certificate /etc/nginx/self.crt;
自签名证书路径
ssl_certificate_key /etc/nginx/self.key;
私钥路径
关闭客户端验证(仅限内网测试!)
ssl_verify_client off;
location / {
root /var/www/admin;
index index.html;
}
}
步骤3:强制HTTP跳转到HTTPS(可选)
listen 80;
return 301 https://$host$request_uri;
HTTP自动跳转HTTPS
效果验证
访问`https://admin.internal.com`,浏览器会显示“不安全”警告(如下图)。点击“高级”→“继续访问”即可。
 (配图示意)
风险警示:什么情况下绝对不能用?
1. 生产环境对外服务:用户看到警告会直接流失,且数据仍可能被中间人攻击。
- ?替代方案:用Let's Encrypt免费证书,一行命令搞定:
```bash
certbot --nginx -d admin.example.com
```
2. 涉及密码、支付等敏感操作:自签名等于裸奔。
进阶技巧:如何让自签名证书被信任?
如果你控制所有客户端设备(如企业内网),可以将自签名证书导入到系统的信任库中:
- Windows:双击`.crt`文件 → “安装证书” → “受信任的根颁发机构”。
- Linux/macOS:复制到`/usr/local/share/ca-certificates/`并运行`update-ca-certificates`。
一句话
“无证驾驶”HTTPS只能用于测试!真要上线服务,老老实实用正规证书——Let's Encrypt免费又省心,何必冒险?
TAG:nginx https 无证书,nginx配置ssl证书无效,nginx证书完整证书链,nginx配置cer证书