温馨提示×

如何检查nginx SSL配置

小樊
39
2025-11-23 02:47:51
栏目: 云计算

检查 Nginx SSL 配置的实用流程


一 前置检查与语法验证

  • 确认服务与配置路径
    • 查看运行状态:sudo systemctl status nginx
    • 主配置常见路径:/etc/nginx/nginx.conf;站点配置常见路径:/etc/nginx/sites-available//etc/nginx/conf.d/(Debian/Ubuntu 多用 sites-available,CentOS/RHEL 多用 conf.d)
  • 语法与包含文件检查
    • 测试语法:sudo nginx -t
    • 如自定义了配置路径:sudo nginx -t -c /path/to/nginx.conf
  • 确认模块与版本
    • 是否编译了 SSL 模块:nginx -V 2>&1 | grep -o with-http_ssl_module(无输出则未启用 SSL 模块)
    • 查看版本:/usr/local/nginx/sbin/nginx -vnginx -v
  • 文件与权限
    • 证书与私钥路径在 server 块中应正确,例如:
      • ssl_certificate /etc/nginx/ssl/example.com.crt;
      • ssl_certificate_key /etc/nginx/ssl/example.com.key;
    • 权限建议:私钥 600,证书 644,属主 root:root
    • 证书链完整性:优先使用 fullchain.pem;若需手工合并:cat your_domain.crt intermediate.crt > combined.crt,并将 ssl_certificate 指向合并后的文件

二 证书与握手验证

  • 本机查看证书信息
    • 查看本地证书内容:openssl x509 -in /path/to/cert.crt -text -noout
  • 远程查看服务端证书链与握手
    • 查看服务端证书链:openssl s_client -connect example.com:443 -servername example.com -showcerts
    • 仅输出证书信息:openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -text
    • 指定协议测试(如 -tls1_2-tls1_3):openssl s_client -connect example.com:443 -tls1_3
  • 证书与私钥匹配性
    • 比较 modulus(应一致):
      • openssl x509 -noout -modulus -in server.crt | openssl md5
      • openssl rsa -noout -modulus -in server.key | openssl md5
  • 客户端连通与抓包
    • 详细握手过程:curl -v https://example.com
    • 协议探测:sslscan example.com
    • 抓包分析(定位握手/链问题):tcpdump -i any -nn port 443 -w ssl.pcap 或用 Wireshark 分析

三 安全与兼容性核查

  • 协议与套件基线
    • 推荐仅启用安全协议:ssl_protocols TLSv1.2 TLSv1.3;
    • 套件示例:ssl_ciphers HIGH:!aNULL:!MD5;
    • 优先服务器套件:ssl_prefer_server_ciphers on;
  • 证书链与顺序
    • 使用 fullchain.pem(服务器证书在前,中间证书在后);缺失中间证书会导致浏览器或客户端报“证书无效/链不完整”
  • 在线体检
    • 使用 SSL Labs 测试评分与兼容性(关注协议、套件、链、OCSP 等)
  • 进阶优化(可选)
    • 启用 HSTSadd_header Strict-Transport-Security “max-age=31536000; includeSubDomains” always;
    • 启用 OCSP Stapling 提升握手与验证效率

四 常见故障定位清单

  • 配置语法与服务状态
    • 先跑 sudo nginx -t,再 sudo systemctl reload nginx;查看错误日志:tail -f /var/log/nginx/error.log
  • 证书与密钥
    • 路径是否正确、文件是否存在;权限是否严格(私钥 600
    • 证书与私钥是否匹配(modulus 一致)
  • 证书链问题
    • 链不完整或顺序错误导致“无法构建信任链/CA 验证失败”;使用 -showcerts 检查链,或改用 fullchain.pem
  • 端口与防火墙
    • 确保 443/tcp 放行(如 ufw allow 443/tcp 或 firewalld/云安全组策略)
  • 安全策略与兼容性
    • 过时的协议/套件被禁用导致握手失败;按需调整 ssl_protocols/ssl_ciphers 并兼顾客户端兼容性
  • 访问控制与安全模块
    • 检查 SELinux/AppArmor 是否限制 Nginx 读取证书或绑定端口(如 sestatus

五 一键核查命令清单

  • 服务与语法
    • sudo systemctl status nginx
    • sudo nginx -t
  • 证书与链
    • openssl x509 -in /etc/nginx/ssl/example.com.crt -text -noout
    • cat your_domain.crt intermediate.crt > combined.crt
  • 远程与握手
    • openssl s_client -connect example.com:443 -servername example.com -showcerts
    • curl -v https://example.com
  • 端口与日志
    • ufw status 或相应防火墙规则检查
    • tail -n 50 /var/log/nginx/error.log

0