CDN的HTTPS相关问题及处理思路
相比于HTTP协议,HTTPS加入了SSL协议保证传输的可靠性。因此在线上的使用环境中为了避免劫持的情况经常需要使用HTTPS协议进行加密传输。而CDN同样也提供HTTPS协议保证客户端与CDN节点直接的网络具体加密可靠性,但在使用过程中用户经常遇到各类问题导致HTTPS访问异常,本文对相关问题及处理思路进行总结,希望对大家排查问题有所帮助。
问题一:配置证书没有生效
用户在CDN上配置了SSL证书后发现仍然无法正确获取证书或者获取证书不可信,大家应依次从解析-->设置-->调度域几个方面依次排查。
解析问题
现象
CDN上配置完成证书后访问加速域名证书出现不可信的状态,具体查看访问到的证书发现并没有识别正确的证书,而是alicdn.com、oss-cn-${regionname}.aliyuncs.com等其他域名的证书(如图一所示)。这种问题一般是由于加速域名的解析有问题导致的。
图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协议跟随设置
现象:客户开通https协议跟随按钮后回源到源站测试无法正常访问,并且错误错误是源站抛出的。如下图,用户设置加速域名回源到OSS的图片处理的域名的80端口,直接访问图片处理的域名访问是正常的,但是通过CDN访问访问出现503的报错,通过Via可以查看到该503的错误是二级节点回源到OSS返回的503。
分析:协议跟随的意义是指如果客户端使用https方式请求资源,当节点上未缓存该资源时,会使用相同的https方式回源获取资源;同理类似http协议的请求。协议跟随的设置可以在神农鼎上查看到(如下图),因此在上面的问题中由于OSS的图片处理的域名不支持https,而用户开启协议跟随的话使用https访问加速域名回源也就将使用https协议,因此出现了对应的报错。因此开启协议跟随按钮一定要客户设置的源站要同时支持http和https协议的。
问题四:http/https跳转问题
现象:客户对于自己的站点常有以下两种跳转需求:1)所有的http请求跳转为https请求或者https请求跳转为http请求;2)部分资源可以将http请求跳转到https或者https跳转为http请求。
分析:这两种需求对于第一种需求CDN是可以直接完成该需求的,可以直接在https的信息中直接添加对应的跳转设置(如下图)。而对于第二种需求CDN现在无法实现,需要用户的源站实现对应的rewrite功能,而为了保证每次请求都可以触发源站的重定向设置就需要用户针对于特定的资源设置在CDN上不缓存(可以在CDN控制台设置缓存0秒或者源站设置no-cache等禁止CDN缓存的头信息)。
最后更新:2017-06-30 23:03:32