谢邀,首先我得纠正一下你的说法。当CA签名的时候,它不是只对公钥签名的,而是会对整张数字证书签名。所以一张完整的数字证书你不可能只换签名,这样通不过完整性校验,要换只能把整张证书换掉。
所以这个问题的正确表述应该是:
比如A和B通信,B的公钥和数字证书被O截取。而O原先已将自己的公钥上传CA,并得到了CA签发的一张等效的数字证书。于是O将B的公钥和证书一起替换成O的公钥和O的证书,再发给A。A能够识别自己正在遭受中间人攻击吗?
好,如果你想问的问题是这个的话,那么一句话总结:用户没有任何办法判断自己是不是正在遭受攻击,而且这样的攻击已经大规模发生过最少两次了。这两次攻击一次是印度政府发动的,一次是中国政府发动的,都在相关机构手里留下了确凿的证据,之后涉案的CA都被开除了Root CA资格。
当然,我个人怀疑美国国安局可能也没少玩类似的把戏,但是既然人家没有漏出马脚,那我也不好意思多说什么。
除此之外,我记得零几年还发生过这么一件事:某男子通过社会工程学手段伪装成微软的法人代表,然后诈骗到了一张CA签发的微软证书。但是我现在搜不到那条新闻了,有人记得的话麻烦在评论区贴一下资料。
总而言之,这个问题完全依赖于CA的安全措施做得够不够周到。而CA毕竟也只是一个商业机构,不是什么科技领先人类文明三五百年的神奇仙境,该出安全问题还是照样出安全问题,该屈服于强权还是屈服于强权,不要对它们盲目信任。
我记得斯诺登泄露过NSA如何窃听Yahoo和Google的网络流量来着,刚才翻出来仔细看了一眼,发现NSA玩得高端多了,是直接在CDN里面做手脚,根本不需要CA的配合,中印两国在这方面还是嫩了点啊。
NSA的手段就跟原题不搭了,暂时先跳了吧,哪天看到了相关问题我再写一下。
CA当然有审核的责任,要不然凭什么收钱,大家又凭什么信任这个CA。