HTTPS排障指南

更新时间:
复制 MD 格式

本文汇总CDN HTTPS配置相关的常见问题及排查方法,涵盖证书上传报错、HTTPS访问异常、设备兼容性和HTTPS性能优化等问题。

症状速查表

先根据客户端观测到的现象定位排查入口,再按对应章节的步骤逐项排查。

现象或报错

常见原因

排查入口

控制台上传证书时报错

证书或私钥格式错误、两者不匹配、证书已过期

证书配置与上传报错

HTTPS访问失败,HTTP访问正常

CDN未配置证书,或证书无效、与域名不匹配

访问返回ERR_SSL_PROTOCOL_ERROR

浏览器报 ERR_SSL_VERSION_OR_CIPHER_MISMATCHSSL_ERROR_NO_CIPHER_OVERLAP

客户端与CDN节点的TLS协议版本或加密套件无交集

TLS协议版本与加密套件协商失败

浏览器提示“不安全”或证书风险

证书链不完整、证书过期、自签名证书、网页混合内容

网站提示证书风险

HTTP访问未自动跳转到HTTPS

配置证书后未单独开启强制跳转

HTTP访问未自动跳转HTTPS

部分旧设备或IoT设备无法HTTPS访问

客户端不支持SNI,或证书链不完整

设备与客户端兼容性

HTTPS访问慢、TLS握手耗时长

OCSP查询超时、证书链过大、TLS协议版本较低、解析调度偏远

HTTPS性能优化

如何判断问题是否在HTTPS配置层

当您使用CDN加速域名时,如果出现HTTPS相关的问题,可以按以下判断思路定位问题层级:

  • 证书配置阶段报错:在上传或选择证书时控制台直接报错,属于证书配置问题,参见证书配置与上传报错

  • HTTPS访问失败但HTTP正常:通过HTTP协议可以正常访问但HTTPS访问失败或提示证书错误,通常是CDN未配置SSL证书或证书配置有误,参见HTTPS访问异常

  • 浏览器提示证书风险:HTTPS可以访问但浏览器显示"不安全"或证书风险提示,属于证书有效性或网页混合内容问题,参见网站提示证书风险

  • 部分设备无法访问:大部分设备正常但特定设备(如停止维护的旧版操作系统、部分物联网IoT设备)无法通过HTTPS访问,通常是SNI兼容性问题,参见设备与客户端兼容性

  • HTTP未自动跳转HTTPS:已配置HTTPS证书且HTTPS访问正常,但HTTP访问未自动跳转到HTTPS,属于跳转配置问题,参见强制HTTPS跳转

  • 回源HTTPS异常:客户端访问CDN正常,CDN回源时返回5xx或源站证书校验失败,属于回源配置问题,请参见回源排障指南

证书配置与上传报错

配置HTTPS证书时报错怎么办?

CDN控制台上传自定义SSL证书时可能遇到多种报错。常见的报错类型及处理方法:

  • 证书格式错误:CDN仅支持PEM格式的证书。请确认证书内容以 -----BEGIN CERTIFICATE----- 开头、以 -----END CERTIFICATE----- 结尾,且通常每行64个字符。如果您的证书是DER、P7BPFX格式,需要先转换为PEM格式。

  • 私钥格式错误:私钥文件的header需与密钥算法匹配:RSA密钥为 -----BEGIN RSA PRIVATE KEY-----(PKCS#1格式),ECC/SM2密钥为 -----BEGIN EC PRIVATE KEY-----。如果您的私钥以 -----BEGIN PRIVATE KEY----- 开头(PKCS#8格式),需先转换再上传:RSA密钥执行 openssl rsa -in old_server_key.pem -out new_server_key.pem,ECC/SM2密钥执行 openssl ec -in old_server_key.pem -out new_server_key.pem。此外,私钥不能带有密码保护,去除密码保护的方法参见私钥文件去除密码保护

    说明

    SM2(国密)密钥执行上述 openssl ec 命令时,需使用OpenSSL 1.1.1及以上版本(SM21.1.1版本开始引入),且编译时需启用国密算法支持。否则命令会直接报错,易被误判为私钥文件本身有问题。

    如果您的OpenSSL不支持SM2,建议使用阿里云数字证书管理服务提供的国密证书工具或通过控制台直接托管。

  • 证书与私钥不匹配:上传的证书和私钥必须是同一对。RSA密钥使用以下命令比对两者的modulus是否一致:

    openssl x509 -noout -modulus -in your_cert.pem | openssl md5
    openssl rsa -noout -modulus -in your_key.pem | openssl md5

    ECC/SM2密钥没有modulus概念,请改用比对公钥的方式,分别执行以下命令,两者输出一致即匹配:

    openssl x509 -pubkey -noout -in your_cert.pem
    openssl ec -pubout -in your_key.pem

    如果不确定密钥类型,可使用同时适用于RSAECC的通用方法,两行输出的MD5值一致即匹配:

    openssl x509 -pubkey -noout -in your_cert.pem | openssl md5
    openssl pkey -pubout -in your_key.pem | openssl md5
  • 证书域名不匹配:证书的CNSAN必须包含加速域名。检查命令:openssl x509 -in cert.pem -noout -text | grep -E -A1 "Subject:|Subject Alternative Name"

  • 证书/密钥过长:控制台对上传内容有长度限制。请检查:证书链中是否混入多余空行、不可见字符或BOM头(可用文本编辑器显示不可见字符后清理);是否误将根CA证书粘贴进证书链(只需上传服务器证书和中间证书);是否把私钥误粘贴到了证书文本框(或相反)。

  • 证书已过期:使用 openssl x509 -in your_cert.pem -noout -dates 命令检查证书有效期。

具体格式要求和转换方法,请参见证书格式说明

私钥文件如何去除密码保护?

如果私钥带有密码保护,上传时会报私钥格式错误。您需要先去除密码保护:

  1. 确认密钥是否带有密码保护

    RSA算法加密的私钥,使用OpenSSL运行以下命令。如果提示 Enter pass phrase for <加密的私钥文件>:,说明已加密;如果直接显示私钥信息,说明未加密;如果出现error报错,说明该私钥不是RSA加密的文件:

    openssl rsa -in <加密的私钥文件> -text -noout

    ECC/SM2算法加密的私钥,使用以下命令检查:

    openssl ec -in <加密的私钥文件> -text -noout
  2. 解密私钥

    证书的加密算法为RSA时,执行以下命令解密私钥:

    openssl rsa -in <加密的私钥文件> -passin pass:<私钥密码> -out <解密的私钥文件>

    证书的加密算法为ECCSM2时,执行以下命令解密私钥:

    openssl ec -in <加密的私钥文件> -passin pass:<私钥密码> -out <解密的私钥文件>

CDN控制台选择证书时找不到已持有的证书或提示域名不匹配怎么办?

可能原因及处理方法:

  1. 通配符证书已部署到其他域名:通配符证书已部署到其他CDN域名后,新增域名如需复用同一证书,默认证书列表无法直接选择。需通过自定义上传方式在CDN控制台完成部署,之后才可使用数字证书管理服务控制台的部署证书功能。

  2. 证书绑定域名与加速域名不匹配:检查证书绑定的域名是否与当前CDN加速域名匹配,注意区分两种情况:单域名证书(如仅绑定 example.com)不能用于子域名 image.example.com,需单独为该子域名申请证书;而通配符证书(如 *.example.com)可以匹配同级的所有子域名(如 image.example.comapi.example.com)。

  3. 账号不一致:确保证书和CDN域名在同一阿里云账号下。

  4. 免费证书未添加www前缀:申请SSL免费证书时不会自动添加www前缀,需手动输入完整的域名进行申请。

  5. 域名格式导致无法自动匹配:若因域名格式(如根域名与子域名)导致无法自动匹配,建议在数字证书管理服务控制台创建部署任务将证书部署至CDN,或下载证书文件后通过"自定义上传"方式配置。

若证书仍未出现在资源列表中,请按以下顺序排查:

  1. 确认域名已添加到CDN。登录CDN控制台,进入域名管理页面,检查目标域名是否在列表中。证书服务的关联域名列表仅显示已添加到CDN的域名,新域名未添加时列表为空。

  2. 确认证书绑定的域名包含加速域名。通配符证书(如*.example.com)可覆盖所有同级子域名,但不覆盖更深层子域名(如a.b.example.com)和主域名本身(如example.com)。证书绑定的域名与加速域名不匹配时,证书不会出现在可选列表中。

  3. 按顺序操作:先在CDN控制台为域名配置HTTPS证书(选择已有证书或自定义上传),完成后再通过证书控制台的云产品部署进行后续管理。证书控制台的云产品部署依赖CDN控制台侧的配置,必须先完成CDN控制台的证书配置。

配置HTTPS证书的具体操作,请参见配置HTTPS证书

上传HTTPS证书,提示证书重复怎么办?

当您上传自定义上传(证书+私钥)类型的证书时,如果系统提示证书重复,说明相同的证书内容已存在于系统中,可能是之前为其他域名上传过同一张证书。处理方法:

  • 复用已有证书(推荐):无需重复上传。在CDN控制台的HTTPS配置页面,将证书来源切换为已有证书,在列表中搜索并选择该证书直接部署即可。

  • 确需重新上传:修改证书名称后再重新上传。

上传泛域名证书后,访问三级及以上域名时浏览器报错怎么办?

症状:为加速域名上传泛域名(通配符)证书后,访问三级及以上域名时浏览器提示证书错误。

可能原因:根据HTTPS证书域名匹配规范(RFC 6125),泛域名证书只能匹配通配符所在层级的下一级域名。例如*.abc.com的证书可以匹配a.abc.comb.abc.com,但无法匹配主域名abc.com,也无法匹配三级域名x.a.abc.com

解决方法

  • 对于更深层级的域名,申请对应层级的泛域名证书。例如需要加速1.cdn.abc.com2.cdn.abc.com等三级域名时,应使用*.cdn.abc.com的泛域名证书。

  • 若同时需要覆盖主域名abc.com,需为主域名单独申请证书,或使用SAN(Subject Alternative Name)证书同时包含abc.com*.abc.com

申请或配置免费证书时提示"检测域名是否在阿里云CDN"怎么办?

症状:在CDN控制台为域名配置免费证书时,系统提示"检测域名是否在阿里云CDN",无法继续配置。

原因:免费证书的配置需要CDN加速域名正确解析到CNAME值。如果域名未正确解析到CDN分配的CNAME,系统检测不到域名在阿里云CDN上,就会提示该报错。

  1. 登录域名解析服务商控制台,检查加速域名的解析记录,确认已正确解析到CDN分配的CNAME值。

  2. 域名解析生效需要一定时间,确认解析正确后重新在CDN控制台尝试配置免费证书。

  3. 如果域名已正确解析但仍提示该报错,可借助 dignslookup 等工具确认解析已生效,并清除浏览器缓存后重试。

DCDN(全站加速)域名配置免费证书时出现同样的提示,处理方法相同。

HTTPS访问异常

CDN配置HTTPS后访问返回ERR_SSL_PROTOCOL_ERROR怎么办?

ERR_SSL_PROTOCOL_ERROR 通常表示CDN节点未正确配置SSL证书或证书无效。请按以下步骤排查:

  1. 检查CDN控制台HTTPS配置,确保证书已上传并启用,且证书状态正常(未过期)。

  2. 若使用自定义证书,请确保证书格式正确(PEM格式)且私钥无密码保护。

  3. 确保证书与私钥匹配,且证书绑定的域名与加速域名一致。

  4. 使用以下命令验证CDN节点实际返回的证书是否正确:

    openssl s_client -connect <加速域名>:443 -servername <加速域名> < /dev/null 2>/dev/null | openssl x509 -noout -subject -dates
  5. 若之前未配置过HTTPS证书,请先在CDN控制台完成证书配置。在配置完成前,可临时使用HTTP协议访问(去掉URL中的“s”)。

TLS协议版本与加密套件协商失败怎么办?

症状:浏览器报 ERR_SSL_VERSION_OR_CIPHER_MISMATCH(Chrome)或 SSL_ERROR_NO_CIPHER_OVERLAP(Firefox),连接被直接阻断。这是两款浏览器对同类协商失败的不同报错。

可能原因:客户端与CDN节点协商不出共同支持的TLS协议版本或加密套件,浏览器会直接阻断连接。此类错误属于TLS协议层问题,不会显示为证书风险警告,请勿按证书信任链问题排查。在已正确配置证书的前提下,本错误与证书有效性无关(即使证书完全正确也可能出现);但如果CDN侧根本未配置任何证书,所有依赖证书的密钥交换套件也会不可用,同样会触发此错误,因此需先确认证书已配置。

排查步骤

  1. 确认证书已配置:在CDN控制台检查HTTPS证书状态,排除“未配置证书”的可能。

  2. 确认客户端支持的TLS协议版本与加密套件:过旧的客户端可能仅支持TLSv1.0等低版本协议或者老旧加密套件。

  3. 检查CDN侧已启用的TLS版本与加密套件:确认与客户端能力存在交集。阿里云CDN控制台支持配置TLSv1.0、TLSv1.1、TLSv1.2、TLSv1.3,建议启用TLSv1.2TLSv1.3。加密套件建议使用AES-128-GCM、AES-256-GCMAEAD加密算法的套件,密钥交换机制使用ECDHE_RSAECDHE_ECDSA(配合ECC证书),避免使用加密强度低的老旧套件。配置方法请参见配置TLS版本与加密套件

  4. 兼顾旧客户端:若业务必须兼容仅支持低版本协议的旧客户端,可临时在CDN侧开启对应的低版本协议。低版本协议存在安全风险,仅建议作为过渡方案,应尽快推动客户端升级。

CDN域名更新或更换SSL证书后HTTPS访问仍失败或显示旧证书怎么办?

  1. 确保证书已正确部署:登录CDN控制台,在HTTPS配置中确认已选择新证书或上传了新证书内容。

  2. 检查域名匹配:确保证书绑定的域名与CDN加速域名完全一致(包括www前缀等)。

  3. 等待生效并清除本地缓存:新证书部署到所有CDN节点需要一定时间(通常1~10分钟),请等待后复测。证书下发与CDN资源缓存无关,清除浏览器缓存或使用无痕浏览器窗口验证即可。

  4. 使用命令行验证节点证书:绕过浏览器缓存干扰,直接查看CDN节点当前部署的证书:

    curl -vI https://<加速域名> 2>&1 | grep -E "subject:|expire date:|issuer:"
  5. 源站证书更新不会自动同步:若源站证书更新,CDN侧不会自动同步,必须手动在CDN控制台更新证书。

网站提示证书风险、浏览器显示"不安全"或混合内容警告怎么办?

CDN控制台上已为域名配置了HTTPS证书,但使用浏览器访问网站时仍提示证书风险。可能原因及处理方法:

  • 原因1:证书链不完整

    上传证书时未包含完整的中间证书链。部分设备(尤其是iOS和部分Android设备)对证书链完整性要求更严格,会直接提示风险。建议使用在线工具(如myssl.com)检测证书链完整性,补全中间证书后重新上传。也可以通过命令行检查:

    openssl s_client -connect <加速域名>:443 -servername <加速域名> < /dev/null 2>&1 | grep -i "verify"

    如果输出中包含 verify errorunable to get local issuer certificate,说明证书链不完整。

  • 原因2:证书已过期

    您需要为证书续费,续费成功后在CDN控制台上及时更新证书。更新证书请参见配置HTTPS证书

  • 原因3:使用了自签名HTTPS证书

    由自己生成的、非CA机构颁发的证书,称为自签名证书。自签名证书不在浏览器的信任根证书列表中,容易被仿冒和遭受中间人攻击,因此会触发风险提示,且无法通过补全证书链解决。建议更换成由可靠的CA机构签发的HTTPS证书。

  • 原因4:网页内有HTTP链接资源(混合内容)

    网页使用了HTTP协议加载的资源(图片、JS、CSS等),浏览器会显示混合内容警告。现代浏览器默认会阻断HTTP加载的脚本、iframe等主动混合内容,对图片等被动内容仅显示警告。处理方法:将页面中的HTTP资源链接修改为HTTPS,或使用协议相对路径(//domain/path)。

  • 原因5:系统时间不正确

    检查电脑的系统时间是否正确,系统时间不正确会导致浏览器将证书判定为已过期或尚未生效,从而提示证书风险。您需要将系统时间修改正确后再尝试浏览网站。

  • 原因6:HSTS缓存导致无法回退HTTP

    如果网站之前配置了HSTS(HTTP Strict Transport Security)响应头,浏览器会在指定时间内强制使用HTTPS访问。若此时证书过期或被移除,浏览器将直接阻断访问且不提供“继续前往”选项。处理方法:尽快修复证书问题;如需临时清除本地HSTS缓存,Chrome浏览器可访问 chrome://net-internals/#hsts 删除对应域名的HSTS记录。HSTS的配置方法请参见配置HSTS

强制HTTPS跳转

配置了HTTPS证书但HTTP访问未自动跳转HTTPS怎么办?

症状:加速域名已配置HTTPS证书,直接通过HTTPS访问正常,但通过HTTP访问时不会跳转到HTTPS,仍以HTTP返回内容。

原因:配置HTTPS证书只是让CDN节点具备处理HTTPS请求的能力,不会改变HTTP请求的处理方式。HTTPHTTPS的跳转需要单独配置协议重定向。

处理方法

  1. CDN控制台为该加速域名开启协议重定向,跳转方式选择HTTP强制跳转HTTPS。配置方法请参见配置协议重定向

  2. 配置生效后清理浏览器缓存并复测。执行以下命令,正常应返回301302状态码,且响应头Locationhttps开头的地址:

    curl -I http://<加速域名>
说明

如果开启强制跳转后访问报ERR_TOO_MANY_REDIRECTS(重定向次数过多),通常是源站也配置了HTTPHTTPS跳转、而CDNHTTP协议回源导致的循环跳转,排查方法请参见回源排障指南

设备与客户端兼容性

部分设备无法通过HTTPS访问或证书校验失败(SNI兼容性问题)怎么办?

症状:大多数设备能够顺利访问通过HTTPS协议加速的域名,但一些较旧或特定配置的客户端无法访问,或出现证书校验失败。

原因:CDN在处理HTTPS请求时依赖于SNI(Server Name Indication)。SNITLS协议的一个扩展,它允许客户端在发起HTTPS连接请求时指定想要访问的主机名。某些较旧或特定配置的客户端(例如停止维护多年的旧版操作系统或客户端TLS库、部分物联网IoT设备等)可能不支持SNI或者在发起HTTPS请求时不会发送SNI信息。这种情况下,CDN节点无法确定客户端想要访问的确切站点,从而不能提供正确的SSL/TLS证书,导致HTTPS连接失败。

先区分问题类型:如果所有设备、所有浏览器都无法通过HTTPS访问或证书校验失败,通常是证书链问题,请按下方"证书链问题排查"处理;如果仅特定旧设备或特定客户端(如Android端微信小程序)失败,而其他浏览器访问正常,通常是SNI兼容性问题,请按下方"SNI问题排查"处理。

SNI问题排查

  1. 确认故障范围:是否仅在特定客户端(如Android微信小程序)出现证书校验失败,而在其他浏览器中测试正常。如果是,基本可以排除证书链问题,继续排查SNI。

  2. 抓取客户端的TLS握手报文,分析客户端发起请求时是否携带SNI信息。若未携带SNI,CDN节点无法返回该域名的证书。

  3. 分析客户端与服务端交换证书时是否报 Certificate Unknown 后抛出 Reset。若出现该现象且请求未携带SNI,即可确认是SNI兼容性问题。

  4. 查看服务端返回的证书是否为该域名的证书,排除证书配置错误。

证书链问题排查(适用于所有设备均失败的场景):

  1. 查看证书链是否完整。上传证书时需包含服务器证书及完整的中间证书链。

  2. 检查中间证书是否正确。中间证书错误会导致证书校验失败,可使用浏览器的导出证书功能导出中间证书进行比对,或使用在线工具(如myssl.com)检测后补全重新上传。

改善措施

  • 升级客户端系统:确保使用的操作系统和软件都是最新版本,以获得对SNI的支持。

  • 更新IoT设备固件:对于物联网设备,定期检查并安装厂商提供的最新固件更新。

  • 确保证书链完整:上传证书时确保包含完整的中间证书链,避免因证书链不完整导致部分设备校验失败。

HTTPS性能优化

HTTPS访问很慢或TLS握手耗时长怎么办?

症状:本地网速正常,但通过HTTPS访问CDN加速域名时网页加载很慢(例如使用隐私模式浏览器访问很慢),访问速度明显低于预期。

可能原因:HTTPS访问慢通常不是TLS协议版本协商问题(协议版本谈不拢会直接连接失败,而不是变慢),常见原因包括:

  • OCSP查询超时:客户端验证证书吊销状态时需要实时访问CA机构的OCSP服务器,查询超时会令页面加载卡住数秒。阿里云CDN支持OCSP Stapling:由CDN节点代替客户端向CA查询并缓存证书状态,在TLS握手时随证书一起下发,避免客户端实时查询。需要注意的是,首次请求或OCSP缓存过期后,CDN节点需要向CA重新查询,在此期间仍可能存在短暂延迟。配置方法请参见配置OCSP Stapling

  • 证书链过大:上传的证书链中若包含不必要的根证书,会增加TLS握手的数据量。仅需上传服务器证书和中间证书,根证书由客户端系统自带,无需包含。

  • DNS调度问题:域名解析到了距离客户端较远的CDN节点,网络时延本身较大。这属于解析调度问题,不是TLS问题。

  • TLS协议版本较低:TLSv1.3握手(1-RTT)比TLSv1.2(2-RTT)往返更少,启用高版本协议可缩短握手耗时。

排查步骤

  1. 定位耗时阶段:使用浏览器开发者工具的Network面板,查看HTTPS请求的耗时分布。若耗时集中在SSL/TLS握手阶段,按以下步骤继续排查;若握手很快而内容下载慢,则不是TLS问题,应从回源或网络链路方向排查。

  2. 检查OCSP Stapling:确认CDN侧是否已开启OCSP Stapling。未开启时,可结合抓包确认客户端握手后是否存在等待OCSP查询的现象;开启后由CDN节点随握手下发证书状态,可消除该等待。

  3. 检查证书链大小:确认上传的证书链仅包含服务器证书和中间证书,不包含根证书,避免握手数据量过大。

  4. 排除调度问题:使用 dignslookup 确认加速域名的CNAME解析结果,若客户端被调度到距离较远的CDN节点,请检查本地DNS解析配置或联系阿里云排查调度策略。

  5. 确认协议版本:确认CDN侧已启用TLSv1.2TLSv1.3。TLSv1.3握手往返更少,正常情况下不建议关闭。配置方法请参见配置TLS版本与加密套件

  6. 复测:调整后重新访问,确认访问速度恢复正常。

DCDN(全站加速)域名出现同样的HTTPS访问慢问题,排查与处理方法相同。

常用诊断命令

以下命令帮助您快速诊断HTTPS配置问题,可在本地终端执行。

查看CDN节点部署的证书信息:输出证书的域名(subject)、颁发机构(issuer)和有效期(dates),可快速确认CDN节点是否部署了正确的证书。

openssl s_client -connect <加速域名>:443 -servername <加速域名> < /dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -dates

查看完整证书链:输出完整的证书链,用于检查中间证书是否完整。

openssl s_client -connect <加速域名>:443 -servername <加速域名> -showcerts < /dev/null 2>/dev/null

查看HTTPS请求的TLS握手详情:输出TLS版本、证书主体、颁发者和过期时间等关键信息。

curl -vI https://<加速域名> 2>&1 | grep -E "SSL|subject|issuer|expire|TLS|HTTP/"

检查证书有效期

openssl x509 -in <证书文件> -noout -dates

验证证书与私钥是否匹配(通用方法):两行输出的MD5值一致即匹配。

openssl x509 -pubkey -noout -in <证书文件> | openssl md5
openssl pkey -pubout -in <私钥文件> | openssl md5

检查域名解析是否指向CDN:输出应为CDN分配的CNAME指向的IP地址,而非源站IP。

dig <加速域名> +short

跟踪HTTP跳转链路:用于排查强制HTTPS跳转和重定向循环问题。

curl -vIL --max-redirs 10 http://<加速域名> 2>&1 | grep -E "< HTTP|< Location"