什么是HTTPS?
HTTP协议以明文方式发送内容,不提供任何方式的数据加密。HTTPS协议是以安全为目标的HTTP通道,简单来说,HTTPS是HTTP的安全版,即将HTTP用SSL/TLS协议进行封装,HTTPS的安全基础是SSL/TLS协议。HTTPS提供了身份验证与加密通讯方法,被广泛用于万维网上安全敏感的通讯,例如交易支付。
根据2017年EFF(Electronic Frontier Foundation)发布的报告,目前全球已有超过一半的网页端流量采用了加密的HTTPS进行传输。更多HTTPS的信息请参考阿里云CDN官方帮助文档什么是HTTPS加速。
CDN如何HTTPS加速
使用了CDN以后,域名解析到了CDN,因此必须要在CDN侧配置HTTPS证书。如果CDN上没有配置HTTPS证书,则CDN只支持HTTP访问;如果CDN上配置了HTTPS证书,则CDN支持HTTP和HTTPS访问。具体配置请参考帮助文档“配置HTTPS证书”。
源站已经配置了HTTPS,CDN上是否还需要配置
HTTPS是客户端和服务端的交互,没有用CDN前,是客户端直接和源站交互,因此源站需要配置HTTPS。使用CDN以后,是客户端和CDN交互,因此如果需要HTTPS访问CDN,则CDN上必须要配置HTTPS证书。源站配置了HTTPS证书只是支持CDN以HTTPS回源到源站。
为什么配置了HTTPS,客户端还是HTTP访问的
客户端是HTTP访问还是HTTPS访问完全是客户端的行为,如果希望客户端强制用HTTPS访问,可以在CDN上开启强制HTTPS跳转。
申请CDN免费HTTPS证书失败
在阿里云CDN控制台中申请免费HTTPS证书时,存在一些限制。您可以参考“在CDN的HTTPS设置中申请免费证书失败”的文档去排查和解决。
CDN配置HTTPS以后还是无法访问
(1)如果是购买证书以后自定义上传的情况,需要特别注意SSL证书根据其适用范围可以分为:通配符域名、单个域名和多个域名。根据其名称即可查看购买的证书分别适用于主域名下某个级别的全部子域名、单个域名或者多个域名。用户是需要保证购买的证书必须适用于加速域名后续才可以添加在CDN中生效。如下图所示的即是添加的SSL证书(适用于www域名)与CDN加速域名(video的子域名)是不相匹配的,因此会抛出NET::ERR_CERT_COMMON_NAME_INVALID的错误。
(2)CA机构提供的证书为了兼容性可能会提供多种形式的证书,CDN支持的证书仅有PEM格式,并且私钥需要RSA格式。如果客户获取得到的是其他格式的证书是需要转换后然后提交到CDN服务中的,常见格式切换格式请参考:CDN 证书格式说明,而其中的私钥文件如果是-----BEGIN PRIVATE KEY-----, -----END PRIVATE KEY-----样式的话是需要通过如下命令转换成RSA格式:
openssl rsa -in old_server_key.pem -out new_server_key.pem
(3)CDN是不支持设置密码的私钥。如图3所示即是经过加密的私钥,这类私钥文件是需要经过解密后才可以正常使用,因此CDN是无法正常使用的。
(4)证书链需要补全中间证书。对于中级CA机构提供的证书,那么拿到的证书将包括多份证书,而CDN需要添加的是包括中间证书的完整证书链,拼接规则为:服务器证书放第一份,中间证书放第二份,中间不要有空行。另外有一些中间证书CA机构提供了不同的服务器使用的证书,由于CDN是基于Tengine提供服务的,因此用户是需要使用Nginx对应的证书到视频中心的。
(5)CDN的HTTPS技术是基于SNI技术实现的。SNI技术主要是用来在同一台服务器上配置多个证书的需求,而SNI是需要客户端发送请求的时候带有SNI的信息以标识是哪个域名的SSL请求,因此SNI技术对客户端有一定的要求,部分低版本系统中的低版本浏览器不满足该要求。SNI技术对于客户端的限制详细请参考:SNI对客户端浏览器限制。
为什么网站开启HTTPS以后显示不全
打开浏览器开发者模式,切换到console页面,如果看到Mixed Content错误,则说明是浏览器安全限制导致的。浏览器要求Https的页面里只能加载Https的地址,不能加载Http的资源。如果您的Https的页面里加载了很多http的资源,这些资源加载不出来的,因此会引起网站显示异常,这种情况需要网站技术人员把htm代码里加载的资源地址都改成https的。