一次学会HTTPS 如何加密
HTTP 的缺点 :
- 通信使用明文(不加密),内容可能会被窃听
- 不验证通信方的身份,因此有可能遭遇伪装
- 无法证明报文的完整性,所以有可能已遭篡改
HTTP+ 加密 + 认证 + 完整性保护 =HTTPS
相互交换**的公开**加密技术 :
SSL 采用一种 叫做公开**加密(Public-key cryptography)的加密处理方式。
什么是公开**加密?
公开**加密又称非对称加密。在我们介绍公开**加密之前,我们先说一下对称加密:
对称加密:共享**加密
对称加密:对称加密又交共享**加密。就是在客户端和服务端有着一对算法函数,可以用**将数据给加密或解密。但是只有相同的**可以解开此**所加密的数据。
弊端:在这时,如果服务端与每一个客户端都有一个特定的**,那么黑客也就没有办法盗取数据,因为没有特定的**是解不开加密后的数据的。但是这样的话,服务器需要为每一个客户端保存一个**,这样数据太大了。如果客户端共用一个**的话,黑客或者说攻击者,就可以直接从自己的客户端得到**进行拦截获取数据。
非对称加密 :公开**加密。
公开**加密使用一对非对称的**。一把叫做私有** (private key),另一把叫做公开**(public key)。私钥加密的数据只有公钥可以解开,公钥加密的数据只有私钥可以解开。
加密过程:服务端有着公钥和私钥,当客户端去请求服务端时,服务端返回一个公钥给客户端,客户端将数据用公钥加密,只有私钥可以加密,传送至服务端,服务端进行解密。
**弊端:但是服务端如何将数据传送至客户端呢,**首先,不能用公钥加密,应为客户端没有私钥,无法解密。如果用私钥加密呢?但是黑客也可以拿到这个公钥,还是会被黑客获取数据。
上面的对称加密与非对称加密都有缺点,对称加密无法保证每个客户端都有一个独一无二的**;非对称加密从客户端传至服务端的用公钥加密的数据是安全的,因为服务端一个私钥可以解密。但是无法从服务端安全的传送数据到客户端,因为公钥是每个客户端都可以获取的。
HTTPS采用混合加密机制
过程描述:
客户端请求服务端得到公钥
客户端利用相应算法产生一个随机数,通过公钥加密后传至服务端,服务端利用私钥解密后,得到随机数。然后利用此随机数做共享**。双方进行共享**加密进行接下来的http报文传递。
且共享加密方式效率要高于公开**加密。
弊端: 但是如果有攻击者或者黑客。从中拦截,就相当于一个代理服务器一样;你得到的公钥是攻击者给你的公钥,你传的信息,攻击者也可以解开。攻击者自己在请求服务器,利用你的信息可以从服务器上过滤掉他想要的信息。类似这样:
解决方法接下来就用到证书 数字证书认证机构CA:只有CA认证的证书才是好证书。因此如果攻击者要当中间人的时候,它返回的证书,客户端通过验证发现不是好证书,浏览器会返回 证书不安全。这时就可以避免 中间人的威胁了。
好的公开**在浏览器都可以验证,多数浏览器开发商发布 版本时,会事先在内部植入常用认证机关的公开**
HTTPS的通信步骤:
首先会向服务器传送经过公钥加密 支持的SSL(套接字加密)版本、加密组件列表(支持的非对称算法、随机数1);
服务端返回:用对应SSL版本、加密组件(对称算法、随机数2、证书);最初阶段的协商结束。
客户端证书认证,生成随机数3、用hash散列算法将1,2步骤的全部信息哈希整理发送到服务端,此时已经生成**了,只需确定服务端能否正常解密作为这次握手协商是否成功的判定标准。
服务端解密后将随机数1,2,3通过特殊的算法合成**,同时将1,2,4通过hash散列算法哈希整理发送至客户端,
握手协商成功:已建立SSL通信保护。
之后进行对称算法。