档案网站建设视频,电脑上如何做网站宣传,做企业网站联系,问答社交网站开发在现代网站部署中#xff0c;HTTPS 是保障通信安全的关键技术。无论是为前端服务启用 HTTPS#xff0c;还是反向代理 HTTPS 的后端接口#xff0c;正确理解和配置证书在 Nginx 中尤为重要。
本文将阐述各种常见证书格式#xff08;.crt、.pem、.key、.pfx 等#xff09;的…在现代网站部署中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-age31536000 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~3proxy_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-age31536000 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;}
}