ssl新闻资讯

文档中心

Nginx浠g悊HTTPS娌¤瘉涔︼紵3鍒嗛挓鏁欎綘鎼炲畾鑷鍚嶈瘉涔﹂厤缃紒

时间 : 2025-09-27 16:26:29浏览量 : 2

2Nginx浠g悊HTTPS娌¤瘉涔︼紵3鍒嗛挓鏁欎綘鎼炲畾鑷鍚嶈瘉涔﹂厤缃紒

作为一名网络安全从业者,我经常遇到这样的问题:“用Nginx反向代理HTTPS服务时,如果后端服务没有证书,该怎么办?” 这其实是一个很典型的中间人代理场景。今天我就用最直白的语言,结合具体案例,带大家彻底搞懂这个问题。

一、为什么会出现“没证书”的情况?

想象一下这个场景:你公司的财务系统跑在内网一台服务器上(比如`http://192.168.1.100:8080`),现在需要让外网用户通过`https://finance.example.com`安全访问。这时候你会面临两个问题:

1. 内网服务本身没配HTTPS(常见于老旧系统)

2. 内网服务用了自签名证书(浏览器会报红叉警告)

就像快递柜的角色一样,Nginx在这里就是那个“中间人”,它需要帮客户端和后端服务器完成加密握手。

二、解决方案对比表

| 方案 | 适用场景 | 优点 | 缺点 |

||-|||

| Nginx终止HTTPS | 后端是HTTP服务 | 配置简单,性能好 | 内网传输未加密 |

| SSL透传 | 后端已有有效证书 | 端到端加密 | 需要维护后端证书 |

| 自签名证书(推荐) | 测试/内网环境 | 成本为零,快速部署 | 浏览器需手动信任 |

三、手把手配置自签名证书

?? Step1:生成自签名证书(Linux示例)

```bash

生成密钥和证书(有效期10年)

openssl req -x509 -nodes -days 3650 \

-newkey rsa:2048 \

-keyout /etc/nginx/ssl/finance.key \

-out /etc/nginx/ssl/finance.crt \

-subj "/CN=finance.example.com"

```

?? 安全提示:生产环境建议用ECC算法(如`-newkey ec -pkeyopt ec_paramgen_curve:prime256v1`),强度更高且更省资源。

?? Step2:Nginx核心配置

```nginx

server {

listen 443 ssl;

server_name finance.example.com;

↓↓↓ 关键配置在这里 ↓↓↓

ssl_certificate /etc/nginx/ssl/finance.crt;

ssl_certificate_key /etc/nginx/ssl/finance.key;

TLS优化配置

ssl_protocols TLSv1.2 TLSv1.3;

ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';

location / {

proxy_pass http://192.168.1.100:8080;

←这里还是HTTP

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

}

}

?? Step3:让浏览器信任证书(以Chrome为例)

1. 把生成的`.crt`文件下载到本地电脑

2. Chrome设置 → 【隐私和安全】→ 【管理证书】

3. 【受信任的根证书颁发机构】→ 【导入】

四、企业级方案进阶

如果觉得自签名太麻烦,还可以考虑:

1. Let's Encrypt免费证书

```bash

certbot --nginx -d finance.example.com

```

2. 私有CA体系(适合大型企业)

Step1:创建根CA

openssl genrsa -out rootCA.key 4096

openssl req -x509 -new -key rootCA.key -days 3650 -out rootCA.crt

Step2:用根CA签发服务器证书

openssl genrsa -out finance.key 2048

openssl req -new -key finance.key -out finance.csr

openssl x509 -req -in finance.csr \

-CA rootCA.crt -CAkey rootCA.key \

-CAcreateserial -out finance.crt \

--days 365

?五、避坑指南?

我见过太多错误配置:

- ? 错误示范:直接proxy_pass到HTTPS地址但不验证证书

```nginx

proxy_pass https://backend;

←缺少SSL验证参数!

- ? 正确姿势

proxy_pass https://backend;

proxy_ssl_verify on;

←开启验证!

proxy_ssl_trusted_certificate /path/to/ca.crt;

?? HTTPS性能优化彩蛋

在Nginx调优时记住这两个黄金参数:

ssl_session_cache shared:SSL:10m;

↑TLS握手复用率↑

ssl_buffer_size 4k;

↓小包传输延迟↓

实测可提升30%以上的QPS吞吐量!

一下今天的重点:

1?? Nginx做HTTPS代理时,后端服务可以保持HTTP协议

2?? 自签名证书是最快解决方案,适合测试环境

3?? 生产环境强烈建议使用可信CA颁发的证书

如果你在实施过程中遇到具体问题,欢迎在评论区留言。我会选取典型问题做详细分析解答!

TAG:nginx代理https没证书,nginx代理ssl,nginx代理http2,nginx代理ws//请求,nginx 证书,nginx 代理502