作者回复: 这可以做标准参考答案了
作者回复:
我们先从证书类型开始:
我们知道CA是一个机构,它的职责是给一些公司或者个人颁发数字证书,在颁发证书之前,有一个重要的环节,就是审核申请者所提交资料的合法性和合规性。
不过申请者的类型有很多:
如果申请者是个人,CA只需要审核所域名的所有权就行了,审核域名所有权有很多中方法,在常用的方法是让申请者在域名上放一个文件,然后CA验证该文件是否存在,即可证明该域名是否是申请者的。我们把这类数字证书称为DV,审核这种个人域名信息是最简单的,因此CA收取的费用也是最低的,有些CA甚至免费为个人颁发数字证书。
如果申请者是普通公司,那么CA除了验证域名的所有权之外,还需要验证公司公司的合法性,这类证书通常称为OV。由于需要验证公司的信息,所有需要额外的资料,而且审核过程也更加复杂,申请OV证书的价格也更高,主要是由于验证公司的合法性是需要人工成本的。
如果申请者是一些金融机构、银行、电商平台等,所以还需额外的要验证一些经营资质是否合法合规,这类证书称为EV。申请EV的价格非常高,甚至达到好几万一年,因为需要人工验证更多的内容。
好了,我们了解了证书有很多种不同的类型,DV这种就可以自动审核,不过OV、EV这种类型的证书就需要人工验证了,而每个地方的验证方式又可能不同,比如你是一家美国本地的CA公司,要给中国的一些金融公司发放数字证书,这过程种验证证书就会遇到问题,因此就需要本地的CA机构,他们验证会更加容易。
因此,就全球就有很多家CA机构,然后就出现了一个问题,这些CA是怎么证明它自己是安全的?如果一个恶意的公司也成立了一个CA机构,然后给自己颁发证书,那么这就非常危险了,因此我们必须还要实现一个机制,让CA证明它自己是安全无公害的。
这就涉及到数字证书链了。
要讲数字证书链,就要了解我们的CA机构也是分两种类型的,中间CA(Intermediates CAs)和根CA(Root CAs),通常申请者都是向中间CA去申请证书的,而根CA作用就是给中间CA做认证,通常,一个根CA会认证很多中间的CA,而这些中间CA又可以去认证其它的中间CA。
比如你可以在Chrome上打开极客时间的官网,然后点击地址栏前面的那把小锁,你就可以看到*.geekbang,org的证书是由中间CA GeoTrust RSA CA2018颁发的,而中间CA GeoTrust RSA CA2018又是由根CA DigiCert Global Root CA颁发的,所以这个证书链就是:*.geekbang,org--->GeoTrust RSA CA2018-->DigiCert Global Root CA。
因此浏览器验证极客时间的证书时,会先验证*.geekbang,org的证书,如果合法在验证中间CA的证书,如果中间CA也是合法的,那么浏览器会继续验证这个中间CA的根证书。
这时候问题又来了,怎么证明根证书是合法的?
浏览器的做法很简单,它会查找系统的根证书,如果这个根证书在操作系统里面,那么浏览器就认为这个根证书是合法的,如果验证的根证书不在操作系统里面,那么就是不合法的。
而操作系统里面这些内置的根证书也不是随便内置的,这些根CA都是通过WebTrust国际安全审计认证。
那么什么又是WebTrust认证?
WebTrust(网络信任)认证是电子认证服务行业中唯一的国际性认证标准,主要对互联网服务商的系统及业务运作的商业惯例和信息隐私,交易完整性和安全性。WebTrust认证是各大主流的浏览器、微软等大厂商支持的标准,是规范CA机构运营服务的国际标准。在浏览器厂商根证书植入项目中,必要的条件就是要通过WebTrust认证,才能实现浏览器与数字证书的无缝嵌入。
目前通过WebTrust认证的根CA有 Comodo,geotrust,rapidssl,symantec,thawte,digicert等。也就是说,这些根CA机构的根证书都内置在个大操作系统中,只要能从数字证书链往上追溯到这几个根证书,浏览器会认为使用者的证书是合法的。
这也同时回答了你上面的问题。
作者回复: 只要拿到系统权限,就能随意安装根证书,这种我见过很多!
之前百度升级到https最后,很多劫持就是采用这种方式来干的,在操作系统安装假的根证书,然后劫持整个站点!
所以让黑客在你电脑上安装了根证书,https也会变得不安全了!
最后感谢你一路陪伴和提的问题,也让我能更好的改进专栏
作者回复: 不好意思,这个我写错了,这个pre-master是随机生成的,没有用到client-random和service-random。
内容已经改正了
作者回复: 首先,渲染进程有个主线程,DOM解析,样式计算,执行JavaScript,执行垃圾回收等等操作都是在这个主线程上执行的,
没有所谓的渲染引擎线程和js引擎线程的概念,你可以把渲染和执行JavaScript是一种功能,如果要执行这些功能的话,需要在一个线程上执行,在chrome中,他们都是执行在渲染进程的主线程上。
正是因为他们都是执行在同一个线程之上的,所以同一时刻只能运行一个功能,也就是你说的互斥。
不知道这样解释你明白没有,如果还有疑惑欢迎继续提问。
作者回复: 第一个问题:
通常浏览器是没有自己的证书的,也没有自己的公钥和私钥。
不过有一种情况,那就是服务器需要验证浏览器的身份,比如银行转账啥的,这种情况下,银行会给浏览器一个证书,通常是U盘的形式提供的,这种叫双向认证,不过不常见。
2:浏览器端计算pre-master是相对安全的,想攻破难度是非常高的,因为要攻击浏览器系统,做各种逆向,不是简单地截获下网络数据就行了。
3:公钥是和数字证书一起发动的,如果公钥改了,那么数字证书就会验证失败的,验证失败了浏览器也就不会继续下一步的请求了。
作者回复: 证书里面就有url信息,如果证书没有问题,说明这个url没有问题!
如果URL被劫持到黑客的服务器上,那么黑客的服务器是不能拿出真的证书的!
作者回复: 🤝
作者回复: 🤝
作者回复: 你开心就好 🤝
作者回复: 你的意思服务器和客户端分别使用不同的对称密钥?
正常的https只使用一个,即便使用双向认证,也依然是使用一个密钥!
作者回复: 🤝
作者回复: 加餐在这个专栏,先完成这个专栏,加餐,答疑,修订都还没做完!