前端面试-https

189 阅读4分钟

概念

https = http + ssl(安全套接字层)/tls(传输层安全协议)

背景

http通讯属于明文通讯,通讯数据完全暴露,没有安全性

目的

1 加密数据(传输过程中不会被截取解析)

2 数据的一致性(传输过程中不会被篡改)

3 身份认证(保证为目标用户通讯)

https通讯过程

1 客户端向服务端发起连接请求,服务端将包含公钥的ca证书返回给客户端。

2 浏览器收到ca证书后,检验浏览器是否存在该证书公钥,若无直接提示警告。用证书公钥对证书的数字签名(证书机构会用专属私钥进行加密)进行解密,再用证书提供的散列算法对明文进行hash将得到的值与签名比较一致后得到明文中的服务器公钥。用该公钥加密一串随机数key(作为对称加密的秘钥)返回给服务器。

3 服务器用私钥对随机数key进行解密,然后用其加密http通讯数据至客户端。

4 客户端使用随机数解密得到数据,自此建立安全连接。以后每次通讯都使用该随机数key作为传输秘钥

相关概念

对称加密

加密解密都使用同一秘钥

缺陷:首次通讯服务器需要将秘钥明文传输到客户端,被截取后。加密等同无效。

非对称加密

服务端将公钥发送给客户端,客户端收到后用公钥对数据进行加密传输给服务端,服务端再对其用私钥进行解密。

缺陷 :如果有中间人劫持到服务端公钥A,将其替换为自己的公钥B,发送给客户端。客户端用B加密后,中间人再用B对应的私钥b对其进行解密,获取到明文将其篡改后再用正确的A加密传输给服务端,达到攻击目的。

双向非对称加密

服务端与客户端都维护一套公私钥,传输数据过程中分别用对面的公钥对数据进行加密,对方接受到数据在用自己的私钥解密。

缺陷: 耗时太长

混合加密

传输数据使用对称加密,对称加密使用的密钥在客户端生成后,初始建立连接时使用服务端传来的公钥进行加密,服务端解密获取到密钥后,再使用此密钥进行加密通讯。

缺陷:其实和非对称加密一样,客户端无法得知获取到的公钥到底是不是服务端的公钥。其实如果光使用混合加密,效果和普通的非对称加密一样对中间人攻击照样没什么办法。而https之所以采用混合加密,按我自己的理解应该在于在进行非对称加解密的时候配合一些其他的行为达到身份认证的目的。只要身份得到认证了,那就不存在什么中间人攻击了,而使用对称加密传输数据则完全是为了数据不明文传输。

https功能实现

加密数据

参考上 混合加密

数据一致性

发送端对数据进行hash后形成签名与原文一并发送,接收端拿到数据后将原文hash与签名进行比较

身份认证

ca(Certificate Authority)证书认证

既然普通传送无法保证公钥的安全性,那么就将公钥由被认可的第三方机构保存。由ca机构将公钥生成证书。服务端在建立连接时将证书发送给客户端浏览器。

那怎样保证证书的安全性呢?

首先,ca机构本身维护这一对公私钥,先将明文信息进行hash。然后用私钥对其进行加密,形成数字签名与明文一起组成数字证书发给服务器。浏览器获取到证书后,由于本身保存有具有公信力机构的公钥。如果证书公钥与其不一致直接报出警告。若一致则用公钥对数字签名进行解签,然后由证书提供的散列算法对明文进行hash得到的值与证书内的hash值进行比较若无误则代表证书无误。