You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx与ShinyProxy的SSL配置问题(疑似密钥异常)

问题排查:Nginx反向代理下HTTPS安全锁不显示问题

环境与架构

  • 系统:Ubuntu 22.04 LTS
  • 访问链路:客户端浏览器 > Nginx > ShinyProxy > Docker
  • 端口配置:ShinyProxy监听8080端口,Nginx将80端口请求重定向至443 HTTPS端口

问题现象

系统中多个Web应用运行正常,但即使Web应用未启动、显示Nginx原生404/502错误页时,HTTPS仍无法显示安全锁标识,浏览器地址栏显示红色删除线。

已配置内容

Nginx配置(已通过ln -s将sites-available配置链接至sites-enabled)

server {
  listen                80;
  server_name           ourwebserverurl;
  rewrite     ^(.*)     https://$server_name$1 permanent;
}

server {
  listen                443 ssl;
  server_name           ourwebserverurl;
  access_log            /var/log/nginx/shinyproxy.access.log;
  error_log             /var/log/nginx/shinyproxy.error.log error;

  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

  ssl_certificate       /etc/ssl/certs/ourwebserverurl.crt;
  ssl_certificate_key   /etc/ssl/private/ourwebserverurl.key;

   location / {
       proxy_pass          http://127.0.0.1:8080/;

       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
       proxy_read_timeout 600s;

       proxy_redirect    off;
       proxy_set_header  Host              $http_host;
       proxy_set_header  X-Real-IP         $remote_addr;
       proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
       proxy_set_header  X-Forwarded-Proto $scheme;
     }
}

证书与密钥生成流程

  • 初始生成命令:openssl req -sha256 -newkey rsa:2048 -keyout ourserverurl.key.enc -out ourserverurl.csr,生成加密PEM密钥和CSR文件
  • 将CSR提交至GlobalSign获取服务器证书
  • ssl_certificate指定的是按「服务器证书>中间证书>根证书」顺序拼接的证书链文件,经SSL检测工具验证无链问题
  • ssl_certificate_key使用解密后的PEM格式密钥(尝试过.key和.pem扩展名均无效)

已完成排查操作

  • 联系GlobalSign确认证书齐全
  • Nginx配置测试:sudo nginx -t 显示无语法错误
  • 防火墙已开放IPv4和IPv6的80、443端口

针对性排查建议

  1. 更新SSL协议与加密套件配置
    当前ssl_protocols包含已废弃的TLSv1、TLSv1.1,建议仅保留安全协议:

    ssl_protocols TLSv1.2 TLSv1.3;
    

    同时添加现代加密套件:

    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    
  2. 验证密钥与证书的匹配性
    执行以下命令检查私钥和证书是否配对:

    openssl x509 -noout -modulus -in /etc/ssl/certs/ourwebserverurl.crt | openssl md5
    openssl rsa -noout -modulus -in /etc/ssl/private/ourwebserverurl.key | openssl md5
    

    两个输出的MD5值必须完全一致,否则说明密钥与证书不匹配。

  3. 检查证书与密钥文件权限
    Nginx运行用户(通常为www-data)需要具备密钥文件的读取权限:

    sudo chown root:www-data /etc/ssl/private/ourwebserverurl.key
    sudo chmod 640 /etc/ssl/private/ourwebserverurl.key
    

    证书文件设置为通用可读权限即可:

    sudo chmod 644 /etc/ssl/certs/ourwebserverurl.crt
    
  4. 确认Nginx加载正确配置并重启
    重启Nginx确保配置生效:

    sudo systemctl restart nginx
    

    查看Nginx主配置文件路径,确认sites-enabled目录被包含:

    nginx -V 2>&1 | grep -o 'conf-path=[^ ]*'
    
  5. 浏览器端定位具体错误

    • 打开浏览器开发者工具(F12),切换到「安全」标签页,查看证书错误的具体描述(如域名不匹配、证书过期、链不完整等)
    • 使用无痕模式访问,排除浏览器缓存干扰
  6. 通过openssl验证SSL连接
    执行命令测试SSL连接细节:

    openssl s_client -connect ourwebserverurl:443 -servername ourwebserverurl
    

    查看输出中的Verify return code,若返回0则验证成功,非0值对应具体错误码排查。

内容的提问来源于stack exchange,提问作者Lane O'Brien

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 07:30:52