文档中心
Nginx閰嶇疆SSL璇佷功鎶?00閿欒锛?涓父瑙佸師鍥犲強瑙e喅鏂规璇﹁В
时间 : 2025-09-27 16:27:48浏览量 : 3

****
当你兴冲冲地为网站配置HTTPS,却在Nginx中遇到“400 Bad Request”错误时,是不是瞬间头大?别慌!会用最直白的语言+实际案例,带你快速定位问题根源。作为网络安全从业者,我见过太多SSL配置的“翻车现场”,下面这些坑你可能也踩过。
一、为什么Nginx配SSL会报400?
400错误本质是客户端(浏览器)的请求不符合服务器(Nginx)的规则。在SSL场景下,往往是因为证书或协议配置不当,导致浏览器和Nginx“握手失败”。
举个栗子??:
就像你拿着过期的会员卡进健身房,前台(Nginx)一看卡片无效,直接拒绝(返回400),根本不会让你进门(建立HTTPS连接)。
二、5个高频错误原因+解决方案
1. 证书链不完整(最常见!)
- 现象:浏览器访问时报400,Nginx日志显示 `SSL_do_handshake() failed`。
- 原因:缺少中间证书(Intermediate CA),浏览器无法验证证书信任链。
- 检查方法:用在线工具 [SSL Labs](https://www.ssllabs.com/ssltest/) 测试,如果提示“Chain Incomplete”就是这个问题。
- 解决方案:
```nginx
ssl_certificate /path/to/fullchain.pem;
包含域名证书+中间证书的文件
ssl_certificate_key /path/to/private.key;
```
> ?正确示范:`fullchain.pem` = 你的证书 + 中间证书(按顺序拼接)
2. SSL协议版本冲突
- 现象:老版本浏览器(如IE6)访问时报400。
- 原因:Nginx配置了过高版本的TLS(如仅允许TLS1.3),但客户端不支持。
- 解决方案:兼容性配置建议:
ssl_protocols TLSv1.2 TLSv1.3;
禁用不安全的TLS1.0/1.1
ssl_prefer_server_ciphers on;
3. 证书与域名不匹配
- 现象:用`https://www.example.com`访问时正常,但`https://example.com`报400。
- 原因:证书未覆盖所有变体域名(缺少SAN扩展)。
- 检查命令:
```bash
openssl x509 -in certificate.crt -text | grep DNS
- ?正确做法:申请证书时包含所有需要的域名(如主域+www子域)。
4. Nginx监听端口冲突
- 现象: `curl -I https://example.com`返回400,但HTTP正常。
- 原因: Nginx可能未正确监听443端口或与其它服务冲突。
- 检查步骤:
1?? `netstat -tulnp | grep 443` (查看谁占用了443端口)
2?? Nginx配置中必须有:
```nginx
server {
listen 443 ssl;
←关键!缺少ssl会导致400
server_name example.com;
...其他SSL配置...
}
```
5. HTTP请求误发到HTTPS端口
- 现象: Nginx日志中出现 `client sent plain HTTP to HTTPS port`。
- 原因:用户直接用HTTP协议访问了443端口(比如手动输入了http://example.com:443)。
- ?解决方案:强制HTTP跳转HTTPS:
```nginx
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
自动跳转HTTPS
}
```
三、高级排查技巧
如果以上方法无效,试试这些“侦探手段”:
1. ??查看详细错误日志:
```nginx
error_log /var/log/nginx/error.log debug;
临时开启debug模式
```
常见关键字: `SSL_do_handshake()`、`no suitable signature algorithm`
2. ???用OpenSSL模拟测试:
```bash
openssl s_client -connect example.com:443 -servername example.com -showcerts
输出中看到 `Verify return code:0 (ok)`才表示成功。
四、表格速查
|问题类型|典型表现|快速修复|
||||
|证书链缺失|SSL Labs显示Chain Incomplete|合并中间证书到fullchain.pem|
|协议不支持|旧浏览器无法访问|添加TLSv1.2兼容|
|域名不匹配|部分子域报错|重新申请多域名/SAN证书|
|端口冲突|443被占用|停用冲突服务(如Apache)|
|HTTP误请求|日志明确提示plain HTTP|80端口强制跳转|
??安全小贴士:完成配置后一定要用[ImmuniWeb](https://www.immuniweb.com/ssl/)等工具做全面扫描,避免遗漏混合内容(Mixed Content)等风险!
TAG:nginx配置ssl证书400,nginx ssl pem,nginx配置ssl证书浏览器受信任,nginx配置ssl证书失效 出现默认页面,nginx配置ssl证书 windows,nginx配置ssl证书无效