大型网站的HTTPS要如何实现协议和原理

编辑作者:泽优 | 发表时间:2020-03-20 | 浏览次数:

  百度已经于近日上线了全站HTTPS的安全搜索,默认会将HTTP请求跳转成HTTPS。本文重点介绍HTTPS协议,并简单介绍部署全站HTTPS的意义。
  HTTPS协议概述
  HTTPS可以认为是HTTP+TLS。HTTP协议大家耳熟能详了,目前大部分WEB应用和网站都是使用HTTP协议传输的。
  TLS是传输层加密协议,它的前身是SSL协议,最早由netscape公司于1995年发布,1999年经过IETF讨论和规范后,改名为TLS。如果没有特别说明,SSL和TLS说的都是同一个协议。
  大型网站的HTTPS实践HTTPS协议和原理TLS协议主要有五部分:应用数据层协议,握手协议,报警协议,加密消息确认协议,心跳协议。
  目前常用的HTTP协议是HTTP1.1,常用的TLS协议版本有如下几个:TLS1.2,TLS1.1,TLS1.0和SSL3.0。其中SSL3.0由于POODLE攻击已经被证明不安全,但统计发现依然有不到1%的浏览器使用SSL3.0。TLS1.0也存在部分安全漏洞,比如RC4和BEAST攻击。
  TLS1.2和TLS1.1暂时没有已知的安全漏洞,比较安全,同时有大量扩展提升速度和性能,推荐大家使用。
  需要关注一点的就是TLS1.3将会是TLS协议一个非常重大的改革。不管是安全性还是用户访问速度都会有质的提升。不过目前没有明确的发布时间。
  HTTPS功能介绍
  百度使用HTTPS协议主要是为了保护用户隐私,防止流量劫持。
  HTTP本身是明文传输的,没有经过任何安全处理。例如用户在百度搜索了一个关键字,比如“苹果手机”,中间者完全能够查看到这个信息,并且有可能打电话过来骚扰用户。也有一些用户投诉使用百度时,发现首页或者结果页面浮了一个很长很大的广告,这也肯定是中间者往页面插的广告内容。如果劫持技术比较低劣的话,用户甚至无法访问百度。
  这里提到的中间者主要指一些网络节点,是用户数据在浏览器和百度服务器中间传输必须要经过的节点。比如WIFI热点,路由器,防火墙,反向代理,缓存服务器等。
  在HTTP协议下,中间者可以随意嗅探用户搜索内容,窃取隐私甚至篡改网页。不过HTTPS是这些劫持行为的克星,能够完全有效地防御。
  总体来说,HTTPS协议提供了三个强大的功能来对抗上述的劫持行为:
  内容加密。浏览器到百度服务器的内容都是以加密形式传输,中间者无法直接查看原始内容。身份认证。保证用户访问的是百度服务,即使被DNS劫持到了第三方站点,也会提醒用户没有访问百度服务,有可能被劫持数据完整性。防止内容被第三方冒充或者篡改。
  那HTTPS是如何做到上述三点的呢?下面从原理角度介绍一下。
  HTTPS原理介绍1.内容加密
  加密算法一般分为两种,对称加密和非对称加密。所谓对称加密(也叫密钥加密)就是指加密和解密使用的是相同的密钥。而非对称加密(也叫公钥加密)就是指加密和解密使用了不同的密钥。
  非对称密钥交换
  在非对称密钥交换算法出现以前,对称加密一个很大的问题就是不知道如何安全生成和保管密钥。非对称密钥交换过程主要就是为了解决这个问题,使得对称密钥的生成和使用更加安全。
  密钥交换算法本身非常复杂,密钥交换过程涉及到随机数生成,模指数运算,空白补齐,加密,签名等操作。
  常见的密钥交换算法有RSA,ECDHE,DH,DHE等算法。它们的特性如下:
  RSA:算法实现简单,诞生于1977年,历史悠久,经过了长时间的破解测试,安全性高。缺点就是需要比较大的素数(目前常用的是2048位)来保证安全强度,很消耗CPU运算资源。RSA是目前唯一一个既能用于密钥交换又能用于证书签名的算法。DH:diffie-hellman密钥交换算法,诞生时间比较
  早(1977年),但是1999年才公开。缺点是比较消耗CPU性能。ECDHE:使用椭圆曲线(ECC)的DH算法,优点是能用较小的素数(256位)实现RSA相同的安全等级。缺点是算法实现复杂,用于密钥交换的历史不长,没有经过长时间的安全攻击测试。ECDH:不支持PFS,安全性低,同时无法实现false start。DHE:不支持ECC。非常消耗性能。
  百度只支持RSA和ECDH_RSA密钥交换算法。原因是:
  ECDHE支持ECC加速,计算速度更快。支持PFS,更加安全。支持false start,用户访问速度更快。目前还有至少20%以上的客户端不支持ECDHE,我们推荐使用RSA而不是DH或者DHE,因为DH系列算法非常消耗CPU(相当于要做两次RSA计算)。
  大型网站的HTTPS实践HTTPS协议和原理
  需要注意通常所说的ECDHE密钥交换默认都是指ECDHE_RSA,使用ECDHE生成DH算法所需的公私钥,然后使用RSA算法进行签名最后再计算得出对称密钥。
  非对称加密相比对称加密更加安全,但也存在两个明显缺点:
  CPU计算资源消耗非常大。一次完全TLS握手,密钥交换时的非对称解密计算量占整个握手过程的90%以上。而对称加密的计算量只相当于非对称加密的0.1%,如果应用层数据也使用非对称加解密,性能开销太大,无法承受。非对称加密算法对加密内容的长度有限制,不能超过公钥长度。比如现在常用的公钥长度是2048位,意味着待加密内容不能超过256个字节。
  所以公钥加密目前只能用来作密钥交换或者内容签名,不适合用来做应用层传输内容的加解密。
  非对称密钥交换算法是整个HTTPS得以安全的基石,充分理解非对称密钥交换算法是理解HTTPS协议和功能的关键。
合肥网站seo优化

 
  下面分别通俗地介绍一下RSA和ECDHE在密钥交换过程中的应用。
  RSA在密钥交换过程中的应用
  RSA算法的原理是乘法不可逆或者大数因子很难分解。RSA的推导实现涉及到了欧拉函数和费马定理及模反元素的概念,有兴趣的读者可以自行百度。
  RSA算法是统治世界的最重要算法之一,而且从目前来看,RSA也是HTTPS体系中最重要的算法,没有之一。下面用一个简单的示例介绍一下RSA的神奇妙用。
  假设一个网站需要使用HTTPS协议,那么它首先就得申请数字证书,申请证书之前需要生成一对公钥和私钥,为了方便说明问题,假设server的密钥长度只有8位,事实上现在的服务器证书至少是2048位长。随机挑选两个质数p,q,使得pq接近2的8次方=256,假设p=13,q=19。n=pq=13*19=247。挑选一个数e,满足1<e<(p-1)(q-1)并且e与(p-1)(q-1)互质,假设e=53。计算e关于n的模反元素,ed≡1(modφ(n)),d=
  实际应用中,(n,e)组成了公钥对,(n,d)组成了私钥对。公钥一般都注册到了证书里,任何人都能直接查看,比如百度证书的公钥对如下图,其中最末6个数字(010001)换算成10进制就是65537,也就是公钥对中的e,取值比较小的原因有两个:
  减小client端的计算强度,特别是现在移动终端的计算能力比较弱,较小的公钥使得CPU计算会更快。加大server端的破解难度。e比较小,d必然会非常大。所以d的取值空间也会非常大。
  大型网站的HTTPS实践HTTPS协议和原理
  ECDHE算法在密钥交换中的应用
  ECDHE算法实现要复杂很多,依赖的数学原理主要是ECC椭圆曲线和离散对数。详细概念不做说明,示例介绍一下。对称内容加密
  非对称密钥交换过程结束之后就得出了本次会话需要使用的对称密钥。对称加密又分为两种模式:流式加密和分组加密。流式加密现在常用的就是RC4,不过RC4已经不再安全,微软也建议网站尽量不要使用RC4流式加密。
  一种新的替代RC4的流式加密算法叫ChaCha20,它是google推出的速度更快,更安全的加密算法。目前已经被android和chrome采用,也编译进了google的开源openssl分支---boring ssl,并且nginx 1.7.4也支持编译boringssl。
  分组加密以前常用的模式是AES-CBC,但是CBC已经被证明容易遭受BEAST和LUCKY13攻击。目前建议使用的分组加密模式是AES-GCM,不过它的缺点是计算量大,性能和电量消耗都比较高,不适用于移动电话和平板电脑。
  数据完整性
  这部分内容比较好理解,跟平时的md5签名类似,只不过安全要求要高很多。openssl现在使用的完整性校验算法有两种:MD5或者SHA。由于MD5在实际应用中存在冲突的可能性比较大,所以尽量别采用MD5来验证内容一致性。SHA也不能使用SHA0和SHA1,中国山东大学的王小云教授在2005年就宣布破解了SHA-1完整版算法。
  微软和google都已经宣布16年及17年之后不再支持sha1签名证书。
  身份认证
  身份认证主要涉及到PKI和数字证书。数字证书有两个作用:
  身份授权。确保浏览器访问的网站是经过CA验证的可信任的网站。分发公钥。每个数字证书都包含了注册者生成的公钥。在SSL握手时会通过certificate消息传输给客户端。
  这里简单介绍一下数字证书是如何验证网站身份的,PKI体系的具体知识不做详细介绍。
  证书申请者首先会生成一对密钥,包含公钥和密钥,然后把公钥及域名还有CU等资料制作成CSR格式的请求发送给RA,RA验证完这些内容之后(RA会请独立的第三方机构和律师团队确认申请者的身份)再将CSR发送给CA,CA然后制作X.509格式的证书。
  申请者拿到CA的证书并部署在网站服务器端,那浏览器发起握手接收到证书后,如何确认这个证书就是CA签发的呢?怎样避免第三方伪造这个证书?
  答案就是数字签名(digital signature)。数字签名可以认为是一个证书的防伪标签,目前使用最广泛的SHA-RSA数字签名的制作和验证过程如下:
  数字签名的签发。首先是使用哈希函数对证书数据哈希,生成消息摘要,然后使用CA自己的私钥对证书内容和消息摘要进行加密。数字签名的校验。使用CA的公钥解密签名,然后使用相同的签名函数对证书内容进行签名并和服务端的数字签名里的签名内容进行比较,如果相同就认为校验成功。
  这里有几点需要说明:
  数字签名签发和校验使用的密钥对是CA自己的公私密钥,跟证书申请者提交的公钥没有关系。数字签名的签发过程跟公钥加密的过程刚好相反,即是用私钥加密,公钥解密。现在大的CA都会有证书链,证书链的好处一是安全,保持根CA的私钥离线使用。第二个好处是方便部署和撤销,即如何证书出现问题,只需要撤销相应级别的证书,根证书依然安全。根CA证书都是自签名,即用自己的公钥和私钥完成了签名的制作和验证。而证书链上的证书签名都是使用上一级证书的密钥对完成签名和验证的。怎样获取根CA和多级CA的密钥对?它们是否可信?当然可信,因为这些厂商跟浏览器和操作系统都有合作,它们的公钥都默认装到了浏览器或者操作系统环境里。比如firefox就自己维护了一个可信任的CA列表,而chrome和IE使用的是操作系统的CA列表。HTTPS使用成本
  HTTPS目前唯一的问题就是它还没有得到大规模应用,受到的关注和研究都比较少。至于使用成本和额外开销,完全不用太过担心。
  一般来讲,使用HTTPS前大家可能会非常关注如下问题:
  证书费用以及更新维护。大家觉得申请证书很麻烦,证书也很贵,可是证书其实一点都不贵,便宜的一年几十块钱,最多也就几百。而且现在也有了免费的证书机构,比如著名的mozilla发起的免费证书项目:let’s encrypt就支持免费证书安装和自动更新。这个项目将于今年中旬投入正式使用。数字证书的费用其实也不高,对于中小网站可以使用便宜甚至免费的数字证书服务(可能存在安全隐患),像著名的verisign公司的证书一般也就几千到几万块一年不等。当然如果公司对证书的需求比较大,定制性要求高,可以建立自己的CA站点,比如google,能够随意签发google相关证书。HTTPS降低用户访问速度。HTTPS对速度会有一定程度的降低,但是只要经过合理优化和部署,HTTPS对速度的影响完全可以接受。在很多场景下,HTTPS速度完全不逊于HTTP,如果使用SPDY,HTTPS的速度甚至还要比HTTP快。大家现在使用百度HTTPS安全搜索,有感觉到慢吗?HTTPS消耗CPU资源,需要增加大量机器。前面介绍过非对称密钥交换,这是消耗CPU计算资源的大户,此外,对称加解密,也需要CPU的计算。同样地,只要合理优化,HTTPS的机器成本也不会明显增加。对于中小网站,完全不需要增加机器也能满足性能需求。后记国外的大型互联网公司很多已经启用了全站HTTPS,这也是未来互联网的趋势。国内的大型互联网并没有全站部署HTTPS,只是在一些涉及账户或者交易的子页面/子请求上启用了HTTPS。百度搜索首次全站部署HTTPS,对国内互联网的全站HTTPS进程必将有着巨大的推动作用。

标签:

新闻资讯

公司新闻 网站建设 行业资讯 常见问题

相关文章

准备开展业务?

心动不如行动,推广外包、单品购买任意选

立即咨询

安徽泽优信息技术有限公司是一家专注于合肥网站建设,合肥网站优化与制作的公司,欢迎各大企业咨询我们热线!

Copyright © 2018-2018 www.ahzeyou.com 版权所有 泽优信息