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端口
针对性排查建议
更新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;验证密钥与证书的匹配性
执行以下命令检查私钥和证书是否配对: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值必须完全一致,否则说明密钥与证书不匹配。
检查证书与密钥文件权限
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确认Nginx加载正确配置并重启
重启Nginx确保配置生效:sudo systemctl restart nginx查看Nginx主配置文件路径,确认sites-enabled目录被包含:
nginx -V 2>&1 | grep -o 'conf-path=[^ ]*'浏览器端定位具体错误
- 打开浏览器开发者工具(F12),切换到「安全」标签页,查看证书错误的具体描述(如域名不匹配、证书过期、链不完整等)
- 使用无痕模式访问,排除浏览器缓存干扰
通过openssl验证SSL连接
执行命令测试SSL连接细节:openssl s_client -connect ourwebserverurl:443 -servername ourwebserverurl查看输出中的
Verify return code,若返回0则验证成功,非0值对应具体错误码排查。
内容的提问来源于stack exchange,提问作者Lane O'Brien
相关产品推荐
相关产品推荐

