在前端面试博弈过程当中常常会被问到https、ssl相关内容,咱们对比总结一下。html
在http协议中可能存在信息窃听或者身份假装的安全问题,使用https能够通讯机制能够有效的防止这些问题。前端
https = http + ssl
http的缺点面试
HTTP + 加密 + 认证 + 完整性保护 = HTTPSHTTPS 是身披SSL外壳的HTTP安全
https有如下特性服务器
TLS/SSL
内容加密数字证书(CA)
验明身份,防止中间人攻击MD五、SHA-1
等散列值方法防止信息篡改数据加解密使用同一份密钥,加解密速度快,效率高,缺点是密钥的管理难度大,一旦密钥传输泄露,那就没啥用处了。session
因此解决办法就是下面的并发
使用一对非对称密钥。一把叫私有密钥,另外一把叫公有密钥,私有密钥存储于服务器,公有密钥随意发送。也就是说,发送密文方使用对方的公有密钥进行加密,对方接受到信息后,使用私有密钥进行解密。再不使用私有密钥状况下很难还原信息。 dom
HTTPS采用对称加密和公开密钥加密二者混合加密,二者都有各自的优势。对称加密处理速度快,但密钥没法安全发送给对方;非对称加密处理速度慢,但密钥可以安全交换。 但若是咱们将两种加密方式一块儿使用,则两种加密方式就能互补。也就是说,利用非对称加密方式安全地交换在共享密钥加密中要使用的密钥,在确保密钥安全前提下,使用对称加密方式进行通讯加密
数字证书的一种,遵循SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具备服务器身份验证和数据传输加密功能,我经常使用的是 DigiCert 免费版,有效期只有一年。长期的证书仍是很贵的。spa
开始加密通讯以前,客户端和服务器首先必须创建链接和交换参数,这个过程叫作握手(handshake)。如图:
随机数(Client random)
,以及客户端支持的加密方法。随机数(Server random)
。随机数(Premaster secret)
,并使用数字证书中的公钥,加密这个随机数,发给鲍勃。"对话密钥"(session key)
,用来加密接下来的整个对话过程。一、客户端生成一个随机数
,带着客户端所支持的加密方法List
,传递给服务器端,本身的随机数先存着。
二、服务器接收到这个随机数,先存着,生成一个新的随机数
,并从客户端传过来的加密方法List中选择一个最合适的加密方法
,还有本身的数字证书(公钥
),三个一并发送给客服端。
三、客户端确认数字证书有效,拿到随机数先存着,再生成一个新的随机数
,而后用公钥加密这个随机数,生成一个 预主秘钥(Premaster secret)
,将预主秘钥发送给服务器端。 当前步骤中的预主秘钥是本次加密的关键,前2个随机数都是明文传送,当前这个使用公钥加密,因此不容易拿到,即便拿到也没有关系,由于只有服务器上的秘钥才能解析,才知道第三个随机数是什么。
四、服务器接收到预主秘钥以后,用私钥解密获得随机数。到此,客服端和服务器端都知道了三个 随机数。 用这个三个随机数生成 对话秘钥(session key)
,用来加密接下来的全部对话过程。
来张图就是这个样子:
总结:HTTPS 使用的混合加密的方式来进行加密处理的。最重要的加密是第三个随机数的传输,以此来保证本次传输的安全性。