[toc]
HTTPS防护常见问题#
Q: 讲一下HTTPS双向认证的过程?#
A:
-
服务端发送证书, 证书中包含网站信息、CA签名、网站公钥
-
客户端校验CA签名,确认是CA所签且来源方正是该网站。
-
客户端生成会话密钥
-
客户端用网站公钥对会话密钥进行加密,生成非对称的会话密钥密文
-
客户端发送会话密钥密文给服务端
-
服务端用私钥解密, 得到明文会话密钥。
-
二者使用会话密钥进行加密传输
Q: 为什么不使用非对称密钥加密 传输数据, 而要用对称密钥这样绕一大圈?#
A:
对称算法的加解密性能比非对称算法快很多, 所以非对称只用于会话密钥的传输即可, 只需要一次。
Q: 为什么数据开始传输之后不需要再做验签, 难道者中间的数据就不会再被人篡改或者替换吗?#
A:
不会,有3个原因保证:
- 会话密钥是会话级别, 动态生成的,只有这一次连接才会用到。因此以前废弃的会话密钥不用担心被人拿去利用。
- 建立连接并传递会话密钥之前,已经通过验签确认过对方身份是可信的。
- 没有任何第三方知道会话密钥是什么。因此第三方攻击人无法用正确的会话密钥加密数据,即无法做到伪造会话密钥来欺骗接收者的目的。
Q: CA根证书可能被造假吗?#
例如黑客修改了用户机器中的CA证书,导致CA的公钥被替换了, 后面访问了黑客所在的网址时,就会验签成功。
A:
如果真的能修改的话,那么是可行的。
但是操作系统基本会内置著名CA的公钥,除非黑客已经能直接触碰你的操作系统底层了,否则基本办不到。
Q: 黑客把这个服务端返回的证书, 保存下来,然后下次别人访问黑客的钓鱼网站时, 黑客把这个证书原封不动发回去,会通过验证吗?#
A:
客户端会验证成功,
但是客户端做公钥时
于是对数据进行对称+非对称加密
重点来了
钓鱼网站接收到的数据,他没法用,他没有正规网站的私钥! 因为客户端用的是正规网站签发的公钥才可以。
黑客做中间人两边相互拦截,把假的签发过的公钥+证书发给客户端
客户端验签过程就会发现端倪, 发现他这个证书不对劲, 不是自己这边持有的CA机构正常签发出来证书。
Q: MD5 在双向认证过程中有什么用?#
A:
对网址申请信息进行摘要, 避免签名内容过长。同时也避免了逆向推导原网址信息的过程。
Q: 什么是证书链?#
A:
-
一个证书或证书链的拆封操作,是为了
从中获得一个公钥。可示为X1p?X1<>,这为一个中缀操作,其左操作数为一个认证机构的公钥,
右操作数则为该认证机构所颁发的一个证书。如果能正确解开,输出结果为用户的公钥 -
证书链验证的要求是,路径中每个证书从最终实体到根证书
都是有效的,并且每个证书都要正确地对应发行该证书的权威可信任性CA。操作表达式为 Ap?A<>B<>,
指出该操作使用A的公钥,从B的证书中获得B的公钥Bp,然后再通过 Bp来解封C的证书。操作的最终结果
说人话就是下游证书解出来是上游父证书的密文公钥,然后继续解
Token机制#
Q: 如何设计token?#
A:
token进行加密处理,将请求 URL、时间戳、加密后的token、 三者进行合并加盐签名,因为盐值是保密的,所以其他人只是得到token的话,无法进行正确的签名,后端验证请求的签名值来判断请求是否有效。
Q: token泄露怎么办?#
A:
每次请求可以将token和请求的对应的ip地址或设备id保存起来,放到数据库或者redis缓存中,如果后面请求token对应的ip地址或设备id不一样,则视为非法请求
HTTPS保护。
应用程序里用到的时候再解密。 如果支持TEE的话可以在TEE里进行解密。