HTTPS
由于HTTP报文在网路上是以明文的方式传递的,因此很多时候在安全方面无法满足商用的要求,无法保证数据不被中间人截取和篡改(中间人攻击)。而HTTPS协议在传递报文前进行了身份认证、数据加密,这就保证了HTTP报文的可靠性、数据完整性、数据加密性
对称加密
我们可以使用对称加密技术(DES,3DES,AES)对HTTP报文进行加密;AES加密技术是现在最流行且有效的加密算法,可以可靠的保证密文不被中间人解析,只要对称秘钥不泄漏。
如果中间人截取了对称秘钥,完全可以换成自己的秘钥传递给另一端,这样就不能解决中间人攻击。那么问题就变为怎么安全的传递对称秘钥?
这个时候我们可以非对称加密技术加密对称秘钥,然后再在网路上传递
非对称加密
非对称加密包含两个秘钥:公钥和私钥。公钥可以将私钥加密的数据明文化,私钥可以将公钥加密的数据明文化。
首先由客户端向服务端发出握手请求;接着由服务端返回公钥;客户端受到公钥,生成加密报文用的对称秘钥,由公钥加密传递给服务端;最后服务端受到对称秘钥用私钥解析出来,之后就可以进行正常的数据交互了。
但是这还是不能避免中间人攻击,如果中间人劫持了公钥,再生成自己的公钥传递给客户端。这样中间人和服务端建立连接,客户端和中间人建立连接,中间人攻击还是构成了。
因此客户端必须要判断公钥的可靠性和完整性(即公钥是不是确实从服务端传递来的,而没有被篡改);为解决这个问题,我会可以引入可靠的第三方CA机构
数字证书
CA机构即证书颁发机构,服务端会事先向CA机构申请数字证书。
数字证书的作用
-
认证正在访问的网站(是否为钓鱼网站)
-
保证数据的私密性和可靠性
数字证书的申请
-
首先服务端会生成自己的公钥和私钥,然后拿着公钥和服务端的一些信息向CA机构申请数字证书
-
CA机构拿着公钥和服务端信息通过Hash算法生成消息摘要,然后将消息摘要用自己的私钥加密,生成后的密文即数字签名。数字签名和原本的公钥及服务端信息组成数字证书
-
最后服务端拿到数字证书,等待客户端的握手请求
数字证书怎么保证交互的可靠性,完整性及私密性
- 服务端受到握手请求后,首先会将数字证书传递给客户端
- 我们的电脑和浏览器中已经内置了一部分权威机构的根证书,这些根证书中包含了CA的公匙。 数字证书包含公钥,服务端信息和数字签名。客户端首先会将公钥,服务端信息通过Hash算法生成一份消息摘要;然后将数字签名用CA的公钥解密出一份消息摘要;对比两份消息摘要,如果不一致即公钥被篡改,停止握手。
- HASH算法的不可逆性保证了消息摘要无法篡改,CA机构的非对称加密保证了公钥来源的可靠性