HTTPS加密的简单理解
一、对共钥私钥、数字签名、证书的理解
1.公钥私钥(一般用于确保信息的安全性)
非对称加密:加密解密用的不是同一个东西。
公钥就像是锁,可以对信息进行加密,加密以后再进行传输;私钥就像是钥匙,对被公钥加密的信息进行解密,获取到真正的内容;
当然,反过来用私钥加密的信息,也可以用共钥进行解密。
2.数字签名(一般用于确保信息不被篡改)
①首先根据要发生的信息,通过hash函数,然后通过(公钥或者私钥)进行加密。生成数字签名,发送的时候随着报文一起发送;②接收方接收以后,解密出信息,和报文进行对比,以确保数据的准确性。
3.数字证书(确保公钥私钥的正确性)
为了预防公钥和私钥同时被换了,造成假信息被误认为真实信息。①我们将公钥拿到证书中心(CA)进行验证②证书中心使用自己的私钥对来到的公钥与其相关的信息进行加密,生成数字证书③发送方发送信息的时候,除了报文以及数字签名以外,添加了数字证书④接收方接收以后,先使用证书中心发下的公钥解析数字证书,拿出真正的公钥⑤对信息进行解析。
二、对于https通讯原理的理解
1.握手验证
1.1.客户端——》服务端
客户端将自己支持的密钥算法套件发送给服务端(也就是告诉服务端自己会使用哪种算法,让服务端选择一种)
1.2.服务端——》客户端
①服务端选择一种合适的加密算法以及hash算法
②以证书(数字证书)的形式返回给客户端(证书中还包括了公钥、颁证机构等信息)
1.3.客户端——》服务端
①客户端通过CA的公钥对数字证书进行解析,确保证书是被认可的
②客户端随机生成一串随机数(该随机数用户后期通讯的加密解密),通过证书中解密得出的公钥进行加密,生成加密以后的随机数 encode_random
③通过证书解密出来的hash算法,算出握手信息的hash信息(相当数字签名),然后通过②中产生的随机数,对“握手信息+握手hash信息”进行加密然后发送。
1.4.服务端——》客户端
①服务端拿到数据,用私钥进行解密,获取到加密后的信息,以及解密后的随机数
②通过随机数,对加密的信息进行解密,得出真正的信息,然后通过对比“握手信息+握手hash信息”,确定信息是否在传输的过程被篡改。
2.数据通信
通过上面的握手确定以后,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。因为这串密钥只有客户端和服务端知道,所以即使中间请求被拦截也是没法解密数据的,以此保证了通信的安全。
3.总结
3.1.非对称加密算法:
RSA,DSA/DSS 在客户端与服务端相互验证的过程中用的是对称加密
3.2.对称加密算法:
AES,RC4,3DES 客户端与服务端相互验证通过后,以随机数作为密钥时,就是对称加密
3.3.HASH算法:
MD5,SHA1,SHA256 在确认握手消息没有被篡改时
- 参考链接
http://www.cnblogs.com/shijingjing07/p/5965792.html
https://www.cnblogs.com/zery/p/5164795.html
还没有评论,来说两句吧...