Apache与Node.js部署SSL证书后浏览器显示“不安全”问题求助
浏览器显示“不安全”的核心原因是:React前端直接向ip_of_appserver:8000发起请求——要么是未加密的HTTP协议,要么是用IP访问不符合你持有的*.domain.com通配符SSL证书的验证规则(通配符证书仅对xxx.domain.com这类子域名有效,IP地址不在证书覆盖范围内)。
1. 扩展Apache反向代理配置,接管后端请求
不要让前端直接访问应用服务器的IP端口,通过Web服务器的域名统一转发所有请求。修改你的httpd.conf中的VirtualHost配置,新增Node.js后端的代理规则:
<VirtualHost *:443> ServerName domain.co.in SSLEngine on SSLCertificateFile /etc/httpd/conf/main_corpo.crt SSLCertificateKeyFile /etc/httpd/conf/corpo_uat.key SSLCertificateChainFile /etc/httpd/conf/chain_corpo.crt SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCompression off SSLSessionTickets off # Security headers Header always set X-Frame-Options "SAMEORIGIN" Header always set X-XSS-Protection "1; mode=block" Header always set X-Content-Type-Options "nosniff" # 代理React前端(3000端口) ProxyPass "/" "http://ip:3000/" ProxyPassReverse "/" "http://ip:3000/" # 新增:代理Node.js后端(8000端口),映射到域名的/api路径 ProxyPass "/api" "http://ip:8000/" ProxyPassReverse "/api" "http://ip:8000/" </VirtualHost>
这样所有后端请求都会通过https://domain.co.in/api路径转发,全程走HTTPS加密通道。
2. 修改React前端的API请求地址
将前端代码中所有指向ip_of_appserver:8000的请求地址,替换为相对路径/api或者完整的https://domain.co.in/api,确保所有请求都经过Web服务器的代理。
3. 简化Node.js服务配置(可选)
现在所有请求都通过Apache的HTTPS代理转发到Node.js的HTTP服务,Node.js无需再单独配置SSL,直接以HTTP模式运行即可。这能避免证书配置不一致的问题,同时简化架构。
4. 确认证书覆盖范围
检查你的*.domain.com通配符证书,确保domain.co.in在证书的有效域名列表中(若证书是*.domain.com,则domain.co.in不在覆盖范围内,需要申请包含该域名的证书)。
5. 重启服务并测试
修改配置后,重启Apache服务:
sudo systemctl restart httpd
清除浏览器缓存后,重新访问https://domain.co.in,检查浏览器安全面板是否还有不安全来源提示。
内容的提问来源于stack exchange,提问作者Amit Pandey

