SSL证书部署故障排查指南

更新时间:2025-02-24 09:16:00

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

排查思路

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

    • 您可以通过阿里云网络诊断工具,查看您的网站是否备案。如果网站已经备案,诊断结果如下图所示。

      image

    • 如果您的网站未通过工信部ICP备案,您需要先完成备案流程。

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

      • 如果您使用的不是阿里云ICP备案系统,请前往备案服务商的系统进行网站备案。

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

    • 如果您使用的是阿里云ECS服务器,请前往ECS管理控制台安全组页面,查看是否放行443端口。关于如何配置安全组,请参见管理安全组

      image

    • 如果您接入了Web应用防火墙(WAF),请检查服务器自身的防火墙设置,确保它们没有阻止外部对443端口的访问。您可以通过以下方式来查看。

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

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

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

        image

  3. 检查Web服务器配置文件。

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

      server {
          #443端口号为 HTTPS 的默认端口号
          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
  4. 检查证书的有效性。

    • 检查证书是否在有效期内,具体步骤如下:

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

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

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

        如果证书已过期,请您及时续费证书。以续费正式证书为例,具体操作,请参见SSL正式证书续费

        image

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

      image

    • 确保正确安装了证书,包括但不限于:已将证书文件放置在正确的证书目录,配置Web服务器(如Nginx、Apache等)配置文件的证书配置部分以使证书生效等。

    • 如果您使用的是自签名证书,请确认当前浏览器是否已信任该证书。

      接下来将以Chrome浏览器为例,向您演示如何确认浏览器是否信任该证书。

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

      2. 单击地址栏的image图标:如果浏览器已信任该证书,地址栏左侧没有警告标志。如果不信任,会有一个红色的image警告图标,如下图。

        image

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

    • 如果您使用的是非自签名证书,则需确保该证书是否由受信任的CA颁发,否则浏览器可能会因为不信任该证书而阻止连接。

      接下来将以Chrome浏览器为例,向您演示如何确认非自签名的证书是否由受信任的CA颁发。

      • 查看证书信息:

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

        2. 单击连接是安全的来显示连接详情。

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

          image

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

        image

  5. 验证域名是否解析正确。

    • 验证DNS记录是否指向正确的IP地址,尤其是如果您最近更改了主机或IP地址。

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

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

        image

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

        image

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

      以下内容将向您演示如何在不同操作系统中清除本地DNS缓存:

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

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

        ipconfig /flushdns
      3. 出现“已成功刷新 DNS 解析缓存。”提示表示已成功清除本地DNS缓存。

      1. 打开终端:

        可以通过按Command + Space键打开Spotlight搜索,然后输入“Terminal”来找到终端。

      2. 在终端上输入以下命令来清除macOS中的DNS缓存,然后按Enter键:

        #dscacheutil是一个命令行工具,用于与系统的缓存服务交互。
        sudo dscacheutil -flushcache
      3. 接着在终端上输入以下命令,通过发送HUP信号来重启mDNSResponder进程,然后按Enter 键:

        #mDNSResponder是负责DNS服务的后台进程,重启它可以确保缓存被完全刷新。
        sudo killall -HUP mDNSResponder
      4. 如果没有出现任何报错信息,则命令执行成功。

      说明

      在操作过程中可能会提示输入管理员密码,密码输入完成直接回车即可。

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

      1. systemd-resolved

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

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

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

        sudo service nscd restart

        或者:

        sudo systemctl restart nscd
      3. dnsmasq

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

        sudo service dnsmasq restart

        或者:

        sudo systemctl restart dnsmasq
      4. BIND

        如果您的Linux系统使用BIND(Berkeley Internet Name Domain)来管理DNS缓存,可以通过以下命令清除缓存:

        sudo rndc flush
      5. NetworkManager

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

        sudo service network-manager restart

        或者:

        sudo systemctl restart NetworkManager
      说明

      根据您系统中使用的DNS缓存服务,选择相应的命令来清除DNS缓存。执行这些命令通常需要管理员权限,因此需要在命令前添加sudo。清除DNS缓存后,系统将从DNS服务器获取最新的域名解析信息,这在解决网络访问问题时可能会很有帮助。

  6. 清理浏览器缓存。

    • 浏览器可能会缓存旧的 SSL 证书信息。请尝试清理浏览器缓存后,重新访问您的网站。

    • 尝试在无痕模式或隐私模式下访问您的网站。Chrome浏览器的操作如下图所示,如果您使用的是Edge浏览器,则需要单击新建InPrivate窗口

      image

  7. 验证证书链是否完整。

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

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

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

    证书链的缺失也是导致SSL证书验证失效的重要原因之一。通常情况下,PC 端浏览器都可以通过Authority Info Access(权威信息访问)的URL链接获得中间证书,但在部分Android系统的浏览器上访问时会出现证书不可信或无法访问等问题。主要原因在于部分Android系统的浏览器并不支持通过 Authority Info Access(权威信息访问)的URL链接获得中间证书,这时您需要把证书链文件按照SSL证书链的结构合并为一个文件重新部署到服务器上,浏览器在与服务器连接时将会下载用户证书和中间证书,使您的浏览器访问时显示为可信证书。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 证书链。如下图所示:

        image

    • SSL证书链如何补全?

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

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

  8. 确认私钥的正确性。

    • 请确保上传到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值,如果相同,则说明私钥与证书匹配。

        image

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

  9. 检查浏览器兼容性。

    • 确保您的证书格式和加密套件与主流浏览器兼容。

      确保服务器上的证书格式和加密套件与主流浏览器兼容,是保障网站安全的重要步骤。以下是一些方法来确保兼容性:

      • 使用受信任的证书颁发机构(CA)

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

      • 使用正确的证书格式

        • 确保您的证书是X.509格式,这是SSL/TLS证书的标准格式。

          要查看自己的证书是否是X.509格式,您可以使用以下方法来检查证书文件的内容和格式。

          使用 openssl 命令行工具查看证书内容

          #请根据您证书文件的实际安装路径替换 /ssl/cert.pem
          sudo openssl x509 -in /ssl/cert.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、SSL 3.0、TLS 1.0、TLS 1.1、RC43DES。

    • 测试不同浏览器和设备上的连接情况。

  10. 确保放置证书文件的目录具有正确的读取权限。

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

    这里以Linux为例,指导您确认证书文件的目录是否具有适当的读取权限。

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

      #请根据您证书文件的实际安装路径替换示例路径 /ssl。
      sudo ls -ld /ssl

      这将输出类似如下的信息:

      image

      说明

      权限字段(如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相关的错误信息,以获取问题的具体线索。如仍有疑问,请联系产品技术专家进行咨询,详情请参见专家一对一服务

  • 本页导读 (1)
  • 排查思路
  • 检查是否已通过工信部ICP备案。
  • 检查服务器443端口是否放行。
  • 检查Web服务器配置文件。
  • 检查证书的有效性。
  • 验证域名是否解析正确。
  • 清理浏览器缓存。
  • 验证证书链是否完整。
  • 确认私钥的正确性。
  • 检查浏览器兼容性。
  • 确保放置证书文件的目录具有正确的读取权限。
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等