对称加密 or 非对称加密
加密分为对称加密和非对称加密, 对称加密速度快但是涉及到了key的明文传输 非对称加密速度慢但是可以加密内容
如果仅使用对称加密, 虽然传输过程中数据不会被解密 但是双方在交换密钥的时候 是明文进行交换的
如果仅使用非对称加密, 虽然安全性好 但是会消耗很多的资源
所以使用非对称加密来保护对称加密key
后续再使用对称加密进行通信 这样兼顾安全性和效率
数字证书合法性校验
通过上面分析知道了会使用非对称加密加密对称加密key
, 但是如何防止公钥
被掉包? 也就是说如何确认公钥
是服务器发送来的而不是中间人发送来的?
使用数字证书
服务器向CA申请证书后 得到了一份证书
以及CA在hash证书后使用CA私钥对其加密得到的数字签名
两个东西组成数字证书
当浏览器得到数字证书
后可以从中得到证书
和数字签名
使用CA的公钥对数字签名解密得到T1
. 然后使用证书中的算法对证书
hash得到T2
比较T1
和T2
二者相等说明证书可信.
如果有人篡改了证书
, 但是由于没有CA的私钥无法生成加密后的数字签名
, 所以浏览器比较的时候T1和T2
不相等
如果掉包整个证书
, 由于证书
中包含了域名, 直接比对域名就知道有没有被掉包了
证书有了加密的一些简单细节是什么
HTTP的默认端口从80改到了443端口 浏览器放服务器发起TCP连接
浏览器首先生成随机串CLIENT1, 服务器接收到后回复证书和SERVER1, 浏览器验证证书后生成随机串CLIENT2并使用公钥加密, 服务器收到后解密出CLENT2
然后浏览器和服务器根据上面的三个随机串使用相同的算法生成最终的对称加密key
. 后续就可以使用对称机密key
来进行加密通信了