用户在网站配置SSL证书后无法访问是经常出现的问题,下面我写一下系统的排查步骤和解决方案:
一、基础检查
确认证书生效时间
使用 openssl x509 -in your_cert.crt -noout -dates 检查证书是否在有效期(Not Before / Not After)。
新证书可能需要 5-10分钟 生效(如Let's Encrypt)。
域名匹配验证
确保证书包含访问的域名:openssl x509 -in your_cert.crt -noout -text | grep DNS
主域名、www子域名需分开匹配(如需example.com和www.example.com)。
二、网络与端口检查
443端口连通性
bash
telnet yourdomain.com 443 若不通则需检查防火墙
nc -zv yourdomain.com 443 替代方案
云服务器:检查安全组是否开放443端口(AWS安全组、阿里云安全组等)。
本地防火墙:
bash
sudo ufw allow 443/tcp Ubuntu
sudo firewall-cmd --add-port=443/tcp --permanent CentOS
服务监听状态
bash
sudo netstat -tuln | grep 443 确认服务是否监听443
sudo ss -tuln | grep 443 现代替代命令
三、服务器配置诊断
Nginx 示例
nginx
server {
listen 443 ssl; 必须包含 ssl 参数
server_name example.com;
ssl_certificate /path/to/fullchain.pem; 证书链(证书+中间证书)
ssl_certificate_key /path/to/private.key; 私钥
其他配置...
}
关键点:
证书路径是否正确?权限是否为 600 或 644?
是否加载配置?sudo nginx -t 测试配置,sudo systemctl reload nginx 重载。
Apache 示例
apache
<VirtualHost *:443>
ServerName example.com
SSLEngine on
SSLCertificateFile /path/to/cert.pem
SSLCertificateKeyFile /path/to/private.key
SSLCertificateChainFile /path/to/chain.pem 中间证书(如需要)
</VirtualHost>
关键点:
启用 mod_ssl:sudo a2enmod ssl
检查错误日志:tail -f /var/log/apache2/error.log
四、证书链完整性验证
合并中间证书
bash
cat your_domain.crt intermediate.crt > fullchain.pem 合并证书链
通过 SSL Labs 测试证书链是否完整。
私钥匹配检查
bash
openssl x509 -noout -modulus -in cert.crt | openssl md5 证书MD5
openssl rsa -noout -modulus -in private.key | openssl md5 私钥MD5
两者MD5必须一致,否则重新生成CSR。
五、客户端错误分析
浏览器报错解码
NET::ERR_CERT_AUTHORITY_INVALID → 证书链缺失
ERR_SSL_VERSION_OR_CIPHER_MISMATCH → 服务器加密套件配置问题
NET::ERR_CERT_COMMON_NAME_INVALID → 域名不匹配
命令行深度测试
bash
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com
检查输出中的 Verify return code(0表示成功)和证书链层级。
六、进阶排查
HTTPS重定向循环
检查代码(如WordPress的wp-config.php中FORCE_SSL_ADMIN)和反向代理设置(如Nginx的proxy_set_header X-Forwarded-Proto $scheme;)。
混合内容阻塞 (Mixed Content)
浏览器控制台查看警告,将 http:// 资源替换为 // 或 https://。
SNI(服务器名称指示)问题
老旧客户端(如IE6/Android 2.3)不支持SNI,需独立IP或兼容方案。
七、快速排错流程图
访问失败-443端口开放-否配防火墙、安全组-证书链完整-否合并安全证书-是域名匹配-否重新申请证书-是检查加密套件兼容性。
八、补充工具
在线检测:
SSL Labs Server Test
Why No Padlock?(混合内容检测)
本地扫描:
testssl.sh yourdomain.com(全面TLS/SSL扫描)
最后建议:
若问题仍存在,请提供:
浏览器错误截图
Web服务器错误日志片段(如Nginx的error.log)
执行 openssl s_client 的输出结果
通过以上这些信息就能能精准定位问题根源,并解决回复网站正常。