证书的类型不同,定价也不同,以下是某服务商的报价:
DV(域名认证) | OV(组织认证) | EV(拓展认证) |
---|---|---|
做为消费者,我们会根据自己的需求选择不同类型的证书。同时作为一名折腾爱好者,我又忍不住想了解一下这些CA机构到底干了什么事情?这项证书认证业务利润到底有多高?
所谓好货不便宜。上面证书的价格就是该证书安全级别的直接体现,越贵越安全!试想我拥有一个域名,我只要证明该域名确实是属于我的,并不是第三方坏蛋的,那就来一个DV证书。CA机构只需要简单证明一下就行了。但如果我是一个组织,我不仅要证明我拥有这个域名,还要证明我提供的服务也是和合法注册的,那就来套 OV。那如果我想要证明的更多,我就可以考虑一下EV了。
CA机构也会根据你的不同需求,以及为了做好一个权威的样子,我得有模有样的让你填一些资料,相关证件信息,会特地去到相关的构去确认一下你提供的信息是否真实。基本就是一个大家都认可的信誉良好的中间人。
这样看来,OV, EV确实有一些“跑腿”的工作,是因该付他们一些费用。但DV你总可以免费吧,而且根据目前的认证方法,其有一个方法就是只需要在我的DNS上添加一条相关记录,你们能查到,也就能证明了。整个过程都是自动化的,这也要收我这么多费用?
如果真的是空手套白狼,这么好的肥差,那不因该一抓一大把CA了嘛,可现在确实还没有到这么白热的地步啊,至少我们现在还没看到中国经济风向标-中国大妈们活跃在这一块。那是不是我们错怪他们了?
动手之前,不如咱们冷静下来把事情的经过再捋一捋。
HTTPS
互联网通讯安全的基石,依托于SSL/TLS,为什么这里有根杠?这是因为SSL是TLS的前身,现在改名叫传输层安全协议。也就是我们约定好了,只要我们照着这样干,就是安全的!
先不急查看RFC,因为太长...
哦不,因为为了代入感更强,各位大侠要注意了,请把切换成互联网大咖因有的姿势,我们来试着解决一下这个互联网通讯安全问题。
让我们先明确一下用户需求:你发消息,想约自己最好的朋友出去浪,一定要保密,不然如果计划被其它人得知,就很有可能会泡汤。最靠谱的做法就是,发送的信息,有且只有我的朋友可以看懂。
解决方案一:对称加密
我和朋友都有同样的密钥--一串密码,我如果想发送信息给朋友,先用这密钥来加密发送的信息,朋友收到消息后,用密钥来解密我发送的信息,就能看到原文。就算其它人想办法获取了我们之间的通讯内容,没有这串解密钥,也看不到原文,这样就能满足我们的需求了。
放在互联网的场景中,我们来看看这种解决方案是否有效。我有一台服务器,对外提供高考成绩查询服务。小明他们班都来我的站点上来查询成绩,为了安全,他们需要把发送过来的身份信息用我们给的密钥进行加密,这样就只有我们能看懂他们的身份信息了。但他们班有30多个人,也就是说有30多个人有这份密钥,并以自己的方式将这个关键的密钥存在了30份不同的地方。根据‘我就只跟你说,你不要跟其它人说’原理,我们的密钥根本就没有安全性可言,随时都有暴漏的风险。
解决方案二: 非对称加密
如果说公钥的权力太大,那能不能把权限调整一下,哪怕你有公钥,但经过公钥加密的信息,哪怕你拿到了不属于你的公钥,但你还是打不开经过公钥加密后的信息,只有私钥可以打开。这也就是密码学领域里的“非对称加密”。可以理解为公钥和私钥的权力不对等--公钥加密的信息,自己没法解开,只有私钥可以解开;私钥加密的信息,公钥都可以解开。那么假设公钥被他人非法持有,并且同时很不幸,他们还获取了加密后的内容,但因为他们得到私钥的成本较大,我们一样可以认为这对他们并没有什么帮助,用户信息还是安全的。但真的是这样吗?
中间人攻击
上面的两种方案,都需要公钥,且公钥需传播给持有者,那么传输方式可能就不安全,就算安全的传给了合法持有者,但持有者对公钥的安全保护级别又不一样,也会有不同的安全风险。
那么非法者还是有很多方式可以获取公钥。但上面咱们也提到了,哪怕他们拿到了公钥,用户所输的信息也一样安全可靠。从非对称加密算法来看,确实如此。但如果在这个流程中穿插了一个中间人,那么还会安全吗?
也就是有一个中间人,先不论好坏。他通过某种途径获取了我们的公钥,也就是说他有能力解密服务器发出来的信息。不仅于此,他还想获取用户发送的信息。于是他也做了一台服务器,专门用来转发正常从客户端到服务器和服务器到客户端的信息,他并没有做什么破坏,服务器和客户端都感觉不到异样。而且可实施性也很高,比如很多钓鱼网站。他们将自己的网页服务做得和正规服务商提供的一模一样,普通用户很难察觉到这一点。这时候用户输入了自己的用户名和密码!这个钓鱼网站用自己的公钥给信息加了密,发给了自己的服务器,自己的服务器用私钥解密并了解了用户的相关信息,这时候再将这些明文信息和盗取的正版公钥加密,传给正牌服务商的服务器,等信息返回后,他再用正版的公钥将信息解密,并用非法私钥加密,传给自己的非法前端。这一套完整的流程,从算法的角度来说,没有任何问题,同时用户的信息也就这样泄漏了!
看来中间人是关键,那我们该如何进一步保证和户信息安全呢?
CA - certificate authority,身份认证
看来我们是没法将公钥直接发送给客户端,因为这一步如果这样走,那我们规避不了中间人的破坏了。
这个时候,我们发现需要明确几个关键角色,一起来解决这个问题。
- 客户端 -- 需要持有公钥进行通讯
- CA -- 也就是第三方机构,确保证书传输的合法性和安全性
- 服务端 -- 提供合法服务
那么首先,我们的公钥会由CA发送给客户端, 客户端为了可以解密相关信息,也需要提前存储CA机构官方发布的公钥,用来解密。那么如果用CA颁发的公钥来解密出我们自己的公钥,那说明没有被调包,我们就可以依赖了。
这个过程就像我们现在用的浏览器,拿Chrome举例,Chrome官方发布的Chrome安装包中,会提前包含一些权威机构CA的公钥,这样,只要是我们通过正规渠道下载到的Chrome安装包,就已经拥有了这些证书。这时假,当我们在浏览器地址栏输入我们想要访问的站点时,浏览器会收到CA机构发送过来已经颁发且加密的公钥,浏览器用预装的CA公钥进行解密,如果能解密成功,说明公钥没有被调包,这样就可以放心的和服务端进行通讯了。
这样是不是就完美的解决了中间人的问题?
实际还差一点,因为上面我们认为对证书传输做了一层加密因该就安全了,但如果中间人也向该CA机构申请了合法的证书,CA的公钥也能解密出该中间人传过来的公钥,这样是不是又回到了之前中间人的问题呢?
证书唯一性
目前为止,我们发现CA机构除了跑腿,确实也做了一些其它的事情,目前看来还好没着急动手。
CA机构向咱们颁发的证书是作为他们的一个产品进行销售的,那么很多商品上都会有一个全球唯一的编号,这样在市场上流动的时候就有记录可寻,方便监管。
证书的商品属性,也让他拥有了一个这样的唯一编号,我们管这个编号要签名。那么能解密,保证了证书是正品,不是假冒伪劣。数字签名,则保证了唯一性,这样我通过这个唯一性,就能识别出该证书是不是我的了!
那么如何验证这个唯一性的证确性呢?其实,前面有介绍过,不同级别的证书,当你申请的时候,会让你填写一些个人信息,越贵,则需要填写或认证的信息就越详细。那么从这里可以看到,证书是带有一些特征属性的,那么这个唯一签名,也会根据这些属性,按一定的算法,推算出这样一个唯一签名。那么浏览器就可以根据这些规则自动去较验签名的正确性,这样最后一环也得到了保障!
哈哈,终于,我们成功的当了一回互联网架构师,让互联网变得更安全,更可靠。
看来CA机构还是干了好些事情,提供了价值,认可了,自然也会愿意购买这些服务。我们也需要这样一批正规,有权威,大家都信得过的机构,来做这个“中间人”!
全文完