文档中心
Nginx娌℃湁璇佷功鑳戒娇鐢℉TTPS鍚楋紵璇﹁В鑷鍚嶄笌姝h璇佷功鐨勫尯鍒?txt
时间 : 2025-09-27 16:27:08浏览量 : 3
HTTPS的基本原理

在讨论Nginx能否不使用证书实现HTTPS之前,我们先要明白HTTPS的工作原理。HTTPS = HTTP + SSL/TLS,它通过在传输层和应用层之间加入SSL/TLS协议,为数据传输提供加密保护。
想象一下,你和朋友在咖啡馆聊天:
- 普通HTTP就像用正常音量交谈,周围人都能听到
- HTTPS则像是你们用只有彼此知道的暗语交流,即使被听到也无法理解
为什么需要证书?
SSL/TLS协议依赖于数字证书来实现身份验证和密钥交换。没有证书的HTTPS就像:
- 没有身份证的银行柜台 - 你怎么确认对方真的是银行职员?
- 没有包装盒的奢侈品 - 怎么证明它是正品而非山寨?
Nginx配置HTTPS必须要有证书吗?
简短回答:是的,必须有某种形式的证书。
但这里的"证书"不一定非得是付费的商业CA颁发的正规证书。主要有以下几种选择:
1. 自签名证书(免费)
就像你自己手写一张身份证:
```
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/nginx/ssl/selfsigned.key \
-out /etc/nginx/ssl/selfsigned.crt
然后Nginx配置:
```nginx
server {
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/selfsigned.crt;
ssl_certificate_key /etc/nginx/ssl/selfsigned.key;
其他配置...
}
优点:免费、即刻可用
缺点:浏览器会显示警告(就像看到手写身份证会怀疑其真实性)
2. Let's Encrypt免费证书(推荐)
相当于由***颁发的正式身份证(但免费):
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com
优点:完全免费、浏览器信任、自动续期
缺点:需要域名验证
3. 商业CA颁发的付费证书
好比办理护照需要官方认证和费用:
- DigiCert、GlobalSign等机构提供
- OV/EV证书会显示公司名称(绿色地址栏)
"无证书"HTTPS的误解澄清
有些开发者可能会问:"我看到某些网站没配置证书也能用https://访问?"
这通常有两种情况:
1. 使用了CDN服务:像Cloudflare提供的Flexible SSL模式,用户?CDN是加密的,但CDN?你的服务器仍是HTTP。这不是真正的端到端HTTPS。
2. 系统内置了私有CA:某些企业内网可能部署了私有CA并预装在员工设备上。对外部用户依然无效。
Nginx不配置证书的直接后果
如果强行在Nginx中不配置任何SSL相关指令就监听443端口:
listen 443;
缺少ssl参数
...
结果会是:
1. Nginx能正常启动监听443端口
2. 但客户端尝试HTTPS连接时会立即失败
3. curl测试会报错:`curl: (35) error:14004410:SSL routines:CONNECT_CR_SRVR_HELLO:sslv3 alert handshake failure`
HTTPS安全等级金字塔
不同方案的安全性和可信度比较:
[最高]
│
├── EV扩展验证证书 (显示公司名称)
├── OV组织验证证书
│
├── DV域名验证证书 (Let's Encrypt)
├── 自签名证书 (需手动信任)
└── [无证书] → 无法建立HTTPS连接
[最低]
实际应用建议
根据场景选择合适方案:
1. 本地开发环境
- 自签名证书即可
- Chrome中输入`thisisunsafe`可临时绕过警告
2. 个人博客/小型网站
- Let's Encrypt是最佳选择
```bash
Certbot自动续期检查
sudo certbot renew --dry-run
```
3. 企业级应用
- OV/EV证书提升可信度
- HSTS预加载防止SSL剥离攻击
```nginx
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
4. API服务
- MTLS双向认证增加安全性
```nginx
ssl_client_certificate /path/to/ca.crt;
ssl_verify_client on;
HTTPS的未来趋势
随着网络安全要求提高:
- HTTP/2强制要求HTTPS(虽然规范不强制,但所有浏览器实现都要求)
- Chrome已将HTTP页面标记为"不安全"
- PCI DSS等合规标准要求全站HTTPS
即使不考虑安全因素,从技术角度:
- HTTPS可启用更快的HTTP/2协议(多路复用、头部压缩)
- SEO排名中HTTPS是正面因素(Google明确表示)
Q&A常见问题解答
Q:内网系统是否也需要HTTPS?
A:需要!内网同样存在中间人攻击风险,"内网就安全"是危险认知。
Q:IP地址能否申请SSL证书?
A:常规CA不支持纯IP的DV认证。但你可以:
1) 使用自签名证书记录IP
2) Cloudflare等提供IP SSL服务
Q:单台服务器如何托管多个HTTPS站点?
A:SNI扩展允许同一IP服务多个域名:
```nginx
server_name site1.com;
ssl_certificate /path/to/site1.crt;
...
server {
server_name site2.com;
ssl_certificate /path/to/site2.crt;
...
来说,Nginx要实现真正的、被浏览器信任的HTTPS服务,必须配置有效可信的SSL/TLS数字凭证体系。Let's Encrypt的出现已极大降低了这一门槛——现在没有任何理由再使用纯HTTP服务了。
TAG:nginx没有证书能使用https吗,nginx ssl证书,nginx 证书,nginx没有configure如何编译,nginx没有权限,nginx配置cer证书