欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > Nginx 配置 HTTPS 与证书格式全解析:支持后端代理验证

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

2025/6/16 7:07:05 来源:https://blog.csdn.net/qq_36291550/article/details/148632038  浏览:    关键词: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;}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词