从前我看到https想到的只是加密传输,但是从来没想过如果网站本来就是假冒的,加密又有何用,也没有想过大家访问同一个网站,使用的应该是同一套算法,不就等于没加密吗?
两个问题在昨晚都得到了解决。
首先,https建立连接的时候会首先确认网站的可信性,技术上的实现信赖于数字证书。证书用于证明自身的可信性,但我凭什么相信你的证书是真的呢?我又该相信谁颁发的证书呢?(这里的我代表浏览器)是这样的,信任"谁"颁发的证书由浏览器厂商决定(或者直接使用操作系统自带的"谁"列表),"谁"是现实存在的机构,具体叫证书颁发中心什么的,简称CA。你可以打开chrome的证书列表,可以查看到颁发的CA。然后回到真伪的问题,数字证书比现实的证书好辨认得多,可以<简单地1>认为一个证书包含:{ 正文, 密文, 算法},网站向CA申请证书,提供'正文',然后CA使用自己的私钥和'算法'对结果进行加密得出'密文',最后把'密文'和'算法'置于'正文'后,一个数字证书就生成了。当浏览器与网站建立连接时(实际上是ssl层建立连接时),会获取该网站的数字证书,验证时用颁发该证书的CA的公钥(是的,浏览器会有的)和'算法'对'密文'解密,将结果与'正文'作对比,若一致则验证通过。
然后第二个问题,算了吧,ssl使用的是非对称加密算法(在建立连接时会协商好),而公钥可以<简单地2>认为就是数字证书的'正文'。
最后要说一下,本文标题的'天生一对'指的是哪一对佳人呢?是gfw和cnnic,前者可以负责导量,后者可以负责蒙骗。
(昨夜github疑似遭到中间人攻击,本人由此认识到cnnic,如果根CA也不可信,那么。。。。)
1明确地告诉各位,这不是真的,证书的内容还有很多项,而证书的验证过程就更不是真的了,但如若不想深究的话确实可以简单地认为就是这样,有兴趣可以了解一下证书链。
2这也不是真的。