全球彩票平台_全球彩票注册平台|官网下载地址

热门关键词: 全球彩票平台,全球彩票注册平台,全球彩官网下载地址

我也想来谈谈HTTPS,HTTPS协议的实现原理

我也想来谈谈HTTPS

2016/11/04 · 基础技术 · HTTPS

本文作者: 伯乐在线 - ThoughtWorks 。未经作者许可,禁止转载!
欢迎加入伯乐在线 专栏作者。

在上一篇文章中详细讲解了TCP/IP协议栈中的几个协议,其中就有对HTTP做了一个比较详细的讲解。我们知道,HTTP协议基于TCP进行传输的,其中传输的内容全都裸露在报文中,如果我们获取了一个HTTP消息体,那我们可以知道消息体中所有的内容。这其实存在很大的风险,如果HTTP消息体被劫持,那么整个传输过程将面临:

昨天顺手把站点上了HTTPS,但是为什么要上HTTPS,不能因为你浏览器给我显示‘安全’,我就认为他是安全的,还是要知根知底,不能知其然而不知其所以然,因此抽空了解一下。本文所涉及的加密算法原理不做详解,具体可Google

注:本文参考自网络上的多篇HTTPS相关文章,本人根据自己的理解,进行一些修改,综合。

安全越来越被重视

2014年8月份Google在官博上发表《 HTTPS as a ranking signal 》。表示调整其搜索引擎算法,采用HTTPS加密的网站在搜索结果中的排名将会更高,鼓励全球网站采用安全度更高的HTTPS以保证访客安全。

同一年(2014年),百度开始对外开放了HTTPS的访问,并于3月初正式对全网用户进行了HTTPS跳转。对百度自身来说,HTTPS能够保护用户体验,降低劫持/隐私泄露对用户的伤害。

而2015年,百度开放收录HTTPS站点公告。全面支持HTTPS页面直接收录;百度搜索引擎认为在权值相同的站点中,采用HTTPS协议的页面更加安全,排名上会优先对待。

  • 窃听风险(eavesdropping):第三方可以获知通信内容。
  • 篡改风险(tampering):第三方可以修改通信内容。
  • 冒充风险(pretending):第三方可以冒充他人身份参与通信。
对称加密

symmetric encryption

对称加密所指的是加密和解密使用的相同密钥的加密算法,即使用密钥S加密的数据同时用密钥S解密。这种加密方法通常效率较高,但要求两个交换数据的实体都要持有相同的密钥。对称加密的关键问题是,密钥如何传递。常见的对称加密算法有DES、AES、RC4等。

图片 1对称加密

1. 必要的加密解密基础知识

“HTTP = 不安全”,为什么说HTTP不安全?

HTTP报文是由一行行简单字符串组成的,是纯文本,可以很方便地对其进行读写。一个简单事务所使用的报文:

图片 2

HTTP传输的内容是明文的,你上网浏览过、提交过的内容,所有在后台工作的实体,比如路由器的所有者、网线途径路线的不明意图者、省市运营商、运营商骨干网、跨运营商网关等都能够查看。举个不安全的例子:

一个简单非HTTPS的登录采用POST方法提交包含用户名和密码的表单,会发生什么?

图片 3

POST表单发出去的信息,没有做任何的安全性信息置乱(加密编码),直接编码为下一层协议(TCP层)需要的内容,所有用户名和密码信息一览无余,任何拦截到报文信息的人都可以获取到你的用户名和密码,是不是想想都觉得恐怖?

那么问题来了,怎么样才是安全的呢?

正因为HTTP协议的这个缺点, HTTP变成了一种不安全的协议。

非对称加密

asymmetric cryptographic

非对称加密与对称加密相反,非对称加密需要2个密钥:私钥(Private Key)和公钥(Public Key),这两者总是成对出现,并且公钥加密的数据只有私钥能够解密,相反,私钥加密的内容只有公钥能够解密;通常公钥是对外公开的,任何人都可以获取到,私钥不对外公开的。由于公钥是对外公开的,因此私钥加密的内容只要获得公钥的任何人都可以解开。非对称加密与对称加密相比,因为其计算复杂,因此速度较慢。非对称加密对加密内容的长度还有限制,被加密的内容长度不能大于密钥长度。比如现在的密钥长度时2048位,那么被加密的内容长度不能超过256字节。常见的非对称加密算法有RSA、Elgamal、ECC等。

图片 4非对称加密

非对称加密的作用:

  • 防止信息泄露:公钥加密的只有私钥能解
  • 身份验证:利用数字签名

1)对称加密算法:就是加密和解密使用同一个密钥的加密算法。因为加密方和解密方使用的密钥相同,所以称为称为对称加密,也称为单钥加密方法。

对于包含用户敏感信息的网站需要进行怎样的安全防护?

对于一个包含用户敏感信息的网站(从实际角度出发),我们期望实现HTTP安全技术能够满足至少以下需求:

  • 服务器认证(客户端知道它们是在与真正的而不是伪造的服务器通话)
  • 客户端认证(服务器知道它们是在与真正的而不是伪造的客户端通话)
  • 完整性(客户端和服务器的数据不会被修改)
  • 加密(客户端和服务器的对话是私密的,无需担心被窃听)
  • 效率(一个运行的足够快的算法,以便低端的客户端和服务器使用)
  • 普适性(基本上所有的客户端和服务器都支持这个协议)
  • 管理的可扩展性(在任何地方的任何人都可以立即进行安全通信)
  • 适应性(能够支持当前最知名的安全方法)
  • 在社会上的可行性(满足社会的政治文化需要)

互联网加密通信协议的历史,几乎与互联网一样长。

数字摘要/消息摘要

digital digest/message digest

数字摘要是将数据通过单向HASH函数进行计算生成一串固定长度的散列值,不同数据产生的散列值是不同的(应该说是基本不可能相同,但还是存在“碰撞的概率”,比如MD5已经证明可以快速生成相同散列值的不同明文),相同的数据产生的散列值一定是相同的,因此可以通过该散列值用来保证数据防篡改和完整性(因为都会导致数字摘要发生改变)。常用的数字摘要算法有MD5、SHA1、SHA256等。

    优点是:加密和解密运算速度快,所以对称加密算法通常在消息发送方需要加密大量数据时使用;

HTTPS协议来解决安全性的问题:HTTPS和HTTP的不同 – TLS安全层(会话层)

超文本传输安全协议(HTTPS,也被称为HTTP over TLS,HTTP over SSL或HTTP Secure)是一种网络安全传输协议。

HTTPS开发的主要目的,是提供对网络服务器的认证,保证交换信息的机密性和完整性。

它和HTTP的差别在于,HTTPS经由超文本传输协议进行通信,但利用SSL/TLS來对包进行加密,即所有的HTTP请求和响应数据在发送到网络上之前,都要进行加密。如下图:
图片 5
安全操作,即数据编码(加密)和解码(解密)的工作是由SSL一层来完成,而其他的部分和HTTP协议没有太多的不同。更详细的TLS层协议图:
图片 6
SSL层是实现HTTPS的安全性的基石,它是如何做到的呢?我们需要了解SSL层背后基本原理和概念,由于涉及到信息安全和密码学的概念,我尽量用简单的语言和示意图来描述。

1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1.0版,但是未发布。

1995年,NetScape公司发布SSL 2.0版,很快发现有严重漏洞。

1996年,SSL 3.0版问世,得到大规模应用。

1999年,互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版TLS 1.0版。

2006年和2008年,TLS进行了两次升级,分别为TLS 1.1版和TLS 1.2版。最新的变动是2011年TLS 1.2的修订版。

消息认证

信息摘要只能用来解决数据的完整性问题,却无法解决消息的认证问题,因为HASH函数是任何人都可以使用的,第三方伪装发送者发送数据和数字摘要也能通过接收者的完整检查,却无法识别第三方的伪装,这是就需要消息认证了。

    缺点是:安全性差,如果一方的密钥遭泄露,那么整个通信就会被破解。另外加密之前双方需要同步密钥;

SSL层背后基本原理和概念

介绍HTTPS背后的基本原理和概念,涉及到的概念:加密算法,数字证书,CA中心等。

加密算法
加密算法严格来说属于编码学(密码编码学),编码是信息从一种形式或格式转换为另一种形式的过程。解码,是编码的逆过程(对应密码学中的解密)。

图片 7

对称加密算法

加密算法主要分两类:对称和非对称加密算法。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。
图片 8

但是对称加密算法有一个问题:一旦通信的实体多了,那么管理秘钥就会成为问题。

图片 9
非对称加密算法(加密和签名)

非对称加密算法需要两个密钥:公开密钥(public key)私有密钥(private key)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密,这个反过来的过程叫作数字签名(因为私钥是非公开的,所以可以验证该实体的身份)。

他们就像是锁和钥匙的关系。Alice把打开的锁(公钥)发送给不同的实体(Bob,Tom),然后他们用这把锁把信息加密,Alice只需要一把钥匙(私钥)就能解开内容。

图片 10

那么,有一个很重要的问题:加密算法是如何保证数据传输的安全,即不被破解?有两点:

1.利用数学计算的困难性(比如:离散对数问题)
2.加密算法是公开的,关键在于秘钥,密码学中有柯克霍夫斯基原则,即加密算法的安全性依赖的是密钥的保密而不是算法的保密,因此,保证秘钥的定期更换是非常重要的。

数字证书,用来实现身份认证和秘钥交换

数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息,使用的加密算法以及公开密钥的文件。

图片 11

以数字证书为核心的加密技术可以对网络上传输的信息进行加密和解密、数字签名和签名验证,确保网上传递信息的机密性、完整性及交易的不可抵赖性。使用了数字证书,即使您发送的信息在网上被他人截获,甚至您丢失了个人的账户、密码等信息,仍可以保证您的账户、资金安全。(比如,支付宝的一种安全手段就是在指定电脑上安装数字证书)

身份认证(我凭什么信任你)

身份认证是建立每一个TLS连接不可或缺的部分。比如,你有可能和任何一方建立一个加密的通道,包括攻击者,除非我们可以确定通信的服务端是我们可以信任的,否则,所有的加密(保密)工作都没有任何作用。

而身份认证的方式就是通过证书以数字方式签名的声明,它将公钥与持有相应私钥的主体(个人、设备和服务)身份绑定在一起。通过在证书上签名,CA可以核实与证书上公钥相应的私钥为证书所指定的主体所拥有。
图片 12

目前,应用最广泛的是TLS 1.0,接下来是SSL 3.0。但是,主流浏览器都已经实现了TLS 1.2的支持。

消息认证码MAC

message authentication code

消息认证码是将对称加密和数字摘要相结合起来的技术,首先将数据通过HASH函数生成数字摘要,然后将摘要通过双方共享的密钥加密生成消息认证码,最后将认证码一起发送给接受者。接受者在收到消息后,使用相同的方法生成消息认证码,然后与收到的消息认证码进行对比,如果认证码一致,那么数据则通过认证。

存在2个问题:

  • 因为使用的是对称加密算法,那么依然存在密钥如何传输的问题;
  • 无法防止否认,因为密钥是双方共享的,而接收者认为数据是对方传递过来的,而对方可以否认传输过该条信息,并且可以生成该条信息是由接收者自己产生的。

    图片 13消息认证码

    常用对称加密算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES等;

了解TLS协议

HTTPS的安全主要靠的是TLS协议层的操作。那么它到底做了什么,来建立一条安全的数据传输通道呢?

TLS握手:安全通道是如何建立的

图片 14

0 ms
TLS运行在一个可靠的TCP协议上,意味着我们必须首先完成TCP协议的三次握手。

56 ms
在TCP连接建立完成之后,客户端会以明文的方式发送一系列说明,比如使用的TLS协议版本,客户端所支持的加密算法等。

84 ms
服务器端拿到TLS协议版本,根据客户端提供的加密算法列表选择一个合适的加密算法,然后将选择的算法连同服务器的证书一起发送到客户端。

112 ms
假设服务器和客户端协商后,得到一个共同的TLS版本和加密算法,客户端检测服务端的证书,非常满意,客户端就会要么使用RSA加密算法(公钥加密)或者DH秘钥交换协议,得到一个服务器和客户端公用的对称秘钥。

由于历史和商业原因,基于RSA的秘钥交换占据了TLS协议的大片江山:客户端生成一个对称秘钥,使用服务器端证书的公钥加密,然后发送给服务器端,服务器端利用私钥解密得到对称秘钥。

140 ms
服务器处理由客户端发送的秘钥交换参数,通过验证MAC(Message Authentication Code,消息认证码)来验证消息的完整性,返回一个加密过的“Finished”消息给客户端。

在密码学中,消息认证码(英语:Message Authentication Code,缩写为MAC),又译为消息鉴别码、文件消息认证码、讯息鉴别码、信息认证码,是经过特定算法后产生的一小段信息,检查某段消息的完整性,以及作身份验证。它可以用来检查在消息传递过程中,其内容是否被更改过,不管更改的原因是来自意外或是蓄意攻击。同时可以作为消息来源的身份验证,确认消息的来源。

168 ms
客户端用协商得到的堆成秘钥解密“Finished”消息,验证MAC(消息完整性验证),如果一切ok,那么这个加密的通道就建立完成,可以开始数据传输了。

在这之后的通信,采用对称秘钥对数据加密传输,从而保证数据的机密性。

到此为止,我是想要介绍的基本原理的全部内容,但HTTPS得知识点不止如此,还有更多说,现在来点干货(实战)!!

TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。

数字签名

Digital Signature

数字签名是将非对称加密和数字摘要相结合起来的技术,首先将数据通过HASH函数生成数字摘要,然后将摘要用私钥进行加密生成数字签名,最后将数据和数字签名一起发送给接收者(私钥进行签名,公钥只能用来验证签名)。接收者在收到消息后,通过公钥解密数字签名,获得数字摘要,然后对数据用相同的HASH函数计算数字摘要,然后与解密获得的数字摘要进行对比,如果一样证明数据没有被篡改过。

  1. 通过非对称加密传递数字摘要,能保证摘要一定是私钥拥有者发送的;
  2. 通过数字摘要,能够确数据一定是没有被篡改过的。

图片 15数字签名

2)非对称加密算法:而非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。

那么,教练,我想用HTTPS

图片 16

选择合适的证书,Let’s Encrypt(It’s free, automated, and open.)是一种不错的选择

ThoughtWorks在2016年4月份发布的技术雷达中对Let’s Encrypt项目进行了介绍:

从2015年12月开始,Let’s Encrypt项目从封闭测试阶段转向公开测试阶段,也就是说用户不再需要收到邀请才能使用它了。Let’s Encrypt为那些寻求网站安全的用户提供了一种简单的方式获取和管理证书。Let’s Encrypt也使得“安全和隐私”获得了更好的保障,而这一趋势已经随着ThoughtWorks和我们许多使用其进行证书认证的项目开始了。

据Let’s Encrypt发布的数据来看,至今该项目已经颁发了超过300万份证书——300万这个数字是在5月8日-9日之间达成的。Let’s Encrypt是为了让HTTP连接做得更加安全的一个项目,所以越多的网站加入,互联网就回变得越安全。

1 赞 1 收藏 评论

我们知道HTTP的缺点就是报文裸露没有加密,如果我们对报文进行加密,那么这个缺点就被解决了。通过HTTP和SLL的结合,诞生的HTTPS就是我们这篇文章的主角。

使用对称加密

对称加密计算简单,速度快,是用来加密数据的好方法,但是对于互联网上节点,要保证数据安全,就必须保证节点与节点之间通信所使用的密钥是不一样的。那么对于互联网上的服务节点,要对其他网络节点提供服务,就需要知道对方所使用的密钥,即服务器需要知道网络所有客户端所使用的密钥;这显然是不现实的。

图片 17对称加密传输

    公钥和私钥是一对:公钥用来加密,私钥解密,而且公钥是公开的,私钥是自己保存的,不需要像对称加密那样在通信之前要先同步秘钥。

关于作者:ThoughtWorks

图片 18

ThoughtWorks是一家全球IT咨询公司,追求卓越软件质量,致力于科技驱动商业变革。擅长构建定制化软件产品,帮助客户快速将概念转化为价值。同时为客户提供用户体验设计、技术战略咨询、组织转型等咨询服务。 个人主页 · 我的文章 · 84 ·   

图片 19

4.1 加密算法

据记载,公元前400年,古希腊人就发明了置换密码;在第二次世界大战期间,德国军方启用了“恩尼格玛”密码机,所以密码学在社会发展中有着广泛的用途。

对称加密有流式、分组两种,加密和解密都是使用的同一个密钥。例如:DES、AES-GCM、ChaCha20-Poly1305等

非对称加密加密使用的密钥和解密使用的密钥是不相同的,分别称为:公钥、私钥,公钥和算法都是公开的,私钥是保密的。非对称加密算法性能较低,但是安全性超强,由于其加密特性,非对称加密算法能加密的数据长度也是有限的。例如:RSA、DSA、ECDSA、 DH、ECDHE

哈希算法将任意长度的信息转换为较短的固定长度的值,通常其长度要比信息小得多,且算法不可逆。例如:MD5、SHA-1、SHA-2、SHA-256 等

数字签名签名就是在信息的后面再加上一段内容(信息经过hash后的值),可以证明信息没有被修改过。hash值一般都会加密后再和信息一起发送,以保证这个hash值不被修改。

使用非对称加密

那么既然对称机密不行,那么使用非对称加密呢?私钥由服务器拥有,并将公钥公开,那么客户端将请求用公钥加密,传递给服务器,服务器用私钥解密获得请求,处理请求后,再通过私钥加密,返回给客户端。这样看起来貌似还可以,但不要忘了,公钥可是公开的,公钥加密的固然只有拥有私钥的服务器才能解,但服务器的返回数据,却可以被任意拥有公钥的节点解开,因此非对称加密仅能保证单向安全。不仅如此,非对称加密还有以下限制:

  1. 计算复杂,速度较慢;
  2. 长度有所限制,所加密的内容不能超过密钥长度。

    图片 20非对称加密传输

    有点是:安全性更好,私钥是自己保存的,不需要像对称加密那样在通信之前要先同步秘钥。

4.2 对HTTP消息体对称加密

图片 21对称加密

在经过TCP的三次握手之后,客户端和服务器开启了连接,如果对后续双方传输的内容进行对称加密,那么理论上我们在本次传输中防止了内容裸露。但是由于对称加密使用秘钥在两端是一样的,要维持每个客户端的秘钥不一致整套加密才有意义,这样将会产生海量的秘钥,维护困难。另外,因为对称加密需要双方协商一致,一般可用提前约定,或者使用前传输秘钥,不管是哪种方式,都很容易导致秘钥邪泄漏。只要黑客获取到秘钥,那么所谓的加密传输就如同虚设了。

混合加密

使用对称加密不行,使用非对称加密也不行,那么还有其他办法吗?既然对称加密没办法一开始就存储下来,那么在通信的时候协商好不久行了,由客户端告诉服务器端对称加密的密钥,该密钥通过非对称加密来传递,这样就能保证密钥只能被服务端获取,之后双方在通过协商好的对称密钥进行通信,既能满足双向通信安全,又能提高加解密的速度,めでたしめでたし。这就是HTTPS传输数据的基本原理,当然实现还要考虑各种各样的事情。

图片 22混合加密

HTTPS默认使用443端口

HTTPS的提出主要解决以下3个问题:

  • 内容加密:保证数据传输安全
  • 身份认证:确认网站的真实性
  • 数据完整:防止内容被篡改

    缺点是:加密和解密花费时间长、速度慢,只适合对少量数据进行加密。

4.3 对HTTP消息体进行非对称加密

我们使用非对称加密试试。

图片 23非对称加密

用户使用公钥进行加密之后,消息体能够安全的抵达服务器,但是在服务器返回数据的时候,黑客截取到信息之后,能够通过公钥对响应的内容进行解密,最后进行篡改,导致这个加密方案失败。另外,非对称加密不适用与数量太大的报文,大数量的报文导致加密效率降低。

TLS/SSL

HTTP是基于TCP/IP协议的,TCP/IP在网络中传播需要经过多个节点,而HTTP请求又是明文传输的,那么有心之人轻易的可以获得请求包和返回包,并且对其进行篡改,因此HTTP是不安全的协议。

HTTP--明文-->TCP/IP---明文--->TCP/IP--明文-->HTTP

以安全为目标,HTTPS就此产生,HTTPS是HTTP的升级版本,最上层还是HTTP协议,只不过在HTTP和TCP/IP之间加入了一层加密层TSL/SSL,TLS/SSL负责对数据进行加解密,可以看做是HTTP over TLS/SSL

HTTP--明文-->TLS/SSL--密文-->TCP/IP---密文--->TCP/IP--密文-->TLS/SSL--明文-->HTTP

TLS位于应用层,连接应用层高级协议和TCP/IP协议,从而提供安全通信。

图片 24HTTPS协议模型

    常用的非对称加密算法有:RSA、Elgamal、Rabin、D-H、ECC等;

4.4 对称加密和非对称加密结合使用
  • 对称加密的方式,如果能够保证秘钥不被黑客获取,那么它其实是很安全的,并且,对称加密的在速度具有很大的优势。
  • 非对称加密在请求发起方时,尽管使用的是公钥加密,但是因为必须使用私钥解密的特点,因此能够保证消息体在向服务器发送的过程中是安全的。缺点在于服务器返回的使用私钥加密的内容会被公钥解开。

结合两者的优缺点的做法:

  • 使用对称加密对消息体进行加密。
  • 对称加密的算法和对称秘钥使用公钥加密之后,在 ClientHello 时发送给服务器。
  • 后续双方的内容进行对称加密。

具体的做法如下图:

图片 25对称加密和非对称加密相结合使用

那么使用这种方式时,有两个问题。

  • 如何将公钥给到客户端?
  • 客户端在获取一个公钥之后,如何确定这个公钥是正确的服务端发出的?

直接下载公钥不可靠的,因为黑客可能在下载公钥的时候劫持了请求,并伪造一个公钥返回给客户端。后续的请求都将会被黑客欺骗。

那应该怎么做呢?

答案是:使用证书!

数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。数字证书还有一个重要的特征就是只在特定的时间段内有效。数字证书是一种权威性的电子文档,可以由权威公正的第三方机构,即CA(例如中国各地方的CA公司)中心签发的证书,也可以由企业级CA系统进行签发。

简单来说,证书可以携带公钥,如果我们将证书给客户端下载,那就解决了客户端获取公钥的问题。 同时由于受第三方权威机构的认证,下载后对证书进行验证,如果证书可信,并且是我们指定的服务器上的证书,那么说明证书是真是有效的,这就解决了公钥可能是伪造的问题。

图片 26SSL证书 非对称加密 对称加密

最后附一张详细的HTTPS请求过程图示:

图片 27HTTPS请求过程

参考:SSL/TLS协议运行机制的概述 - 阮一峰HTTPS系列干货:HTTPS 原理详解

TLS/SSL协议的版本

SSL(Secure Socket Layer)由网景公司设计,现主流使用的是SSL3.0,Google发现SSL3.0存在设计缺陷,建议禁用此协议,现目前大多数浏览器要么禁止使用SSL3.0要么会对使用SSL3.0的请求提出安全警告。

TLS(Transport Layer Security)是由IETF制定的基于SSL3.0之上的,可以看做是SSL3.0的后续版本,目前已经制定了TLS1.0、TLS1.2、TLS1.3,目前较为主流的是使用TLS1.0协议。

3)HASH算法:也称为消息摘要算法。将任意长度的二进制值映射为较短的固定长度的二进制值,该二进制值称为哈希值。

TLS协议握手

图片 28TLS握手

    常用于检验数据的完整性,检验数据没有被篡改过。常见的又 MD5(MD系列),SHA-1(SHA系列)

1. 客户端发起连接 Client-hello

由于版本、实现、操作系统等差异的存在,通信双方所能够支持的加解密算法和TSL/SSL版本客观上会存在不一致,那么通信的双方就必须要协商好使用双方的版本和加解密算法;为了节省网络带宽,双方会在网络上进行数据压缩传输,因此还会协商双方都支持的压缩算法;除这些外,客户端还会生成一个随机数Random_A,用于后续密钥的生成。

客户端提供的信息

  • 协议版本
  • 加密算法
  • 压缩算法
  • 随机数Random_A

HTTPS 使用到了上面全部三种加密算法

2. 服务器端回应 Server-hello

服务在收到客户端的请求后,将客户端生成的Random_A存储在本地,然后从客户端支持的加密算法和压缩算法选择合适的算法,并且服务器也生成一个随机数Random_B,然后将选择的算法、随机数、和自己的证书发送给客户端。

服务端提供的信息:

  • 数字证书
  • 协议版本
  • 加密算法
  • 压缩算法
  • 随机数Random_B

2. HTTPS 的作用

3. 客户端回应

如果服务端要求客户端提供证书,那么客户端会先发送客户端的证书信息。

客户端为验证服务器的证书是否合法,验证合法之后,从证书中获取服务器的公钥。客户端生成新的随机数Pre-Master,然后用服务器的公钥对该随机数进行加密发送给服务器端。通过Random_ARandom_BPremaster Secret和之前协商的对称加密算法,就可以得到对称加密密钥enc_key=Fuc(Random_A, Random_B, Pre-Master)。接着发送change cipher spec命令通知服务器端表示客户端已经准备好使用协商好的加密方式进行数据通信。最后客户端计算前面发送的所有内容的MAC发送给服务器端,该信息为finish命令信息。

HTTPS简单而言,即使建立在SSL/TLS协议之上的HTTP。不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险。

4. 服务器回应客户端

服务器收到客户端发送过来的Pre-Master加密数据后,用私钥进行解密,然后之前协商好的方法生成对称加密密钥,首先发送change cipher spec命令通知客户端表示服务端已经准备好使用协商好的加密方式进行数据通信,然后利用对称密钥计算前面发送所有内容的MAC发送给客户端,该信息为finish命令信息。

(1) 窃听风险(eavesdropping):第三方可以获知通信内容。

(2) 篡改风险(tampering):第三方可以修改通信内容。

(3) 冒充风险(pretending):第三方可以冒充他人身份参与通信。

5. 数据通信

如果客户端和服务器端都能够对Finish信息进行正常的加解密及其验证,证明该加密通道已经建立完成。双方可以使用约定好的对称加密密钥加密HTTP请求,进行通信。

由于Random_ARandom_B在网络中是通过明文传播的,而握手阶段是通过非对称机密来传递Pre-Master的,因此后续通讯对称加密密钥的破解取决与Pre-Master是否能够被破解。

为什么要使用3个随机数,因为通信双发都不相信对方的随机数是真的随机,而最后一个随机数则是因为前面两个随机数都是明文传播,需要一个不能被第三方获取的加密参数。

上面说过,传递第三个随机数的时候使用了从服务器获取的公钥进行加密传输给客户端。既然公钥是由服务器提供的,万一我们所连接的是恶意的中间人呢,此时是中间人与我们进行HTTPS通信,中间人在于目的服务器进行HTTPS通信,那数据就暴露给了中间人眼中了,因此直接使用来自对方的公钥是不行,我们还需要验证该公钥的合法性。

此时,就需要有一个值得信赖的第三方权威机构(Certificate Authority)来告诉我们该服务器信息是可以信任的,而这个方式就是通过第三方机构颁给服务的数字证书来证明,权威第三方机构颁发的证书成为CA证书

SSL/TLS协议是为了解决这三大风险而设计的,希望达到:

证书的主要组成
  • 颁发证书的机构名称
  • 证书持有者的公钥
  • 证书使用的HASH算法
  • 证书内容的数字签名

由证书颁发方的私钥加密计算证书内容消息摘要得出,使得证书内容无法被伪造和篡改。

(1) 所有信息都是加密传播,第三方无法窃听。

(2) 具有校验机制,一旦被篡改,通信双方会立刻发现。

(3) 配备身份证书,防止身份被冒充。

验证证书的有效性

一般浏览器都会内置大多数主流权威CA的根证书,所谓根证书及其有效性不需要验证,虽然它也是一份普通的数字证书。

验证的过程:

  1. 利用证书使用的HASH算法计算出证书内容的消息摘要;
  2. 使用根证书的公钥解密证书内容的数字签名得到证书提供的消息摘要;
  3. 比较1和2的消息摘要是否一致,如一致,表示验证通过,该证书可信任,其公钥是由服务器提供的。

只要证书颁发方是权威的,并且生成证书数字签名的私钥只有CA拥有,那么验证成功的数字证书是不可能被伪造的,即是可信任的。即使中间人拿到了数字证书,也无法冒充服务器,因为他没有数字证书中公钥对应的私钥,无法得到Pre-Master,从而无法建立连接。通过引入权威的第三方可以保证HTTPS客户端和服务器的通信是安全可信任的

图片 29数字证书的验证

互联网是开放环境,通信双方都是未知身份,这为协议的设计带来了很大的难度。而且,协议还必须能够经受所有匪夷所思的攻击,这使得SSL/TLS协议变得异常复杂。

自签发证书与双向认证

有时候,不希望使用第三方证书,想自己签发证书,那么就需要自己手动生成跟证书和CA证书,并将根证书安装到对方的系统中,对方就可以对自己进行HTTPS请求,如果对方也自签字发证书,并将证书安装我方系统,那么双方就可以进行HTTPS双向认证。

本篇只讲解了HTTPS的基本原理,具体的实现还需要看RFC,因为本人不是安全方向的,点到即止即可。总的来说,上了HTTPS可以保证双方通信的安全,国内外的大型网站大部分已经切换到HTTPS,没切换的也在切换的路上了,这是未来的趋势。

  1. 详解https是如何确保安全的?
  2. 图解SSL/TLS协议
  3. SSL/TLS原理详解
  4. HTTPS那些事儿-实例分析
  5. HTTPS科普扫盲帖
  6. OpenSSL 与 SSL 数字证书概念贴
  7. HTTPS协议、TLS协议、证书认证过程解析
  8. HTTPS工作原理

3. HTTPS 的历史

本文由全球彩票平台发布于全球彩官网下载地址Web前端,转载请注明出处:我也想来谈谈HTTPS,HTTPS协议的实现原理

TAG标签: 全球彩票平台
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。