https加密为经典面试题!!!
当今网络中,更多使用HTTPS协议,HTTPS协议就是在HTTP协议基础上引入加密机制
明文 + 密钥 (yue)=> 密文
密文 + 密钥 => 明文
加密方式
1.对称加密
加密和解密使用的是同一个密钥key
明文+key=>密文
密文+key=>明文
2.非对称加密
有一对密钥,一个为公玥(公开的),一个为私玥(自己藏好的)
明文+公玥=>密文 密文+私玥=>明文
或 明文+私玥=>密文 密文+公玥=>明文
举个栗子
小区楼下的邮箱,邮递员有一把锁(公钥),自己有一把钥匙(私钥),邮递员把信锁在信箱里(使用公钥加密),自己拿钥匙打开锁(使用私钥解密),前提是钥匙和锁配对(公钥和私钥配对)
HTTPS工作过程
目标针对header和body加密
①对称加密
(此图源CSDN@渔火愁眠_)
②非对称加密
(此图源CSDN@渔火愁眠_)
为什么还要引入对称加密?
非对称加密、解密成本高,运算速度低,所以只在传输密钥时使用非对称加密,后续传输业务时使用对称加密
引入非对称加密后还会存在中间人攻击问题
解决的关键在于客户端能分辨公玥是黑客伪造的,所以引入“证书”
③证书机制(数字签名)
数字证书的生成过程如下:
a.CA机构拥有非对称加密的私钥和公钥。
b.网站需要申请数字证书,只需将自己网站的数据给CA机构(网站公钥,网站域名等)
c.CA机构对证书明文数据进行hash。
d.对hash后的值用私钥加密,得到数字签名(数字签名中有公玥、网站域名等其他信息)
浏览器验证流程如下:
拿到证书,从证书中得到公钥,数字签名等数据。
用CA机构的公钥对数字签名解密(浏览器内置CA机构的公钥),得到S。
用hash算法对明文进行hash得到T。
显然通过以上步骤,T’应当等于S‘,除非明文或签名被篡改。所以此时比较S’是否等于T’,等于则表明证书可信。如果证书的数据没有被改动过,S和T应该是相同的,则证书可信任,浏览器就用证书中的公钥加密数据。
如果S和T,则说明证书已被篡改,证书不可信,从而终止向服务器传输信息,防止信息泄露给中间人。
中间人有可能把证书掉包吗?
假设有另一个网站B也拿到了CA机构认证的证书,它想劫持网站A的信息。于是它成为中间人拦截到了A传给浏览器的证书,然后替换成自己的证书,传给浏览器,之后浏览器就会错误地拿到B的证书里的公钥了,这确实会导致上文“中间人攻击”那里提到的漏洞?
其实这并不会发生,因为证书里包含了网站A的信息,包括域名,浏览器把证书里的域名与自己请求的域名比对一下就知道有没有被掉包了。
参考文章: