在了解https之前,我们先看下http的协议有哪些不足,加密、证书,签名这些概念,以便于我们更全面的掌握https的原理以及工作流程。
HTTP协议的不足
- 不验证身份,导致身份可能被伪装。
- 明文通信,数据可能被窃取
- 无法验证报文的完整性,内容可能被篡改。
一、通信加密
1)为什么通信需要加密?
解决数据被窃取问题。 因为HTTP不对通信内容进行加密处理,所以衍生了SSL加密技术协议,SSL采用混合加密(同时使用非对称加密和对称加密)的方式建立起安全的HTTP通信,经过加密后的内容即使被窃听了,窃听的人也无法解密对应的数据。
2)公开密钥加密技术
对称密钥加密和非对称密钥加密加密算法中加密算法是公开的,而密钥时保密的,加密和解密都需要密钥,没有密钥就不能解密,反之,如果密钥被截获,则加密的内容就有可能被破解。
其中有三种加密机制:对称加密、非对称加密、混合加密
1)对称加密
对称加密是指加密和解密的密钥为同一个。
问题:在通信时还需将密钥传输给对方用来解密,密钥传输过程中同样可能被截获,所以这种加密方式通信安全的前提是如何安全的传输密钥。
2)非对称加密
与对称加密不同,非对称加密的密钥是成对的(公钥和私钥)。
这种方式又被称之为公开密钥加密,使用一对非对称的密钥,一把叫做公开密钥(public key),一把叫做私有密钥(private key),其中公开密钥可以随意发送,私有密钥必须保密。
3)混合加密
虽然非对称加密很安全,但是和对称加密比起来,它的解密速度非常慢;所以通常会用混合加密的方式进行通信,混合加密是用非对称加密的方式交换双方的对称加密秘钥,交换对称加密秘钥之后双方再用对称加密的方式进行通信。
二、数字证书(解决身份伪装问题)
这里要提到数字认证机构(CA,Certificate Authority)和其相关机关颁发的公开密钥证书,数字证书认证机构处于客户端与服务器双方都可信赖的第三方机构的立场上,其具体的业务流程如下:
1、服务器运营人员向数字证书认证机构提出公开密钥的申请。
2、数字证书认证机构判明身份之后,会对已申请的公开密钥做数字签名,并将该公开密钥放入公钥证书后绑定在一起,服务器会将这份由数字认证机构颁发的公钥证书发送给客户端。
3、客户端获取到数字认证机构颁发的公开密钥后,对其进行数字签名验证,一是确认公开密钥是真实的数字认证机构颁发的,二是确认公开密钥是值得信赖的。
4、确认无误后,使用该公开密钥加密报文。
5、服务器使用私有密钥进行报文解密。
三、数字签名(解决数据篡改的问题)
数字签名主要有两个作用,一是验证数据是否为意料中的对象所发出的,二是对数据的完整性进行验证,验证数据是否被篡改过:
1、对需要发送的数据进行摘要
对数据进行摘要主要目的是确认数据的完整性,发送方首先根据约定的哈希算法把数据进行哈希,得到一个哈希值,因为两个数据有任何一点不相同都会得出不同的哈希值,所以把对数据内容进行哈希得到的哈希值作为数据的摘要发给对方。
然后对方收到数据后,首先自己也按照约定的哈希算法把接收到的数据内容进行哈希得到一个哈希值,然后把自己的哈希值与发送过来的摘要信息进行比对,根据哈希值是否一致来确认数据的完整性。
2、对摘要信息进行签名
对摘要进行签名的目的主要是对确认数据发送人的身份,签名技术是使用非对称加密的原理。
数字签名的过程简述为:发送方通过不可逆算法对内容 text1 进行处理(哈希),得到的结果值 hash1,然后用私钥加密 hash1 得到结果值 encry1。对方接收 text1 和 encry1,用公钥解密 encry1 得到 hash1,然后用 text1 进行同等的不可逆处理得到 hash2,对 hash1 和 hash2 进行对比即可认证发送方。
四、HTTPS
1、什么是HTTPS?
简单来说,HTTPS(HTTP Secure) 就是在 HTTP 协议基础之上加入加密以及认证机制的 HTTP。
HTTPS 相较 HTTP 不是一种新协议,只是在 HTTP 通信接口部分使用了 SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议来实现。使得 HTTP 先与 SSL 通信,再由 SSL 和 TCP 通信,而不是 HTTP 直接与 TCP 通信。
2、HTTPS通信流程
HTTPS通信主要包括几个节点,发起请求、验证身份、协商秘钥、加密会话,具体流程如下(此例子只有客户端对服务端的单向验证):
1)客户端向服务端发起建立HTTPS请求。
2)服务器向客户端发送数字证书。
3)客户端验证数字证书,证书验证通过后客户端生成会话密钥(双向验证则此处客户端也会向服务器发送证书)。
4)服务器生成会话密钥(双向验证此处服务端也会对客户端的证书验证)。
5)客户端与服务端开始进行加密会话。
具体流程如下:
第一步:客户端向服务端发起请求
a. 客户端生成随机数R1 发送给服务端
b. 告诉服务端自己支持哪些加密算法和哈希算法
第二步:服务器向客户端发送数字证书
a. 服务端生成随机数R2
b. 从客户端支持的加密算法中选择一种双方都支持的加密算法(此算法用于后面的会话密钥生成)和哈希算法用机构的证书公钥解密得到证书的内容和证书签名
c. 服务端生成把证书、随机数R2、会话密钥生成算法,一同发给客户端
第三步:客户端验证数字证书。
这一部分是浏览器内置的 TSL 完成的:
a. 首先浏览器会从内置的证书列表中索引,找到服务器下发证书对应的机构,如果没有找到,此时就会提示用户该证书是不是由权威机构颁发,是不可信任的。如果查到了对应的机构,则取出该机构颁发的公钥、会话密钥生成算法、随机数R2。
b. 用机构的证书公钥解密得到证书的内容和证书签名,内容包括网站的网址、网站的公钥、证书的有效期等。浏览器会先验证证书签名的合法性。签名通过后,浏览器验证证书记录的网址是否和当前网址是一致的,不一致会提示用户。如果网址一致会检查证书有效期,证书过期了也会提示用户。这些都通过认证时,浏览器就可以安全使用证书中的网站公钥了。
c. 浏览器生成一个随机数 R3,根据会话密钥算法使用R1、R2、R3生成会话密钥。
d. 用服务端证书的公钥加密随机数R3并发送给服务端。
注意:以上其实就是 HTTPS 的握手过程,这个过程主要是认证服务端证书(内置的公钥)的合法性。因为非对称加密计算量较大,整个通信过程只会用到一次非对称加密算法(主要是用来保护传输客户端生成的用于对称加密的随机数私钥)。后续内容的加解密都是通过一开始约定好的对称加密算法进行的。
第四步:服务器得到会话密钥
a. 服务器用私钥解密客户端发过来的随机数R3
b. 根据会话密钥算法使用R1、R2、R3生成会话密钥
第五步:客户端与服务端进行加密会话
1) 客户端发送加密数据给服务端
发送加密数据:客户端加密数据后发送给服务端。
2)服务端响应客户端
解密接收数据:服务端用会话密钥解密客户端发送的数据
加密响应数据:用会话密钥把响应的数据加密发送给客户端。
3)客户端解密服务端响应的数据
解密数据:客户端用会话密钥解密响应数据
四、为什么有的网站不用HTTPS?
HTTPS 虽然安全可靠,但是有的网站还是使用 HTTP,原因是什么呢?
1、HTTPS 由于使用了 SSL(包括 TLS) 而变得安全可靠,但是 SSL 由于要进行加密处理会导致整个通信变慢,频繁的加密、解密会消耗服务端和客户端的硬件资源。
2、SSL 不仅会导致通信慢,还会由于大量消耗 CPU 和内存等资源,导致整个处理速度变慢,和 HTTP 相比,网络负载可能可能会变慢 2 到 100 倍
3、如果使用了 HTTPS,那就意味着要增加硬件成本,此外从数字认证机构购买证书也是需要开销的。
总结:相较于HTTP协议,HTTPS确保了报文的机密性以及完整性。HTTPS确保这些的依赖就是SSL/TSL协议,SSL/TSL安全协议搭配数字证书保证了报文在传输过程中的绝对安全。但是使用HTTPS就意味着需要增加成本,因此实际中是否使用HTTPS,还需要进行各方面的权衡。
参考链接:
https://cloud.tencent.com/developer/article/1005197
https://zhuanlan.zhihu.com/p/56663184
https://juejin.cn/post/6844904094503550984
摘自:https://www.cnblogs.com/hld123/p/15255526.html
标签:加密,HTTPS,证书,流程,详解,密钥,https,服务端,客户端 From: https://www.cnblogs.com/sword0077/p/17134585.html