计算机网络 HTTPS

本文介绍了HTTP的不足,如通信明文、无法验证身份和完整性,然后阐述了HTTPS是如何通过加密、认证和完整性保护来解决这些问题的。HTTPS基于SSL/TLS协议,使用公开密钥加密技术,通过证书来验证通信方身份,确保通信安全。文章还探讨了证书的验证、中间人攻击以及HTTPS的握手过程,强调了HTTPS在安全性和资源消耗之间的平衡。
摘要由CSDN通过智能技术生成

目录

HTTP的缺点

通信使用明文可能会被窃听

通信的加密

内容的加密

不验证通信方的身份就可能遭遇伪装

任何人都可发起请求

查明对手的证书

无法证明报文完整性,可能已遭篡改

接收到的内容可能有误

如何防止篡改

HTTP+加密+认证+完整性保护 =HTTPS

HTTP加上加密处理和认证以及完整性保护后即是 HTTPS

HTTPS是身披SSL外壳的HTTP

相互交换密钥的公开密钥加密技术

共享密钥加密的困境

使用两把密钥的公开密钥加密

HTTPS采用混合加密机制

证明公开密钥正确性的证书

可证明组织真实性的EV SSL证书

用以确认客户端的客户端证书

认证机构信誉第一

由自认证机构颁发的证书称为自签名证书

HTTPS的安全通信机制

SSL和TLS

TLS1.3与1.2

HTTP 和 HTTPS 的区别?


HTTP的缺点

到现在为止,我们已了解到HTTP具有相当优秀和方便的一面,然而 HTTP并非只有好的一面,事物皆具两面性,它也是有不足之处的。
HTTP主要有这些不足,例举如下。

  • 通信使用明文(不加密),内容可能会被窃听
  • 不验证通信方的身份,因此有可能遭遇伪装
  • 无法证明报文的完整性,所以有可能已遭篡改

这些问题不仅在HTTP上出现,其他未加密的协议中也会存在这类问 题。

除此之外,HTTP本身还有很多缺点。而且,还有像某些特定的Web 服务器和特定的Web浏览器在实际应用中存在的不足(也可以说成 是脆弱性或安全漏洞),另外,用Java和PHP等编程语言开发的 Web应用也可能存在安全漏洞。

通信使用明文可能会被窃听

由于HTTP本身不具备加密的功能,所以也无法做到对通信整体(使 用HTTP协议通信的请求和响应的内容)进行加密。即,HTTP报文 使用明文(指未经过加密的报文)方式发送。

TCP/IP是可能被窃听的网络

如果要问为什么通信时不加密是一个缺点,这是因为,按 TCP/IP协议族的工作机制,通信内容在所有的通信线路上都有 可能遭到窥视。

所谓互联网,是由能连通到全世界的网络组成的。无论世界哪个 角落的服务器在和客户端通信时,在此通信线路上的某些网络设 备、光缆、计算机等都不可能是个人的私有物,所以不排除某个 环节中会遭到恶意窥视行为。

即使已经过加密处理的通信,也会被窥视到通信内容,这点和未 加密的通信是相同的。只是说如果通信经过加密,就有可能让人 无法破解报文信息的含义,但加密处理后的报文信息本身还是会 被看到的。

加密处理防止被窃听

在目前大家正在研究的如何防止窃听保护信息的几种对策中,最 为普及的就是加密技术。加密的对象可以有这么几个。

通信的加密

一种方式就是将通信加密。HTTP协议中没有加密机制,但可以通过和SSL (Secure Socket Layer, 安全套接层)或 TLS (Transport Layer Security, 安全层传输协议)的组合使用, 加密HTTP的通信内容。

用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP 通信了。与SSL组合使用的HTTP 被称为HTTPS(HTTP Secure, 超文本传输安全协议)或HTTP over SSL。

内容的加密

还有一种将参与通信的内容本身加密的方式。由于HTTP协议中 没有加密机制,那么就对HTTP协议传输的内容本身加密。即把 HTTP报文里所含的内容进行加密处理。

在这种情况下,客户端需要对HTTP报文进行加密处理后再发送 请求。

诚然,为了做到有效的内容加密,前提是要求客户端和服务器同 时具备加密和解密机制。主要应用在Web服务中。有一点必须引起注意,由于该方式不同于SSL或TLS将整个通信线路加密 处理,所以内容仍有被篡改的风险。稍后我们会加以说明。

不验证通信方的身份就可能遭遇伪装

HTTP协议中的请求和响应不会对通信方进行确认。也就是说存在“服 务器是否就是发送请求中URI真正指定的主机,返回的响应是否真的 返回到实际提出请求的客户端”等类似问题。

任何人都可发起请求

在HTTP协议通信时,由于不存在确认通信方的处理步骤,任何 人都可以发起请求。另外,服务器只要接收到请求,不管对方是 谁都会返回一个响应(但也仅限于发送端的IP地址和端口号没 有被Web服务器设定限制访问的前提下)。

HTTP协议的实现本身非常简单,不论是谁发送过来的请求都会返回响应,因此不确认通信方,会存在以下各种隐患。

  • 无法确定请求发送至目标的Web服务器是否是按真实意图返回响应的那台服务器。有可能是已伪装的Web服务器。
  • 无法确定响应返回到的客户端是否是按真实意图接收响应的那个客户端。有可能是已伪装的客户端。
  • 无法确定正在通信的对方是否具备访问权限。因为某些 Web服务器上保存着重要的信息,只想发给特定用户通信的权限。
  • 无法判定请求是来自何方、出自谁于。即使是无意义的请求也会照单全收。
  • 无法阻止海量请求 下的DoS攻击(Denial of Service, 拒绝服务攻击)。

查明对手的证书

虽然使用HTTP协议无法确定通信方,但如果使用SSL则可以。 SSL不仅提供加密处理,而且还使用了一种被称为证书的手段, 可用于确定方。

证书由值得信任的第三方机构颁发,用以证明服务器和客户端是 实际存在的。另外,伪造证书从技术角度来说是异常困难的一件 事。所以只要能够确认通信方(服务器或客户端)持有的证书, 即可判断通信方的真实意图。

无法证明报文完整性,可能已遭篡改

所谓完整性是指信息的准确度。若无法证明其完整性,通常也就意味 着无法判断信息是否准确。

接收到的内容可能有误

由于HTTP协议无法证明通信的报文完整性,因此,在请求或响 应送出之后直到对方接收之前的这段时间内,即使请求或响应的 内容遭到篡改,也没有办法获悉。

换句话说,没有任何办法确认,发出的请求响应和接收到的请 求响应是前后相同的。

比如,从某个Web网站上下载内容,是无法确定客户端下载的 文件和服务器上存放的文件是否前后一致的。文件内容在传输途 中可能已经被篡改为其他的内容。即使内容真的已改变,作为接 收方的客户端也是觉察不到的。

像这样,请求或响应在传输途中,遭攻击者拦截并篡改内容的攻 击称为中间人攻击(Man-in-the-Middle attack, MITM)。

如何防止篡改

虽然有使用HTTP协议确定报文完整性的方法,但事实上并不便 捷、可靠。其中常用的是MD5和SHA-I等散列值校验的方法, 以及用来确认文件的数字签名方法。

提供文件下载服务的Web网站也会提供相应的以PGP (PrettyGood Privacy, 完美隐私)创建的数字签名及MD5算法生成的散 列值。PGP是用来证明创建文件的数字签名,MD5是由单向函 数生成的散列值。不论使用哪一种方法,都需要操纵客户端的用 户本人亲自检查验证下载的文件是否就是原来服务器上的文件。 浏览器无法自动帮用户检查。

可惜的是,用这些方法也依然无法百分百保证确认结果正确。因 为PGP和MD5本身被改写的话,用户是没有办法意识到的。

为了有效防止这些弊端,有必要使用HTTPS。SSL提供认证和加 密处理及摘要功能。仅靠HTTP确保完整性是非常困难的,因此 通过和其他协议组合使用来实现这个目标。

HTTP+加密+认证+完整性保护 =HTTPS

HTTP加上加密处理和认证以及完整性保护后即是 HTTPS

如果在HTTP协议通信过程中使用未经加密的明文,比如在Web页 面中输入信用卡号,如果这条通信线路遭到窃听,那么信用卡号就暴 露了。

另外,对于HTTP来说,服务器也好,客户端也好,都是没有办法确认通信方的。因为很有可能并不是和原本预想的通信方在实际通信。 并且还需要考虑到接收到的报文在通信途中已经遭到篡改这一可能 性。

为了统一解决上述这些问题,需要在HTTP上再加入加密处理和认证 等机制。我们把添加了加密及认证机制的HTTP称为HTTPS (HTTPSecure)。

经常会在Web的登录页面和购物结算界面等使用HTTPS通信。使用 HTTPS通信时,不再用http://'而是改用https://。另外,当浏览器访 问HTTPS通信有效的Web网站时,浏览器的地址栏内会出现一个带 锁的标记。对HTTPS的显示方式会因浏览器的不同而有所改变。

HTTPS是身披SSL外壳的HTTP

HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL (Secure Socket Layer)和TLS (Transport Layer Security)协议代 替而已。

通常,HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通 信,再由SSL和TCP通信了。简言之,所谓HTTPS, 其实就是身披 SSL协议这层外壳的HTTP。

在采用SSL后,HTTP就拥有了HTTPS的加密、证书和完整性保护 这些功能。

SSL是独立于HTTP的协议,所以不光是HTTP协议,其他运行在应 用层的SMTP和Telnet等协议均可配合SSL协议使用。可以说SSL是 当今世界上应用最为广泛的网络安全技术。

相互交换密钥的公开密钥加密技术

在对SSL进行讲解之前,我们先来了解一下加密方法。SSL采用一种 叫做公开密钥加密(Public-key cryptography)的加密处理方式。

近代的加密方法中加密算法是公开的,而密钥却是保密的。通过这种 方式得以保持加密方法的安全性。

加密和解密都会用到密钥。没有密钥就无法对密码解密,反过来说, 任何人只要持有密钥就能解密了。如果密钥被攻击者获得,那加密也 就失去了意义。

共享密钥加密的困境

加密和解密同用一个密钥的方式称为共享密钥加密(Common key crypto system) , 也被叫做对称密钥加密。

以共享密钥方式加密时必须将密钥也发给对方。可究竟怎样才能 安全地转交?在互联网上转发密钥时,如果通信被监听那么密钥 就可会落入攻击者之手,同时也就失去了加密的意义。另外还得 设法安全地保管接收到的密钥。

使用两把密钥的公开密钥加密

公开密钥加密方式很好地解决了共享密钥加密的困难。

公开密钥加密使用一对非对称的密钥。一把叫做私有密钥(private key) , 另一把叫做公开密钥(public key)。顾名思义,私有密钥不能让其他任何人知道,而公开密钥则可以随意发 布,任何人都可以获得。

使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进 行加密处理,对方收到被加密的信息后,再使用自己的私有密钥 进行解密。利用这种方式,不需要发送用来解密的私有密钥,也 不必担心密钥被攻击者窃听而盗走。

另外,要想根据密文和公开密钥,恢复到信息原文是异常困难 的,因为解密过程就是在对离散对数进行求值,这并非轻而易举 就能办到。退一步讲,如果能对一个非常大的整数做到快速地因 式分解,那么密码破解还是存在希望的。但就目前的技术来看是 不太现实的。

HTTPS采用混合加密机制

HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密 机制。若密钥能够实现安全交换,那么有可能会考虑仅使用公开 密钥加密来通信。但是公开密钥加密与共享密钥加密相比,其处 理速度要慢。

所以应充分利用两者各自的优势,将多种方法组合起来用于通 信。在交换密钥环节使用公开密钥加密方式,之后的建立通信交 换报文阶段则使用共享密钥加密方式。

证明公开密钥正确性的证书

遗憾的是,公开密钥加密方式还是存在一些问题的。那就是无法证明 公开密钥本身就是货真价实的公开密钥。比如,正准备和某台服务器 建立公开密钥加密方式下的通信时,如何证明收到的公开密钥就是原 本预想的那台服务器发行的公开密钥。或许在公开密钥传输途中,真 正的公开密钥已经被攻击者替换掉了。

为了解决上述问题,可以使用由数字证书认证机构(CA, Certificate Authority)和其相关机关颁发的公开密钥证书。

数字证书认证机构处于客户端与服务器双方都可信赖的第三方机构的 立场上。威瑞信(VeriSign)就是其中一家非常有名的数字证书认证 机构。我们来介绍一下数字证书认证机构的业务流程。首先,服务器 的运营人员向数字证书认证机构提出公开密钥的申请。数字证书认证 机构在判明提出申请者的身份之后,会对已申请的公开密钥做数字签 名,然后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书 后绑定在一起。

服务器会将这份由数字证书认证机构颁发的公钥证书发送给客户端,以进行公开密钥加密方式通信。公钥证书也可叫做数字证书或直接称 为证书。

接到证书的客户端可使用数字证书认证机构的公开密钥,对那张证书 上的数字签名进行验证,一旦验证通过,客户端便可明确两件事:

一,认证服务器的公开密钥的是真实有效的数字证书认证机构。二, 服务器的公开密钥是值得信赖的。

此处认证机关的公开密钥必须安全地转交给客户端。使用通信方式 时,如何安全转交是一件很困难的事,因此,多数浏览器开发商发布 版本时,会事先在内部植入常用认证机关的公开密钥。

可证明组织真实性的EV SSL证书

证书的一个作用是用来证明作为通信一方的服务器是否规范,另 外一个作用是可确认对方服务器背后运营的企业是否真实存在。 拥有该特性的证书就是EV SSL证书C Extended Validation SSLCertificate)。

EVSSL证书是基于国际标准的认证指导方针颁发的证书。其严 格规定了对运营组织是否真实的确认方针,因此,通过认证的 Web网站能够获得更高的认可度。

持有EV SSL证书的Web网站的浏览器地址栏处的背景色是绿色 的,从视觉上就能一眼辨别出。而且在地址栏的左侧显示了SSL 证书中记录的组织名称以及颁发证书的认证机构的名称。

上述机制的原意图是为了防止用户被钓鱼攻击(Phishing) , 但 就效果上来讲,还得打一个问号。很多用户可能不了解EV SSL 证书相关的知识,因此也不太会留意它。

用以确认客户端的客户端证书

HTTPS中还可以使用客户端证书。以客户端证书进行客户端认 证,证明服务器正在通信的对方始终是预料之内的客户端,其作 用跟服务器证书如出一辙。

但客户端证书仍存在几处问题点。其中的一个问题点是证书的获 取及发布。

想获取证书时,用户得自行安装客户端证书。但由于客户端证书 是要付费购买的,且每张证书对应到每位用户也就意味着需支付 和用户数对等的费用。另外,要让知识层次不同的用户们自行安 装证书,这件事本身也充满了各种挑战。

现状是,安全性极高的认证机构可颁发客户端证书但仅用于特殊 用途的业务。比如那些可支撑客户端证书支出费用的业务。

例如,银行的网上银行就采用了客户端证书。在登录网银时不仅 要求用户确认输入1D和密码,还会要求用户的客户端证书,以 确认用户是否从特定的终端访问网银。

客户端证书存在的另一个问题点是,客户端证书毕竟只能用来证 明客户端实际存在,而不能用来证明用户本人的真实有效性。也 就是说,只要获得了安装有客户端证书的计算机的使用权限,也 就意味着同时拥有了客户端证书的使用权限。

认证机构信誉第一

SSL机制中介入认证机构之所以可行,是因为建立在其信用绝对 可靠这一大前提下的。然而,2011年7月,荷兰的一家名叫 DigiNotar的认证机构曾遭黑客不法入侵,颁布了google.com和 twitter.com等网站的伪造证书事件。这一事件从根本上撼动了 SSL的可信度。

因为伪造证书上有正规认证机构的数字签名,所以浏览器会判定 该证书是正当的。当伪造的证书被用做服务器伪装之时,用户根 本无法察觉到。

虽然存在可将证书无效化的证书吊销列表(Certificate Revocation List, CRL)机制,以及从客户端删除根证书颁发机构(Root

Certificate Authority, RCA)的对策,但是距离生效还需要一段 时间,而在这段时间内,到底会有多少用户的利益蒙受损失就不 得而知了。

由自认证机构颁发的证书称为自签名证书

如果使用OpenSSL这套开源程序,每个人都可以构建一套属于 自己的认证机构,从而自己给自己颁发服务器证书。但该服务器 证书在互联网上不可作为证书使用,似乎没什么帮助。

独立构建的认证机构叫做自认证机构,由自认证机构颁发的“无 用“证书也被戏称为自签名证书。

浏览器访问该服务器时,会显示“无法确认连接安全性”或该网 站的安全证书存在问题”等警告消息。

由自认证机构颁发的服务器证书之所以不起作用,是因为它无法 消除伪装的可能性。自认证机构能够产生的作用顶多也就是自己 对外宣称“我是oo"的这种程度。即使采用自签名证书,通过SSL 加密之后,可能偶尔还会看见通信处在安全状态的提示,可那也 是有问题的。因为就算加密通信,也不能排除正在和已经过伪 装的假服务器保持通信。

值得信赖的第三方机构介入认证,才能让已植入在浏览器内的认 证机构颁布的公开密钥发挥作用,并借此证明服务器的真实性。

中级认证机构的证书可能会变成自认证证书

多数浏览器内预先已植入备受信赖的认证机构的证书,但也有一 小部分浏览器会植入中级认证机构的证书。

对于中级认证机构颁发的服务器证书,某些浏览器会以正规的证 书来对待,可有的浏览器会当作自签名证书。

HTTPS的安全通信机制

为了更好地理解HTTPS, 我们来观察一下HTTPS的通信步骤。

  1. 用户在浏览器发起HTTPS请求(如 https://www.mogu.com/),默认使用服务端的443端口进行连接;

  2. HTTPS需要使用一套CA数字证书,证书内会附带一个公钥Pub,而与之对应的私钥Private保留在服务端不公开;

  3. 服务端收到请求,返回配置好的包含公钥Pub的证书给客户端;

  4. 客户端收到证书,校验合法性,主要包括是否在有效期内、证书的域名与请求的域名是否匹配,上一级证书是否有效(递归判断,直到判断到系统内置或浏览器配置好的根证书),如果不通过,则显示HTTPS警告信息,如果通过则继续;

  5. 客户端生成一个用于对称加密的随机Key,并用证书内的公钥Pub进行加密,发送给服务端;

  6. 服务端收到随机Key的密文,使用与公钥Pub配对的私钥Private进行解密,得到客户端真正想发送的随机Key

  7. 服务端使用客户端发送过来的随机Key对要传输的HTTP数据进行对称加密,将密文返回客户端;

  8. 客户端使用随机Key对称解密密文,得到HTTP数据明文;

  9. 后续HTTPS请求使用之前交换好的随机Key进行对称加解密。

步骤1: 客户端通过发送Client Hello报文开始SSL通信。报文中包 含客户端支持的SSL的指定版本、加密组件(Cipher Suite)列表(所 使用的加密算法及密钥长度等)。

(1) 支持的协议版本,比如TLS 1.0版。
(2) 一个客户端生成的随机数 random1,稍后用于生成"对话密钥"。
(3) 支持的加密方法,比如RSA公钥加密。
(4) 支持的压缩方法。

步骤2: 服务器可进行SSL通信时,会以Server Hello报文作为应答。和客户端一样,在报文中包含SSL版本以及加密组件。服务器的 加密组件内容是从接收到的客户端加密组件内筛选出来的。

(1) 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
(2) 一个服务器生成的随机数random2,稍后用于生成"对话密钥"。
(3) 确认使用的加密方法,比如RSA公钥加密。
(4) 服务器证书。

步骤3: 之后服务器发送Certificate报文。报文中包含公开密钥证书。

步骤4: 最后服务器发送Server Hello Done报文通知客户端,最初阶 段的SSL握手协商部分结束。

步骤5: SSL第一次握手结束之后,客户端以Client Key Exchange报 文作为回应。报文中包含通信加密中使用的一种被称为Pre-master secret的随机密码串。该报文已用步骤3中的公开密钥进行加密。

注意:客户端收到证书之后会首先会进行验证,然后生成随机数

验证流程:

  1. 我们知道CA机构在签发证书的时候,都会使用自己的私钥对证书进行签名
    证书里的签名算法字段 sha256RSA 表示,CA机构使用sha256对证书进行摘要,然后使用RSA算法对摘要进行私钥签名,而我们也知道RSA算法中,使用私钥签名之后,只有公钥才能进行验签。
  2. 如果我们使用的是购买的证书,那么很有可能,颁发这个证书的CA机构的公钥已经预置在操作系统中。这样浏览器就可以使用CA机构的公钥对服务器的证书进行验签。确定这个证书是不是由正规的CA机构颁发的。验签之后得到CA机构使用sha256得到的证书摘要,然后客户端再使用sha256对证书内容进行一次摘要,如果得到的值和验签之后得到的摘要值相同,则表示证书没有被修改过。
  3. 如果验证通过,就会显示上面的安全字样,如果服务器购买的证书是更高级的EV类型,就会显示出购买证书的时候提供的企业名称。如果没有验证通过,就会显示不安全的提示。

生成随机数:

验证通过之后,客户端会生成一个随机数pre-master secret,然后使用证书中的公钥进行加密,然后传递给服务器端

步骤6: 接着客户端继续发送Change Cipher Spec报文。该报文会提 示服务器,在此报文之后的通信会采用Pre-master secret密钥加密。

步骤7: 客户端发送Finished报文。该报文包含连接至今全部报文的 整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确 解密该报文作为判定标准。

步骤8: 服务器同样发送Change Cipher Spec报文。

步骤9: 服务器同样发送Finished报文。

步骤10: 服务器和客户端的Finished报文交换完毕之后,SSL连接 就算建立完成。当然,通信会受到SSL的保护。从此处开始进行应用 层协议的通信,即发送HTTP请求。

步骤11: 应用层协议通信,即发送HTTP响应。

注意:

服务器收到使用公钥加密的内容,在服务器端使用私钥解密之后获得随机数pre-master secret,然后根据radom1、radom2、pre-master secret通过一定的算法得出session Key和MAC算法秘钥,作为后面交互过程中使用对称秘钥。同时客户端也会使用radom1、radom2、pre-master secret,和同样的算法生成session Key和MAC算法的秘钥。

再后续的交互中就使用session Key和MAC算法的秘钥对传输的内容进行加密和解密。

具体的步骤是先使用MAC秘钥对内容进行摘要,然后把摘要放在内容的后面使用sessionKey再进行加密。对于客户端发送的数据,服务器端收到之后,需要先使用client_write_key进行解密,然后使用client_write_MAC_key对数据完整性进行验证。服务器端发送的数据,客户端会使用server_write_key和server_write_MAC_key进行相同的操作。

步骤12: 最后由客户端断开连接。断开连接时,发送close_notify报 文。上图做了一些省略,这步之后再发送TCP FIN报文来关闭与TCP 的通信。

在以上流程中,应用层发送数据时会附加一种叫做MAC (Message Authentication Code)的报文摘要。MAC能够查知报文是否遭到篡 改,从而保护报文的完整性。

下面是对整个流程的图解。图中说明了从仅使用服务器端的公开密钥 证书(服务器证书)建立HTTPS通信的整个过程。

 CBC模式(Cipher Block Chaining)又名密码分组链接模式。在此模式下,将前 一个明文块加密处理后和下一个明文块做XOR运算,使之重叠,然后再对运算 结果做加密处理。对第一个明文块做加密时,要么使用前一段密文的最后一块,要么利用外部生成的初始向量(initial vector, IV)。   

SSL和TLS

HTTPS使用SSL (Secure Socket Layer)和TLS (Transport Layer Security)这两个协议。

SSL技术最初是山浏览器开发商网景通信公司率先倡导的,开发 过SSL3.0之前的版本。目前主导权已转移到IETF (Internet

Engineering Task Force, Internet工程任务组)的手中。

IETF以SSL3.0为基准,后又制定了TLS1.O、TLS1.1和TLS1.2。TSL是以SSL为原型开发的协议,有时会统一称该协议 为SSL。当前主流的版本是SSL3.0和TLS1.O。

由于SSLl.O协议在设计之初被发现出了问题,就没有实际投入 使用。SSL2.0也被发现存在问题,所以很多浏览器直接废除了 该协议版本。

HTTPS也存在一些问题,那就是当使用SSL时,它的处理速度 会变慢。

SSL的慢分两种。一种是指通信慢。另一种是指由于大量消耗 CPU及内存等资源,导致处理速度变慢。

和使用HTTP相比,网络负载可能会变慢2到100倍。除去和 TCP连接、发送HTTP请求响应以外,还必须进行SSL通信, 因此整体上处理通信量不可避免会增加。

另一点是SSL必须进行加密处理。在服务器和客户端都需要进行 加密和解密的运算处理。因此从结果上讲,比起HTTP会更多地 消耗服务器和客户端的硬件资源,导致负载增强。

针对速度变慢这一问题,并没有根本性的解决方案,我们会使用 SSL加速器这种(专用服务器)硬件来改善该问题。该硬件为

SSL通信专用硬件,相对软件来讲,能够提高数倍SSL的计算速 度。仅在SSL处理时发挥SSL加速器的功效,以分担负载。

既然HTTPS那么安全可靠,那为何所有的Web网站不一直使用 HTTPS?

其中一个原因是,因为与纯文本通信相比,加密通信会消耗更多的 CPU及内存资源。如果每次通信都加密,会消耗相当多的资源,平 摊到一台计算机上时,能够处理的请求数景必定也会随之减少。

因此,如果是非敏感信息则使用HTTP通信,只有在包含个人信息 等敏感数据时,才利用HTTPS加密通信。

特别是每当那些访问量较多的Web网站在进行加密处理时,它们 所承担着的负载不容小觑。在进行加密处理时,并非对所有内容都 进行加密处理,而是仅在那些需要信息隐藏时才会加密,以节约资 源。

除此之外,想要节约购买证书的开销也是原因之一。

要进行HTTPS通信,证书是必不可少的。而使用的证书必须向认 证机构(CA)购买。证书价格可能会根据不同的认证机构略有不 同。通常,一年的授权需要数万日元(现在一万日元大约折合600 人民币)。

那些购买证书并不合算的服务以及一些个人网站,可能只会选择采 用HTTP的通信方式。

TLS1.3与1.2

最近学习了一下TLS几个版本的协议,今天来着重说明下TLS1.3的握手过程,通过对握手过程的说明你就可以清晰的明白为什么TLS1.3要比TLS1.2快那么多了,话不多说,先上TLS1.3的握手流程图:                 

图中的ClientHello具体内容说明如下:

(1)客户端支持的ssl的最高版本号

(2)客户端支持的加密套件列表

(3)确定的会话ID

(4)客户端所支持的压缩算法列表

图中ServerHello的具体内容如下:

(1)服务端选择的ssl的版本(选择方式为选择客户端和服务端最高版本中的较低的那一个)

(2)服务端选择的密码套件

(3)会话ID

(4)客户端选择的压缩算法

那么TLS1.3比TLS1.2到底快在哪呢?我们再来看看TLS1.2的握手流程

 TLS1.2的ClientHello和ServerHello和TLS1.3中的稍有不同,我们来看一下TLS1.2中的ClientHello和ServerHello的内容:

ClientHello的内容如下:

(1)客户端支持的ssl的最高版本号

(2)客户端支持的加密套件列表

(3)确定的会话ID

(4)客户端所支持的压缩算法列表

(5)一个用于生成主秘钥的32位随机数

ServerHello的内容如下:

(1)服务端选择的ssl的版本(选择方式为选择客户端和服务端最高版本中的较低的那一个)

(2)服务端选择的密码套件

(3)会话ID

(4)客户端选择的压缩算法

(5)一个用于生成主秘钥的32位随机数

我们可以看到,TLS1.2比TLS1.3在握手过程中多了一次握手,为啥会多这一次握手嘞?首先我们要理解握手的本质是为了什么,握手是为了协商出一个client和server端都认可的一个对称秘钥,典型的秘钥协商算法有两种,RSA和ECDH,简明介绍下这两种算法会让你对这个过程更加清晰。

首先是RSA的秘钥协商过程,RSA有一个很棒的特性:RSA算法给予server端一个公钥和私钥,一段消息既可以用公钥加密,然后用私钥解密,也可以用私钥加密,用公钥解密。公钥是什么呢?你可以理解成服务器从CA那得到的证书。

好,我们来看下TLS1.2的秘钥协商过程,首先client发一个client_hello,然后server端收到这个消息后,回传一个server_hello(client_hello和server_hello中的内容就在上面讲了),一个证书(关键点),client收到证书后,用公钥(也就是证书)加密一段随机数发回给server,server收到后用私钥解密得到这段随机数,这段随机数就作为对称加密的秘钥了,至此握手就完成。

然后我们来看下ECDH的秘钥协商过程,首先EC的意思是椭圆曲线,这个EC提供了一个很厉害的性质,你在曲线上找一个点P,给定一个整数K,求解Q=KP很容易,给定一个点P,Q,知道Q =KP,求K却是个难题。

在这个背景下,给定一个大家都知道的大数G,client在每次需要和server协商秘钥时,生成一段随机数a,然后发送A=a*G给server,server收到这段消息(a*G)后,生成一段随机数b,然后发送B=b*G给client,然后server端计算(a*G)*b作为对称秘钥,client端收到后b*G后计算a*(G*b),因为(a*G)*b = a*(G*b),所以对称秘钥就是a*G*b啦,攻击者只能截获A=a*G和B=b*G,由于椭圆曲线难题,知道A和G是很难计算a和b的,也就无法计算a*G*b了(当然,实际上的计算过程和原理证明不是这么简单的,中间还有一个取模的过程,以及取模过程的交换律和结合律证明,但是本质思想和这个是差不多的)。

反应在TLS1.2中,client发送client_hello,server收到后发送server_hello和ECC证书(B =b*G),client收到后就生成随机数a,然后发送a*G给server,并记录秘钥,server收到a*G后计算对称秘钥,握手就结束了。而为什么在TLS1.3会有区别呢,留意下TLS1.3图中的key_share,这段的功能就是直接记录了a*G,然后包含在client_hello中。然后server收到后在server_hello的key_share段中记录b*G。所以TLS1.3一个RTT就搞定握手了。

至此,你应该已经对于为什么TLS1.3要快一个RTT有一定概念了吧,TLS1.3舍弃了RSA的协商过程,然后基于ECDH的算法优化了整个过程。(这里提下ECDHE,多的这个E是extemporaneous,临时的意思,临时的是ECC证书中的随机数,每次都会重新生成,也是是b*G中的b)。

当然,TLS1.3不仅仅只做了这么一点优化,还有典型的连接回复过程,TLS1.3做到了0-RTT的过程,TLS1.2重建会话过程如下:

 (1)client发送ClientHello,并携带session id,这个session id就是用于回复会话,server端会存储关于session id的对应的通信秘钥

(2)server回复ServerHello,ChangeCipherSpec和Finished

而TLS1.3呢

 可以看出,TLS1.3是对TLS1.2过程的优化,也就是直接加密数据然后发送。

当然了,TLS1.3还有很多其他的特性,这里稍微提一下,TLS1.3采用少即是多的思想,TLS1.2中原有的大量特性都被删除了,这些特性包括:

RSA密钥传输——不支持前向安全性
CBC模式密码——易受BEAST和Lucky 13攻击
RC4流密码——在HTTPS中使用并不安全
SHA-1哈希函数——建议以SHA-2取而代之
任意Diffie-Hellman组——CVE-2016-0701漏洞
输出密码——易受FREAK和LogJam攻击
TLS 1.3版本是对规范的重大修改,一些工作方式也非常不同:

有一些新的密码套件仅在TLS 1.3下工作。一些旧的密码套件无法用于TLS 1.3连接。
新的密码套件定义方式不同,且并未详细规定证书类型(如RSA、DSA、ECDSA)或密钥交换机制(如DHE或ECHDE)。这对密码套件的配置有暗示作用。
客户端在客户问候消息(ClientHello)中提供一个“key_share”。这会对“组”配置产生影响。
直到主握手完成以后,会话才会建立。在握手结束和会话建立之间可能会有一个间隙(理论上,会话可能根本不会建立),并可能对会话恢复代码产生影响。
在TLS 1.3版本中,重新磋商是不可能的。
现在大部分握手都会被加密。
更多类型的消息现在可以有扩展(这对定制扩展API和证书透明系统有影响)。
在TLS 1.3连接中不再允许使用DSA证书。

HTTP 和 HTTPS 的区别?

端口 :HTTP 的 URL 由“http://”起始且默认使用端口80,而HTTPS的URL由“https://”起始且默认使用端口443。

安全性和资源消耗: HTTP 协议运行在 TCP 之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS 是运行在 SSL/TLS 之上的 HTTP 协议,SSL/TLS 运行在 TCP 之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以说,HTTP 安全性没有 HTTPS 高,但是 HTTPS 比 HTTP 耗费更多服务器资源。

对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有 DES、AES 等;

非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有 RSA、DSA 等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值