用户在网站配置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 的输出结果

通过以上这些信息就能能精准定位问题根源,并解决回复网站正常。