当前位置: 首页 > web >正文

Nginx 配置 HTTPS 与证书格式全解析:支持后端代理验证

在现代网站部署中,HTTPS 是保障通信安全的关键技术。无论是为前端服务启用 HTTPS,还是反向代理 HTTPS 的后端接口,正确理解和配置证书在 Nginx 中尤为重要。

本文将阐述各种常见证书格式(.crt.pem.key.pfx 等)的区别与转换方法,详解 Nginx 如何配置 HTTPS,并介绍如何使用 proxy_ssl_trusted_certificate 实现安全的上游 HTTPS 验证。

一、常见证书格式与区别

格式类型说明
.crt / .pem公钥证书包含网站的公钥信息,PEM 编码(文本)
.key私钥文件与公钥配对的私钥,PEM 编码
.pfx / .p12证书包包含证书 + 私钥,二进制格式,常用于 Windows
.cer公钥证书通常为 DER 或 PEM 编码,需确认实际格式

✅ Nginx 支持哪种格式?

Nginx 仅支持 PEM 格式(即以 -----BEGIN CERTIFICATE----- 开头的文本文件)。因此,若为 .pfx/.p12 文件,必须转换为 .crt + .key 格式。

二、从 .pfx 转换为 .crt.key

# 提取证书(公钥)
openssl pkcs12 -in your-cert.pfx -clcerts -nokeys -out your-cert.crt# 提取私钥
openssl pkcs12 -in your-cert.pfx -nocerts -nodes -out your-cert.key# 提取中间证书(可选)
openssl pkcs12 -in your-cert.pfx -cacerts -nokeys -out chain.pem# 合并证书链(用于 fullchain.pem)
cat your-cert.crt chain.pem > fullchain.pem

三、Nginx 配置 HTTPS(标准服务端)

📁 目录结构建议

/etc/nginx/ssl/
├── fullchain.pem      # 包含证书 + 中间证书
├── privkey.pem        # 私钥

✅ Nginx 配置示例

server {listen 443 ssl http2;server_name www.example.com;ssl_certificate     /etc/nginx/ssl/fullchain.pem;ssl_certificate_key /etc/nginx/ssl/privkey.pem;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;ssl_session_tickets off;add_header Strict-Transport-Security "max-age=31536000" always;location / {proxy_pass http://localhost:8080;}
}

四、Nginx 强制 HTTP 跳转 HTTPS

server {listen 80;server_name www.example.com;return 301 https://$host$request_uri;
}

五、配置 Nginx 反向代理 HTTPS 上游服务

如果你要代理的是一个 HTTPS 的后端服务(比如 API 接口),建议启用后端证书验证,避免中间人攻击。

示例:代理到 https://api.backend.com

location /api/ {proxy_pass https://api.backend.com;proxy_ssl_verify on;  # 启用后端 HTTPS 验证proxy_ssl_verify_depth 2;proxy_ssl_trusted_certificate /etc/nginx/ssl/ca-chain.pem;proxy_ssl_name api.backend.com;
}

配置说明

指令作用
proxy_ssl_verify on启用 HTTPS 上游服务器证书校验
proxy_ssl_trusted_certificate指定受信任的 CA 根证书,用于验证上游证书
proxy_ssl_verify_depth验证证书链的最大层级(建议设为 2~3)
proxy_ssl_name显式指定用于 SNI 的主机名,确保与证书匹配

💡 ca-chain.pem 可包含多个中间证书和根证书,使用 cat root.crt intermediate.crt > ca-chain.pem 合成。


六、检查证书是否有效

# 查看证书有效期
openssl x509 -in your-cert.crt -noout -enddate# 验证证书链
openssl verify -CAfile ca-chain.pem your-cert.crt

七、常见问题排查

问题原因解决办法
Nginx 启动报 PEM lib 错误证书格式错误确保证书和私钥为 PEM 格式
浏览器提示“不受信任的证书”缺少中间证书合并证书链为 fullchain.pem
代理后端 HTTPS 时连接失败没启用 proxy_ssl_verify 或证书未配置检查上游证书与 ca-chain.pem 是否匹配

八、总结

场景推荐做法
部署 HTTPS 服务使用 ssl_certificate + ssl_certificate_key,建议使用 fullchain.pem
代理 HTTPS 后端使用 proxy_ssl_verify + proxy_ssl_trusted_certificate
拥有 .pfx 文件使用 openssl 转换为 .crt.key
多证书验证合并多个证书为 ca-chain.pem

示例完整配置:HTTPS + 上游代理

server {listen 443 ssl http2;server_name www.example.com;ssl_certificate     /etc/nginx/ssl/fullchain.pem;ssl_certificate_key /etc/nginx/ssl/privkey.pem;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;ssl_session_tickets off;add_header Strict-Transport-Security "max-age=31536000" always;location /api/ {proxy_pass https://api.backend.com;proxy_ssl_verify on;proxy_ssl_verify_depth 2;proxy_ssl_trusted_certificate /etc/nginx/ssl/ca-chain.pem;proxy_ssl_name api.backend.com;}
}

http://www.xdnf.cn/news/14024.html

相关文章:

  • 基于云计算的振动弦分析:谐波可视化与波动方程参数理解-AI云计算数值分析和代码验证
  • 计算机视觉之三维重建(深入浅出SfM与SLAM核心算法)—— 3. 单视几何
  • 从入门到精通:C# 中 AutoMapper 的深度解析与实战应用
  • 嵌入式PADS中元件封装绘制与实现
  • MySQL 8.0 OCP 英文题库解析(十八)
  • 使用 C/C++ 和 OpenCV DNN 进行人体姿态估计
  • 洛谷 蜜蜂路线 高精度
  • 图片去水印,图片变清晰,完成免费
  • Webpack:现代前端构建工具的核心解析
  • npm安装electron报错权限不足
  • 枫清科技携手中化信息挖掘实现AI高价值场景应用,打通智能化“最后一公里”
  • 音视频的前端知识
  • Google Chrome 书签导出
  • ffmpeg覆盖区域
  • AWS WebRTC:通过shell实现多进程启动master
  • ubuntu 拒绝ssh连接,连不上ssh,无法远程登录: Connection failed.
  • eBay自养号测评系统搭建需要解决哪些问题?
  • 一个模板元编程示例
  • 前端三剑客基础案例001
  • 05 - SimAM模块
  • Docker 下备份 Mariadb 数据库文件
  • [技术积累]成熟的前端和后端开发框架
  • 全新RA2L2 MCU超低功耗、支持CAN及USB-C、拓展工业及便携式应用
  • 洛谷 数楼梯 高精度
  • 【SystemVerilog 2023 Std】第5章 词法约定 Lexical conventions (2)
  • opencv 之 视频类 VideoCapture、VideoWriter详细介绍
  • RAD:通过基于大规模 3DGS 的强化学习训练端-到-端驾驶策略
  • 深度解析Linux用户生态:账户架构设计与系统运维实战技巧》
  • 服务器代码知识点补充
  • 【MV】上下文感知选择算法:基于关键词映射简单实现