HTTPS
HTTPS : Hypertext Transfer Protocol Secure
因为HTTP明文传输数据不安全。所以HTTPS通过使用TLS协议
对数据进行对称加密
来保证数据传输的安全性。
HTTPS更安全,相应的效率比http低一点
HTTPS 协议规定了新的协议名https和端口号(443),至于其他的请求-应答模式、报文结构、请求方法、URI、头字段、连接管理
等等都完全沿用 HTTP。
TLS协议
Transport Layer Security 传输安全层
TLS在 OSI 七层网络模型中处于第五层(会话层),是一个独立的协议,不只有 HTTP 可以使用,其他应用层协议也可以使用。用于加密数据进行安全的数据传输
HTTPS中,HTTP 会先和 TLS 进行通信,然后再由 TLS 和 TCP 进行通信。
HTTPS七次握手
HTTPS的通信包括:七次握手阶段+数据传输阶段
- 握手阶段利用
非对称加密
计算出对称加密的密钥
- 数据传输阶段利用
对称加密的密钥
对数据进行加密,保证数据安全。
为什么要混合加密?
对称加密比非对称加密快。
非对称加密比对称加密安全。
HTTPS七次握手=TCP三次握手+TLS四次握手
TLS四次握手的目标是建立连接+生成对称密钥,对称密钥用于数据传输阶段对数据进行加密,对称密钥只有服务器和客户端知道,别人都不知道
TLS四次握手核心流程
每次握手传输的数据很多,下面只介绍其中最核心的用于生成对称密钥的数据,其他的省略、
TLS 第一次握手
客户端发给服务器Client Random
TLS 第二次握手
服务器发给客户端Server Random
和证书
TLS 第三次握手
客户端校验证书合法性,以确认服务器的身份(比如百度真的是百度不是黑客)
然后生成pre_master,并利用Client Random、Server Random、pre_master这三个随机数生成对称密钥
利用从证书中得到的服务器公钥将对称秘钥和pre_master
加密之后传给服务器
TLS 第四次握手
服务器用自己的私钥解密得到对称秘钥和pre_master
同样利用Client Random、Server Random、pre_master这三个随机数生成对称密钥
二者生成的对称密钥如果相同则握手成功。
用Client Random、Server Random、Pre-Master这三个参数生成对称密钥,前面两个参数明文传输。但是Pre-Master是加密的,黑客拿不到Pre-Master,所以不用担心最终的密钥不安全
为什么要用证书?
服务器需要证明自己的身份,比如现在用户访问百度,百度需要向用户证明自己真的是百度而不是黑客,所以向大家公认的第三方机构申请证书,把证书传给用户来证明自己真的是百度。
证书内容如下:
最核心的就是最后一行的数字签名,下面介绍数字签名的作用以及是怎么生成的
数字签名:验证证书的真伪
用户怎么知道这个证书是否是真的呢?
类比企业如何认定你提供的学历证书是真的呢?答案是用学历编号
,企业拿到证书后用学历编号在学信网上一查就知道证书真伪了,学历编号就是数字签名
,可以防止证书造假。
同样的,这里利用数字签名来验证证书的正确性
签名生成过程:
步骤一、 首先使用一些摘要算法
为证书明文生成摘要
,然后再用第三方权威机构的私钥
对生成的摘要进行加密生成数字签名
为啥要先生成摘要再加密呢,不能直接加密?——节约时间
因为使用非对称加密是非常耗时的,如果把整个证书内容都加密生成签名的话,客户端验签也需要把签名解密,证书明文较长,客户端验签就需要很长的时间,而用摘要的话,会把内容很长的明文压缩成小得多的定长字符串,客户端验签的话就会快得多。
步骤二、
客户端拿到证书后也用同样的摘要算法对证书明文计算摘要,两者一笔对就可以发现报文是否被篡改了,验签过程如下:
如果客户端收到一个假的数字签名,使用 CA 的公钥是无法解密的
如果客户端收到了真的数字签名,但证书上的内容被篡改了,摘要比对也不会成功的,客户端还是会认定此证书非法。
所以可以解决安全问题了。
那CA 公钥如何安全地传输到 client ?
预先内置在操作系统上的
,无需传输。
完整流程
加密算法
- 对称加密: 加密和解密的秘钥使用的是同一个.
- 非对称加密: 公开密钥和私有密钥
对称加密
优点:
算法公开、计算量小、加密速度快、加密效率高
缺点:
安全性稍低,秘钥容易在传输过程中泄露
有人说对这个密钥加密不就完了,但对方如果要解密这个密钥还是要传加密密钥给对方,依然还是会被中间人截获的,这么看来直接传输密钥无论怎样都无法摆脱俄罗斯套娃
的难题,是不可行的。
非对称加密
公开密钥与私有密钥是一对,
- 如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;
- 如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。
因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法
。
非对称加密算法实现机密信息交换的基本过程是:
甲方生成一对密钥并将其中的一把作为公用密钥
向大家公开;乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用私钥对加密后的信息进行解密。
优点:安全
缺点:
- 速度较慢
- server 怎么把公钥安全地传输给 client 呢?
如果直接传公钥,也会存在被中间人调包的风险,解决办法就是证书
常见的非对称加密算法有: RSA、Diffie-Hellman
CA 机构
全世界具有认证的 CA 就几家,分别颁布了 DV、OV、EV 三种,区别在于可信程度。DV 是最低的,只是域名级别的可信,EV 是最高的,经过了法律和审计的严格核查,可以证明网站拥有者的身份(在浏览器地址栏会显示出公司的名字,例如 Apple、GitHub 的网站)。不同的信任等级的机构一起形成了层级关系。