相比于 HTTP 协议, HTTPS 加入了 SSL 协议保证传输的可靠性。因此在线上的使用环境中为了避免劫持的情况经常需要使用 HTTPS 协议进行加密传输。而 CDN 同样也提供 HTTPS 协议保证客户端与 CDN 节点直接的网络具体加密可靠性,但在使用过程中用户经常遇到各类问题导致 HTTPS 访问异常,本文对相关问题及处理思路进行总结,希望对大家排查问题有所帮助。
问题一:配置证书没有生效
用户在 CDN 上配置了 SSL 证书后发现仍然无法正确获取证书或者获取证书不可信,大家应依次从解析-->设置-->调度域几个方面依次排查。
解析问题
现象
CDN 上配置完成证书后访问加速域名证书出现不可信的状态,具体查看访问到的证书发现并没有识别正确的证书,而是 alicdn.com 、 oss-cn-${regionname}.aliyuncs.com 等其他域名的证书(如图1所示)。这种问题一般是由于加速域名的解析有问题导致的。
图1. 域名证书为 alicdn.com 的证书
分析
如CDN 初始化操作所述, CDN 加速生效是需要将加速域名解析到正确的 CNAME 域名,并且加速域名和 CNAME 域名是一一对应的(除了泛域名加速)。同样的需要 CDN 配置的 SSL 证书生效也同样是需要正确解析到 CDN 的 CNAME 域名上的,这个是能够正常获取证书的前提。这里经常出现客户解析到源站、 OSS 以及非正确的 CNAME 域名。常见查看域名解析状态可以通过 dig 或者 nslookup 命令查看。
图2. nslookup 命令查看域名解析状态
图3. dig 命令查看域名解析状态
证书设置问题
现象
用户通过上述解析以及证书添加操作后查看加速域名访问在全部或者部分浏览器访问出现证书不可信,但与之前问题相比可查看证书已是用户配置的证书。如图4所示即是访问加速域名出现不可信,查看其证书详细内容确实是加速域名的证书。而浏览器报错:“There are issues with the site's certificate chain”。
图4. 加速域名证书报错
分析
从上面的截图中可以查看到证书配置已经生效,说明解析和调度域都是正常的。但是浏览器在发起 SSL 握手的时候发现证书错误,证书链存在问题。这种错误一般有以下可能:
1. 证书与加速域名不匹配。一般 CA 机构颁发的证书包括泛域名证书和一般证书;泛域名证书顾名思义即是适用于多个域名,而一般证书即是针对于某个具体的子域名。该信息用户可以从 CA 机构或者可以通过如下两个地方查看到:
图5 查看证书颁发给的域名是否含有通配符“*”
图6 查看证书的使用者备用名称是否包括多个域名
2. 证书是通过中级 CA 机构申请得到的证书,而证书链不完整导致的。中级CA 机构颁发的公钥证书一般包括多段证书链([-----BEGIN CERTIFICATE-----, -----END CERTIFICATE-----]段落),如果仅有一个段落说明该客户仅配置了服务器证书而没有配置中间证书。这时就需要用户手动对证书进行拼接:服务器证书放第一份,中间证书放第二份,中间不要有空行。
注:经常遇到用户测试没有配置中间证书时在 Chrome 浏览器中仍然是可以识别的,但其他浏览器出现问题,其原因是由于 Chrome 浏览器会自动补全中间证书。
另外客户经常获取的证书内容如图7所示,该证书是 CA 机构根据服务器的类别提供了对应配置的证书。 CDN 服务器是通过 Tengine 实现的因此需要使用 for Nginx 的证书(此类证书 CA 机构已经帮助拼接完成,可以直接设置)。
图7. CA 机构提供的区分服务器类别证书
** SNI 信息**
现象
客户测试反馈在正常的浏览器中测试证书正常,但是在一些低版本系统中的低版本浏览器中访问出现证书不可信,查看证书详细信息查看是 uc.cn 域名下的一个证书,如图8所示。
图8. CDN 加速域名访问到 uc 证书
分析
CDN 的证书都是采用 SNI 技术进行配置的。 SNI 主要是为了解决一个服务器上配置多个域名和对应的 SSL 证书的问题。在低版本的浏览器 SSL 握手的时候没有带 SNI 信息就会导致证书报错。暂时该问题还没有较好的解决方案,仅能够建议用户升级浏览器版本使用。 SNI 兼容性请参考:SNI 浏览器兼容性
调度域问题
现象
在检查完成上述的各方面问题均正常仍然出现证书没有生效的情况,就需要从调度域和访问节点来分析。
分析
CDN 正常情况下在添加 HTTPS 证书后 CDN 会将域名切换至 SNI 调度域(调度域: CDN 节点中为客户该域名分配的所有节点),而 SNI 调度域和之前的调度域会有访问 IP 的差别,如果出现用户确认解析正确但是解析到的证书仍然是 alicdn.com 的证书的话就可能是该问题,客户可以手动在本地刷新下 DNS 缓存后进行测试是否恢复。如仍然没有恢复请提交工单咨询售后工程师。
问题二:更新证书没有生效
生效时间问题
现象
在控制台上新添加 HTTPS 证书未生效或者更新证书后发现获取到的仍然是之前配置的旧证书。
分析
CDN 配置 HTTPS 证书大约需要分钟级别的延迟完成全调度域的部署。
另外, CDN 控制台上更新证书内容和秘钥内容是需要一个小时的时间同步到调度域中的各个节点上的,因此这一个小时期间查看到的仍然是之前的证书,建议用户在如果业务条件允许的话可以直接先关闭“证书状态”然后重新开启并配置新的证书,这些大概需要十分钟的时间同步完成。
问题三: HTTPS 协议跟随设置
现象
用户在关闭协议跟随回源功能时是可以正常访问的,但是开启协议跟随回源后 HTTP 协议访问正常,但是 HTTPS 协议访问异常。如图9所示,该资源在开启协议跟随回源后 HTTPS 访问出现 503 错误,并且查看该错误为源站抛出的。
图9 开启协议跟随访问异常
分析
协议跟随的意义是指如果客户端使用 HTTPS 方式请求资源,当节点上未缓存该资源时,会使用相同的 HTTPS 方式回源获取资源;而通过 HTTP 访问则会通过 HTTP 协议回源。因此开启协议跟随功能一定要求 CDN 的源站要同时支持 HTTP 和 HTTPS 协议才可以开启,否则请用户仅开启源站支持回源的协议端口即可。
问题四: HTTP / HTTPS 跳转问题
跳转需求
现象
客户对于自己的站点常有以下两种跳转需求:
1. 所有的 HTTP 请求跳转为 HTTPS 请求或者 HTTPS 请求跳转为 HTTP 请求;
2. 部分资源可以将 HTTP 请求跳转到 HTTPS 或者 HTTPS 跳转为 HTTP 请求。
分析
这两种需求对于第一种需求 CDN 是可以直接完成该需求的,可以直接在 HTTPS 的信息中直接添加对应的跳转设置(如图10)。而对于第二种需求 CDN 现在无法实现,需要用户的源站实现对应的 rewrite 功能,而为了保证每次请求都可以触发源站的重定向设置就需要用户针对于特定的资源设置在
CDN 上不缓存(可以在 CDN 控制台设置缓存 0 秒或者源站设置 no-cache等禁止 CDN 缓存的头信息)。
图10 HTTP
与 HTTPS 跳转设置
访问出现 508 错误
现象
访问 CDN 上的 HTTPS 资源出现 508 的错误,但是直接访问源站正常。
分析
508 错误是重定向回环的错误,该错误一般是由于用户在 CDN 开启 HTTPS 服务,并且设置回源端口为 80 ;而源站设置了 80 端口强制跳转 HTTPS协议,这样就会导致该请求又重新请求到 CDN 节点上,出现重定向回环,因此建议 HTTP 和 HTTPS 协议之间的跳转功能可以直接在 CDN 控制台进行设置即可。