比如A和B通信,B的公钥和签名被O截取,而O原先已将自己的公钥上传CA得到了O的签名。于是O将B的公钥和签名一起替换成O的公钥和O的签名,再发给A。

那么A能够识别这个证书中连签名也被替换了吗?


按个人理解,这个问题取决于CA在受理用户的签名请求时,是仅仅对用户提供的公钥进行签名,还是要对包括用户公钥和申请用户信息等其他要素的总和进行整体签名。

如果CA仅仅是对用户公钥进行签名,那么很显然第三方攻击者完全可以在不掌握CA私钥的前提下,就以申请签名的名义利用CA得到一份自己公钥的签名,进行两者同时替换。

如果CA是要对用户公钥和申请用户信息的整体进行签名,那就要看CA会不会审核申请签名的用户的身份信息。

比如说这里的CA先后收到两个宣称自己是B的用户要给公钥进行签名,但两个公钥是不一样的。显然后者是攻击者O在冒充B申请新的签名。CA如果负责的话应该对同一用户对不同公钥进行签名的请求进行警惕,比如拒绝第二次签名或者联系用户本人进行确认等。


谢邀,首先我得纠正一下你的说法。当CA签名的时候,它不是只对公钥签名的,而是会对整张数字证书签名。所以一张完整的数字证书你不可能只换签名,这样通不过完整性校验,要换只能把整张证书换掉。

所以这个问题的正确表述应该是:

比如A和B通信,B的公钥和数字证书被O截取。而O原先已将自己的公钥上传CA,并得到了CA签发的一张等效的数字证书。于是O将B的公钥和证书一起替换成O的公钥和O的证书,再发给A。A能够识别自己正在遭受中间人攻击吗?

好,如果你想问的问题是这个的话,那么一句话总结:用户没有任何办法判断自己是不是正在遭受攻击,而且这样的攻击已经大规模发生过最少两次了。这两次攻击一次是印度政府发动的,一次是中国政府发动的,都在相关机构手里留下了确凿的证据,之后涉案的CA都被开除了Root CA资格。

印度机构造SSL"假证书" 威胁Gmail安全?

netsecurity.51cto.com图标谷歌称CNNIC发布伪造CA证书-月光博客?

www.williamlong.info图标

当然,我个人怀疑美国国安局可能也没少玩类似的把戏,但是既然人家没有漏出马脚,那我也不好意思多说什么。

除此之外,我记得零几年还发生过这么一件事:某男子通过社会工程学手段伪装成微软的法人代表,然后诈骗到了一张CA签发的微软证书。但是我现在搜不到那条新闻了,有人记得的话麻烦在评论区贴一下资料。

总而言之,这个问题完全依赖于CA的安全措施做得够不够周到。而CA毕竟也只是一个商业机构,不是什么科技领先人类文明三五百年的神奇仙境,该出安全问题还是照样出安全问题,该屈服于强权还是屈服于强权,不要对它们盲目信任。


我记得斯诺登泄露过NSA如何窃听Yahoo和Google的网路流量来著,刚才翻出来仔细看了一眼,发现NSA玩得高端多了,是直接在CDN里面做手脚,根本不需要CA的配合,中印两国在这方面还是嫩了点啊。

NSA infiltrates links to Yahoo, Google data centers worldwide, Snowden documents say?

www.washingtonpost.com图标

NSA的手段就跟原题不搭了,暂时先跳了吧,哪天看到了相关问题我再写一下。


有个更有意思的场景,而且更实际。用户A同时信任CA1和CA2, 其中CA1签了给B的证书。 但O成功冒充B让CA2签了一个域名,SID, OID等信息和B一样的证书,O唯独替换了公钥。此时A发起对B的连接和密钥交换请求,会发生什么呢。。。搜索一下CA根被移出火狐(Mozilla Firefox)的新闻吧。

CA当然有审核的责任,要不然凭什么收钱,大家又凭什么信任这个CA。


证书机构CA一般签发证书的简要流程如下:

1. 证书申请者向认证机构CA提交公钥、组织信息、个人信息(域名)等信息并申请认证。

2. CA 通过线上或线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等

3. 信息如果审核通过,CA 会向申请者签发认证文件-证书。

其中证书生成则是认证机构对证书申请者提供的自身信息,公钥信息和其他附属信息进行签名(先对明文做消息摘要然后使用 CA 的私钥对信息摘要进行加密,密文即签名)然后附加上CA自己的信息来提供客户端验证。

即证书=公钥+申请者与颁发者信息+签名。

证书中所有提供的信息发生任何变化CA都将进行重新校验并对其进行重签名,既不存在只对用户提供公钥进行签名这种说法。

另外当攻击者O如果真的将自己的公钥成功上传CA并且还能够通过CA对你的域名所有权的验证,那么这时候签发的数字证书用户是没有任何办法判别是不是遭受攻击的

CA作为PKI的核心,它存在的本身具有权威性和可靠性,任何用户默认都是对其可信的。所以即使客户端这一秒收到的证书下一秒发生变化,如果这个证书是CA签发的都是无法识别是否被攻击。

一般CA都会对用户进行严格的核实验证来证明你对这个域名或者你对这个主机具有实际的控制权,如下图所示。所以像题主所叙述的情况还是比较少见的。


除非认证机构不作为,否则即便是最简单的Https证书也要验证你对该域名的所有权。

除非是你的域名管理账户被盗,否则无法通过验证。而你的域名管理账户都能被盗,谁知道你的网站伺服器有没有被攻破。这样的网站不值得信任,且与证书认证系统无关。

而且Https证书还有更高级别的不仅验证域名所有权,还会查验其他真实信息,也会在浏览器上有不同的展现,如最简单的小锁标志,更高一级的绿色地址栏,甚至显示公司名称。

而如果认证机构不作为,后果只有一个,视严重程度,低级别的认证机构可能被上级机构吊销证书,这样被吊销的认证机构所签发的所有证书都会失效。更甚者其所属的根证书机构被全球所有主流操作系统和浏览器移出信任列表。

认证机构唯一的资产就是信用,一般来说不会胡来,除非管理不善和另有压力。作为用户,你的选择权在于选择靠谱的浏览器和操作系统。浏览器和操作系统预置可信的根证书。根证书管理机构授权可信的下级认证机构,基层认证机构严格认证流程。

毕竟高级别认证可不是免费的,有足够的收益去做这件事。用户需要注意,使用金融机构或购物网站的时候,除了核对域名之外还要看是否是属于高级别认证,一般来说涉及资金安全的网站,是不会用低级别认证的。


题主的思考是对的。CA 签名证书,并为证书的正确性负责。证书中包含有很多信息,可以限制公钥使用的方式。其中最重要的是主机名称(一般设置在 common name 栏位,或者主题备用名称栏位)。CA 给 foo.com 签发的证书里,除了公钥外,还有 foo.com 这样的字样。这样,这个公钥相应的私钥持有者并不能用这个证书来冒充 bar.com。

至于为什么 CA 会给这把公钥签名,那是因为 CA 通过合理的方式,确认了公钥的持有者的确是这个域名的控制者,这才会签名,与此同时用自己的信用为这个数字签名背书。技术上,CA 可以任意签发证书;实际上,如果 CA 会受到浏览器和操作系统厂商的制约,如果 CA 滥发证书,那么这个 CA 就会被移除出信任列表。


建议去ietf去看一下cmp协议,现在写的这些not even wrong


ca签名的时候是要验证你对该域名的所有权,签名中含有组织机构和域名地址,比如b想冒充谷歌申请签名,得拿到http://Google.com控制权,b如何拿到?

当然了,ca如果故意放水那是另外一回事,之前cnnic事件。


谢邀。

CA签发的https证书里包含了证书可用的域名,如果O要冒充B,需要使用与B相同的域名向CA发起申请,CA会对这个申请进行核实,以证明你对于域名的实际控制权。


推荐阅读:
相关文章