Https协议详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Https协议详解相关的知识,希望对你有一定的参考价值。
参考技术A本文内容主要讲解Https协议,其他网络知识点作为理解Https协议的辅助。
首先,需要简单知道网络协议的四个层次,即:网络接口层,网络层,传输层,应用层。
Http协议 是一种超文本传输协议,是客户端浏览器与服务器之前的 应用层 通信协议。
Http协议不提供数据加密,以明文的方式发送内容,容易被攻击截取信息,不适合用于传输一些敏感信息。
Https协议 是以安全为目标的Http通道,在Http的基础上加入SSL层,简单来说就是Http协议的安全版。
Https协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
在进行详细解释Https之前,我们需要先简单了解一些Https协议使用到的关键技术。
对称加密 使用加密和解密使用相同密钥的加密算法进行加密,也叫私钥加密。常见的对称加密有: DES , AES 等。
非对称加密 与对称加密不同,使用非对称加密算法进行加密,需要两个密钥,即公钥和私钥。公钥和私钥是成对出现的,在加密和解密的过程中使用不同的密钥,所以也称为公钥加密。
数字摘要 采用单项Hash函数将需要加密的明文 摘要 成一串固定长度(128位)的密文,这个密文又称为数字指纹。不同的明文摘生成的数字指纹总是不同的,而同样的明文摘要生成的数字指纹必定一致。
数字摘要 是Https能确保数据完整性和防篡改的根本原因。
数字签名 是对 非对称加密 和 数字摘要 两项技术的应用。
它将 摘要信息 用发送者的私钥加密,与原文一起传送给接收者。
接收者只有使用发送者的公钥才能解密出被加密的 摘要信息 ;接着对接收到的原文用 数字摘要 生成 摘要信息 ;然后将两个 摘要信息 进行对比。若相同,说明收到的原文是完整的,在传输过程中没有被修改。因此,数字签名能够验证数据的完整性。
SSL 是安全套接层,用以保障数据传输的安全,利用数据加密技术确保数据在传输过程中不会被截取。
SSL又可分为两层:
SSL/TLS握手过程流程图:
两种恢复Session对话的方式: Session ID , Session ticket 。
客户端和服务器的每次对话都有一个编号。若对话中断,重连时只要客户端给出编号,并且服务器有该编号的记录,双方就可以使用已有的 对话密钥 重新建立连接,而不用重新走握手流程重新连接。
客户端发送一个服务器在上次对话中发送过来的Session ticket,其中包括对话的主要信息,如:对话密钥和加密方法等。这个Session ticket是加密的,只有服务器才能解密,服务器在解密Session ticket后就不用重新生成对话密钥了。
参考资料:
计算机网络HTTPS 协议详解
前言: 之前详细介绍了 HTTP 协议,在 HTTP 协议的基础上,本章详细介绍 HTTPS 协议的内容。如果对于 HTTP 协议有疑问的友友们,可以看看之前的文章《HTTP 协议详解》,希望能够给大家带来帮助!
文章目录
1. HTTPS 是什么
HTTPS (Hyper Text Transfer Protocol over SecureSocket Layer):
- HTTPS 是一种应用层协议,是一种透过计算机网络进行安全通信的传输协议。
- HTTPS 经由 HTTP 进行通信,但是在 HTTP 的基础上引入了一个加密层,使用 SSL/TLS 来加密数据包
- HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
- HTTPS 默认工作在 TCP 协议443端口
2. “加密”是什么
加密相关术语:
- 明文:要传输的原始的消息
- 密文:通过一定的规则将明文变换后的内容
- 加密:将明文变成密文
- 解密:将密文变成明文
- 密钥:在加密和解密的过程中,往往需要一个或多个中间的数据来辅助该过程,这样的数据称为密钥
为什么需要 HTTPS,为什么需要加密?
前几年有一个运营商劫持事件,由于我们通过网络传输的任何数据都会经过运营商的网络设备(路由器、交换机等),那么运营商的网络设备就可以解析出我们传输的数据内容,并进行篡改。
比如你要在下某个软件,当你点击下载时,其实就是在给服务器发送一个 HTTP 请求,获取到的 HTTP 响应本应该包含该软件的下载链接,但是经过运营商劫持后,就可以将这个响应给篡改成其它软件的下载链接,使得篡改者可以获取非法的利益。
上述的例子不止运营商可以劫持,一些黑客或非法人员都可以通过这种手段来窃取用户隐私或者篡改内容。
故 HTTPS 的出现,使用密文传输进一步的保证了用户的信息安全
3. HTTPS 的工作过程
既然要保证数据安全,就需要进行“加密”,即网络传输中不再直接传输明文,而是加密之后的“密文”。加密的方式有很多,但是整体可以分为两大类:对称加密和非对称加密
3.1 引入对称加密
基本介绍:
对称加密其实就是只通过一个密钥,把明文加密成密文,并且也能把密文解密成明文
如使用异或操作,就可以实现一个简单的对称加密。设明文为
1234
,密钥为8888
。通过明文和密钥异或操作实现加密1234 ^ 8888
,得到密文为9834
。然后通过密文和密钥异或操作解密9834 ^ 8888
,得到明文1234
只引入对称加密存在的问题:
通过对称加密,貌似就可以进行数据的保护了。黑客就算入侵了路由器,也只能得到请求的密文内容
但是上述方案有一个问题,就是密钥如何进行约定?毕竟一个服务器对应着很多的客户端,每个客户端和服务器之间都需要约定一个独自的密钥。
可如果让服务器管理所有的密钥,其实并不简单,因此更好的做法就是客户端连接过来时,就自带一个客户端生成好的密钥。当每个客户端在连接之前,自己先生成一个密钥,通过网络将该信息告诉服务器,服务器将这个密钥保存即可。
也正是因为如此,黑客在获取密文请求的同时,也获取到了密钥,因此只使用对称加密并不能起到数据保护的作用。所以还需要让密钥进行加密,但是使用对称加密的话,是行不通的,故引入了非对称加密
3.2 引入非对称加密
基本介绍:
非对称加密要额外再用到两个密钥,一个叫做==“公钥”,一个叫做”私钥“。公钥和私钥是配对的==,这对密钥由服务器产生。
缺点:
运算速度非常慢,比对称加密慢很多
引入流程:
服务器将公钥直接发送给客户端,将私钥保留。客户端得到公钥后,通过公钥将密钥进行加密,再发送给服务器,服务器通过私钥解密获取到密钥。之后再将收到密钥的消息通过密钥加密后发送给客户端,客户端收到后,就使用该密钥通过对称加密的方式与客户端进行数据传输
引入非对称加密后,为什么还要使用对称加密?
由于对称加密的成本(对机器资源的消耗)远远低于非对称加密,而实际上客户端和服务器之间传输的数据量会很大,如果都使用非对称加密,整体的传输速度就会很慢,因此通过非对称加密,让服务器得到密钥后,再使用对称加密进行传输,能够提高传输的效率
引入非对称加密后还存在的问题:
服务器首先生成一对公钥A和私钥A。首先服务器要把公钥A发送给客户端,此时黑客可以当作一个中间人,自己生成一对公钥B和私钥B。他会将服务器的信息阶段,并将自己生成的公钥B发送给客户端。当客户端得到公钥B后,就使用公钥B加密自己生成的密钥A并发送给服务器。此时黑客再次截取,通过私钥B解密公钥B,得到密钥A,并使用公钥A将密钥进行加密返回给服务器。至此服务器和客户端都确定了密钥A,但黑客也神不知鬼不觉的知道了密钥A。故在之后的数据传输中,黑客就可以直接完全的获取客户端和服务器的明文数据。因此即使引入了非对称机密还是存在两个问题:
- 客户端如何获取到公钥?
- 客户端如何确定这个公钥不是黑客伪造的?
为了解决这两个问题,就引入了证书
3.3 引入证书机制
基本介绍:
在客户端和服务器刚建立连接时,服务器就给客户端返回一个证书。这个证书就好比人的身份证,用来作为网站的身份标识。而每搭建一个 HTTPS 网址时都需要在 CA 机构申请一个证书。
证书含有的重要信息:
- 证书发布机构
- 证书有效期
- 公钥
- 证书所有者
- 签名
引入证书流程:
服务器首先产生一对公钥和私钥,在第三方公证机构申请一个证书时,该证书内就包含了公钥的信息,然后服务器就会将公钥发送给客户端,由于证书的校验很严格,因此黑客就算获取了,也很难伪造一个假的证书。即使伪造了,客户端也可以拿到第三方公证机构去校验,因此客户端就能够拿到服务器发送的公钥,之后再通过公钥加密自己产生的密钥,发送给服务器。由于黑客没有私钥,就算截获了该请求,也不能拿到密钥,因此服务器就能顺利的得到加密的密钥,并使用私钥来解密。最终就能够很好的防止黑客获取或篡改数据。
校验证书方式:
- 判定证书的有效期是否过期
- 判定证书的发布机构是否受信任
- 判定证书是否被篡改(从系统中拿到该证书发布机构的公钥,对签名解密,得到一个 hash 值(称为数
据摘要),设为 hash1。然后计算整个证书的 hash 值,设为 hash2。对比 hash1 和 hash2 是否相等,如果相等,则说明证书是没有被篡改过的)
理解数据值摘要和签名:
针对一段数据,可以通过一些特定的算法对这个数据生成一个签名。由于不同的数据生成的签名差别很大,因此就可以使用签名在一定程度上区分不同的数据。常见的生成签名的算法有:MD5 和 SHA,以下以 MD5 为例,介绍其特点
- 定长:无论多长的字符串,计算出来的 MD5 值都是固定长度(16字节版本或者32字节版本)
- 分散:源字符串只要改变一点点,最终得到的 MD5 值都会差别很大
- 不可逆:通过源字符串生成 MD5 很容易,但是通过 MD5 还原成原串理论上是不可能的
由于 MD5 这样的特性,因此可以认为如果两段数据的 MD5 值相同,则这两段数据相同
3.4 完整流程
- 对称加密: 需要有一个客户端生成的对称密钥,用于对传输的数据进行加密,但需要将该对称密钥告知给服务器
- 非对称加密: 服务器提供一个公钥(自己持有私钥),将公钥传发送给客户端,客户端使用公钥对对称密钥进行加密,将密文传送给服务器
- 引入证书机制: 通过第三方公证机构,向网站颁发证书,该证书里面就含有公钥。客户端向服务器请求的也就是证书,客户端拿到证书后去公证机构校验,如果证书合法,就使用里面的公钥对对称密钥进行加密
以上是关于Https协议详解的主要内容,如果未能解决你的问题,请参考以下文章