SSL证书部署故障排查指南

更新时间:
复制 MD 格式

本文旨在帮助您在手动部署SSL证书后未生效或网站显示不安全时,按照手动部署流程逐个排查,帮助您发现并解决部署失败的问题。

确认部署状态

排查前,先确认 SSL 证书是否已部署成功:

  • 访问 HTTPS 域名,如果地址栏显示安全锁标志,说明证书已生效。

  • SSL证书管理页面查看已部署列,确认云产品部署状态。云产品部署功能支持 SLB、CDN、WAF 等云产品,不包含 ECS。

  • ECS 服务器操作系统层面没有 SSL 证书部署状态标识,这是正常现象。

排查步骤

检查是否已通过工信部ICP备案

您可以通过阿里云网络诊断工具查看网站是否已备案。如果网站已备案,诊断结果中的备案检查会显示网站已备案,并附带 Ping 检查等连通性检测结果。

如果您的网站未通过工信部ICP备案,请先完成备案流程:

  • 如果您使用的是阿里ICP云备案系统,请前往阿里云备案系统进行网站备案。具体操作,请参见ICP备案流程
  • 如果您使用的不是阿里云ICP备案系统,请前往您备案服务商的系统进行网站备案。

检查服务器443端口是否放行

阿里云ECS服务器

请前往ECS管理控制台安全组页面,确认入方向规则中已放行443端口。关于如何配置安全组,请参见管理安全组

需确认存在以下安全组规则:

  • 方向:入方向
  • 授权策略:允许
  • 协议类型:自定义 TCP
  • 端口范围:目的: 443/443
  • 授权对象:源: 所有 IPv4 (0.0.0.0/0)(或您允许的客户端 IP 段)

接入Web应用防火墙(WAF)

如果已接入WAF,请检查服务器自身的防火墙设置,确保未阻止外部对443端口的访问:

  1. 登录Web应用防火墙3.0控制台。在顶部菜单栏,选择WAF实例的资源组和地域(中国内地非中国内地

  2. 在左侧导航栏,单击接入管理

  3. CNAME接入页签,检查是否允许外部对443端口的访问。

    在域名/CNAME 列表中,确认目标域名的端口列已包含 HTTPS: 443

检查是否使用了 CDN 或 WAF 等 7 层代理服务

如果域名接入了 CDN 或 WAF 等 7 层代理服务,SSL 证书需要同时配置到 CDN 服务上,不能仅部署在源站,否则经 CDN 加速访问时仍会失败。

  • 在 CDN 控制台的证书服务页面,为加速域名配置 HTTPS 证书。

  • 主域名需要在 CDN 控制台添加加速域名,获取专属 CNAME,不能直接使用 www 子域名的 CNAME。

  • 如果配置 CDN 后访问出现 502 错误,请在 CDN 的回源配置中开启回源 SNI,并将其设置为与回源 HOST一致,同时将回源协议设置为跟随

检查Web服务器配置文件

  • 检查配置文件中的证书文件路径是否正确。确保配置文件中指定的证书路径和文件名与服务器上实际存放的位置完全一致。以下是Nginx的配置示例:

    server {
        listen 443 ssl;
        server_name example.com;
    
        # 请将以下路径替换为您自己的SSL证书和私钥文件路径
        ssl_certificate /etc/nginx/ssl/example.com.crt;
        ssl_certificate_key /etc/nginx/ssl/example.com.key;
    
        # 其他配置...
    }
  • 确认配置文件修改后已正确保存。

  • 部分Web服务器(如NginxApache)修改配置后需要重启服务才能生效:

    • 重启Nginx服务:

      sudo nginx -s reload
    • 重启Apache服务:

      sudo systemctl restart httpd

检查证书的有效性

  • 检查证书是否在有效期内:

    1. 登录数字证书管理服务控制台

    2. 在左侧导航栏,选择证书管理 > SSL证书管理

    3. SSL证书管理页面,定位到您部署的证书,检查是否过期。

      如果证书已过期,请及时续费。具体操作,请参见SSL证书续费及到期处理

      您可在有效期限列查看证书的套餐时长(如 12 个月)和到期日期(如 2025-12-12),据此判断是否需要续费。

  • 检查证书的状态是否为已签发,以及绑定域名是否正确。

    其中状态列应显示已签发(带绿色对勾),绑定域名列需与您实际部署的域名一致(可包含主域名及 www 子域名)。

  • 确保证书已正确安装,包括:已将证书文件放置在正确的目录,已在Web服务器(如Nginx、Apache等)配置文件中完成证书配置等。

  • 如果您使用的是自签名证书,请确认当前浏览器已信任该证书。以下以Chrome浏览器为例说明如何确认:

    1. 在浏览器中打开使用自签名证书的网站。

    2. 单击地址栏的image图标:

      • 如果浏览器已信任该证书,地址栏左侧不会显示警告标志。
      • 如果浏览器不信任该证书,地址栏左侧会出现红色的image警告图标。

      单击警告图标后,会弹出您与此网站之间建立的连接不安全的提示,提醒您不要在该站点输入密码、信用卡号等敏感信息。

    3. 查看证书详细信息:在证书信息窗口中查看详细信息,如果浏览器不信任该证书,会显示相关警告。

  • 如果您使用的是非自签名证书,请确认证书由受信任的CA(证书颁发机构)颁发,否则浏览器可能因不信任该证书而阻止连接。以下以Chrome浏览器为例说明如何确认:

    • 查看证书信息:

      1. 单击地址栏左侧的image图标。

      2. 单击连接是安全的查看连接详情。

      3. 单击证书(有效)或类似选项。如果证书由受信任的CA颁发,浏览器会显示证书有效且没有警告。

        在弹出的安全信息卡片中,卡片底部会出现证书有效入口,单击该入口可进一步查看证书详情。

    • 查看颁发者信息:在弹出的证书信息窗口中,查找"颁发者"字段,确认颁发者的公用名(CN)、组织名(O)等信息中是否包含知名CA名称。

      详细信息页签的证书层次结构区域,可看到完整的证书链(例如 GlobalSign Root CAGlobalSign Organization Validation CA - SHA256 - G3\*.aliyun.com)。顶层节点即为颁发者公用名(CN),由此可确认是否包含知名CA。

验证域名是否解析正确

  • 验证DNS记录是否指向正确的IP地址,特别是最近更换过主机或IP地址时。

    1. 登录云解析DNS产品控制台

    2. 权威域名解析页面的权威域名页签下,单击目标域名进入解析设置页面。

    3. 解析设置页面,单击添加记录按钮。查看记录值是否与您的IP地址匹配;如果不匹配,请单击修改按钮进行修改。

  • 如果最近更改了域名解析设置,解析结果可能存在延迟。您可以清除本地DNS缓存后重试,或等待一段时间后自动生效。

    以下是在不同操作系统中清除本地DNS缓存的操作方法:

    Windows

    1. 按下Win + R键,输入cmd,然后按Enter键打开命令提示符。

    2. 在命令提示符中输入以下命令后按Enter键:

      ipconfig /flushdns
    3. 出现"已成功刷新 DNS 解析缓存。"提示即表示清除成功。

    macOS

    1. 打开终端:

      按下Command + Space键打开Spotlight搜索,输入"Terminal"并打开终端。

    2. 在终端中输入以下命令清除DNS缓存后按Enter键:

      # dscacheutil 是与系统缓存服务交互的命令行工具
      sudo dscacheutil -flushcache
    3. 输入以下命令发送HUP信号重启mDNSResponder进程,确保缓存被完全刷新:

      # mDNSResponder 是负责 DNS 服务的后台进程
      sudo killall -HUP mDNSResponder
    4. 如果没有出现任何报错信息,则表示命令执行成功。

    说明

    操作过程中可能会提示输入管理员密码,输入后直接按Enter键即可。

    Linux

    Linux系统上,清除本地DNS缓存的方法取决于系统使用的DNS缓存服务。以下是常见DNS缓存服务及其清除缓存的方法:

    • systemd-resolved

      如果您的Linux系统使用systemd-resolved来管理DNS缓存,可以通过以下命令清除:

      sudo systemd-resolve --flush-caches
    • nscd(Name Service Cache Daemon)

      如果您的系统使用nscd来管理DNS缓存,可以通过重启nscd服务来清除:

      sudo service nscd restart

      或者:

      sudo systemctl restart nscd
    • dnsmasq

      如果您的系统使用dnsmasq来管理DNS缓存,可以通过重启dnsmasq服务来清除:

      sudo service dnsmasq restart

      或者:

      sudo systemctl restart dnsmasq
    • BIND(Berkeley Internet Name Domain)

      如果您的系统使用BIND来管理DNS缓存,可以通过以下命令清除:

      sudo rndc flush
    • NetworkManager

      某些Linux发行版使用NetworkManager来管理网络设置(包括DNS缓存),可以通过重启该服务来清除:

      sudo service network-manager restart

      或者:

      sudo systemctl restart NetworkManager
    说明

    根据您系统中使用的DNS缓存服务选择相应的命令。执行这些命令通常需要管理员权限,因此需要在命令前添加sudo。清除DNS缓存后,系统将从DNS服务器获取最新的域名解析信息。

清理浏览器缓存

浏览器可能会缓存旧的SSL证书信息,导致您看到的是旧的证书状态。请清理浏览器缓存后重新访问您的网站。

您也可以尝试在无痕模式下访问网站以绕过缓存:

  • Chrome浏览器:单击右上角菜单,选择打开新的无痕式窗口(快捷键 Ctrl+Shift+N)。
  • Edge浏览器:单击右上角菜单,选择新建InPrivate窗口(快捷键 Ctrl+Shift+N)。

验证证书链是否完整

您需要确保整个证书链是完整的,包括中间证书(Intermediate Certificate)和根证书(Root Certificate)。浏览器需要验证从根证书到服务器证书的完整信任链,如果证书链不完整,浏览器将无法信任该证书。

说明
  • 根证书是证书信任链的起始,用于验证由该CA签发的所有下级证书的真实性。对于由受信任的CA签发的SSL证书,其根证书已预安装至主流Web浏览器(Google Chrome、Mozilla Firefox、Microsoft Edge等)或操作系统(Windows、macOS、AndroidiOS移动平台等)。但是对于未预埋根证书的客户端(App、Java客户端、旧版本浏览器、IoT设备等),您需要手动下载与服务器证书类型一致的根证书,并安装到对应的客户端,确保客户端与服务器建立HTTPS安全连接。选择与您的SSL证书类型一致的根证书进行手动下载,请参见下载和安装根证书

  • 中间证书位于根证书和用户实体证书(如SSL证书)之间,由上级CA颁发给下级CA。在阿里云的数字证书管理服务中,下载的PEM文件已包含服务器证书和中间证书。私钥(KEY文件)与服务器证书配对,以确保HTTPS通信的安全。使用中间证书有助于降低根证书直接签发SSL证书的风险——若根证书需撤销,由根证书直接签名的所有证书将失去信任,而通过中间证书签发的证书可通过撤销中间证书的方式来管理,无需影响根证书。下载中间证书,请参见下载SSL证书

证书链合并

证书链缺失是导致SSL证书验证失效的重要原因之一。通常情况下,PC端浏览器可以通过Authority Info Access(AIA)的URL链接自动获取中间证书,但部分Android系统浏览器不支持此机制,导致证书不可信或无法访问。

此时您需要将证书链文件按以下SSL证书链结构合并为一个文件并重新部署到服务器,浏览器在与服务器连接时将自动下载用户证书和中间证书,从而显示为可信证书:

-----BEGIN CERTIFICATE-----
网站证书
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
CA 中间证书机构
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
CA 根证书机构
-----END CERTIFICATE-----
说明

SSL证书链结构一般为:网站证书CA中间证书机构CA根证书机构,中间证书可能存在多层关系。

如何查看SSL证书链

以下以Chrome浏览器为例:

  1. 在浏览器地址栏单击image图标,在弹出的信息卡片中单击连接是安全的。

  2. 在弹出的连接是安全的信息窗口中,单击证书有效。

  3. 单击详细信息,查看证书层次结构,即可查看SSL证书链。

    详细信息页签的证书层次结构区域,可看到完整的证书链(例如 GlobalSign Root CAGlobalSign Organization Validation CA - SHA256 - G3\*.aliyun.com)。

如何补全证书链

  • 如果证书是通过阿里云申请的,请直接重新下载证书文件,其中已包含完整的证书链。

  • Windows上手动打开证书文件,找到中间证书并将其导出为Base64格式,然后将导出的内容追加到原证书文件中。

确认私钥的正确性

请确保上传到Web服务器的证书和私钥是匹配的,并且格式正确。

私钥在生成CSR(Certificate Signing Request)时创建,必须与证书配套使用。以下以Linux系统为例,指导您如何验证私钥是否与证书匹配:

  1. 登录云服务器,使用以下命令进入证书的安装目录:

    # 其中 / 为根目录,ssl 路径仅为示例,具体位置请根据实际证书安装目录确定
    cd /ssl
  2. 查看证书的公钥信息并获取其MD5值:

    # 请将 your_certificate.pem 替换为云服务器证书目录下的 PEM 文件
    sudo openssl x509 -in your_certificate.pem -noout -pubkey | openssl md5
  3. 查看私钥文件中的公钥信息并获取其MD5值:

    # 请将 your_private_key.key 替换为云服务器证书目录下的私钥文件
    sudo openssl rsa -in your_private_key.key -pubout | openssl md5
  4. 比较两个命令输出的MD5值。如果相同,则说明私钥与证书匹配:

    [root@~]# cd /ssl
    [root@ ssl]# sudo openssl x509 -in your_certificate.pem -noout -pubkey | openssl md5
    (stdin)= a54fa7a0a04ee0a049d4f69f6ac3dfea
    [root@ ssl]# sudo openssl rsa -in your_private_key.key -pubout | openssl md5
    writing RSA key
    (stdin)= a54fa7a0a04ee0a049d4f69f6ac3dfea

如果私钥丢失或损坏,您需要重新生成私钥并申请新的证书。

检查浏览器兼容性

确保证书格式和加密套件与主流浏览器兼容,可参考以下建议:

  • 使用受信任的CA:选择受信任的证书颁发机构(CA)来颁发SSL/TLS证书。主流浏览器会自动信任这些CA颁发的证书。

  • 使用正确的证书格式

    • 确保您的证书采用X.509格式(SSL/TLS证书的标准格式)。您可以使用以下命令来检查证书格式:

      # 请根据实际安装路径替换 /ssl/your_certificate.pem
      sudo openssl x509 -in /ssl/your_certificate.pem -text -noout

      如果证书为X.509格式,该命令会输出证书的详细信息,包括版本、序列号、签名算法、颁发者、有效期、公钥信息等。示例输出:

      Certificate:
          Data:
              Version: 3 (0x2)
              Serial Number:
                   01:23:45:67:89:ab:cd:ef:01:23:45:67:89:ab:cd:ef
              Signature Algorithm: sha256WithRSAEncryption
              Issuer: C = US, O = DigiCert Inc
              Validity
                  Not Before: Jan 17 00:00:00 2025 GMT
                  Not After : Jan 17 23:59:59 2026 GMT
              Subject: CN = example.com
              Subject Public Key Info:
                  Public Key Algorithm: rsaEncryption
                      RSA Public-Key: (2048 bit)
                      ......

      如果命令成功执行并显示上述详细信息,则说明证书为X.509格式。

    • 使用PEM格式(通常为.crt.pem文件)保存证书和中间证书链。

  • 使用现代加密套件

    • 配置服务器使用TLS 1.2TLS 1.3等现代加密套件,以获得更好的安全性和兼容性。

    • 停用不安全的协议和加密算法,如SSL 2.0/3.0、TLS 1.0/1.1、RC43DES。

建议在多个主流浏览器和设备上测试HTTPS连接情况。

确保证书文件目录具有正确的读取权限

确保存放证书文件的目录具有正确的读取权限,以便Web服务器能够正常访问这些文件。

以下以Linux为例,指导您检查和调整证书文件目录的权限:

  1. 使用ls -ld命令查看目录权限:

    # 请根据实际安装路径替换示例路径 /ssl
    sudo ls -ld /ssl

    输出示例:

    drwxr-xr-x 2 root root 4096 Jan 17 13:52 /ssl
    说明

    权限字段(如drwxr-xr-x)的含义:

    • 第一个字符d表示这是一个目录。

    • 接下来的三个字符rwx表示所有者的权限:读(r)、写(w)、执行(x)。

    • 中间三个字符r-x表示同组用户的权限:读(r)和执行(x)。

    • 最后三个字符r-x表示其他用户的权限:读(r)和执行(x)。

  2. 确认权限是否适当:

    • 读取权限:确保相关用户或服务对目录具有读(r)权限。

    • 执行权限:对于目录,执行(x)权限允许用户进入目录(即使用cd命令切换至该目录)。

  3. (可选)修改权限:

    如果需要更改权限,可以使用chmod命令:

    # 请根据实际安装路径替换示例路径 /ssl
    sudo chmod 750 /ssl
    说明

    750权限表示:

    • 所有者具有读、写和执行权限。

    • 同组用户具有读和执行权限。

    • 其他用户没有权限。

通过这些步骤,您可以确认并调整Linux服务器上证书文件目录的读取权限,以确保安全性和可访问性。

说明

不同网站的代码实现逻辑可能存在差异,建议您查阅Web服务器和应用程序的日志文件,查找与SSL相关的错误信息以定位问题。如仍有疑问,请联系产品技术专家进行咨询,详情请参见专家一对一服务

常见问题

替换旧 SSL 证书的操作是否会导致业务中断?

替换旧证书的操作本身不会直接导致业务中断。但在部署新证书后,通常需要重启 Web 服务或应用才能使新证书生效,重启过程可能会导致短暂的业务中断。建议您在业务低峰期进行操作,并确保新证书正确部署后再重启服务。