数字证书是一个包罗了目标网站各种信息如网站域名、证书有效期、签发机构、用于天生对称密钥的公钥、上级证书签发的署名等的文件,通过数字证书我们可以确认一个用户大概服务站点的身份。
现实场景中的数字证书是一系列的,形成了一个信托链,信托链的最顶端是 CA。
CA 是 Certificate Authority 的简写,它是一个负责发放和管理数字的证书的第三方权势巨子机构。CA 的工作流程是如许的:
CA 本身给本身颁发的用本身的私钥署名的证书称为根证书,根证书的私钥安全性至关紧张,根证书的私钥都是被生存在离线盘算机中,有严格的操纵规章,每次必要利用时,会有专人将数据通过 USB 拷贝已往,操纵完了以后,再将数据带出来(这个专指 CA 根证书的私钥)。
一个用户想要获取一个证书,起首本身得有一个密钥对,私钥本身留着,公钥以及其他信息发送给 CA,向 CA 提出申请,CA 判明用户的身份之后,会将这个公钥和用户的身份信息绑定,而且为绑定后的信息举行署名(署名是通过 CA 根证书的私钥举行的),末了将署名后的证书发给申请者。
一个用户想要判定一个证书的真伪,就通过 CA 的公钥对证书上的数字署名举行验证,验证通过,就以为这个这个证书是有效的。
上面这个流程中有一个紧张条件,那就是 CA 受到大家全部人的信托。
然而在现实操纵中,我们并不能直接去跟 CA 申请一个数字证书,由于全天下要认证的内容太多了,CA 搞不过来,而且频仍的找 CA 申请,另有大概导致私钥走漏,这可就是一个大的灾难了。
那怎么办呢?现实操纵中,我们可以基于 CA 来构建一个信托链。详细来说,步调是如许:
起首我们的手机、条记本等操纵体系中都预装了 CA 颁发的根证书,他们是全部信托构建的基石,前面松哥已经截图给大家看了 Windows 中预装的根证书了。
假设 CA 签发了一个证书 A,在这个过程中 CA 称为 Issuer,A 称为 Subject,假设 A 是一个受信托的中心证书,已经预装在我们的操纵体系中了。如今由 A 利用它本身的私钥给某一个网站签发了一个证书 B。
如今当我们的电脑必要访问该网站的时间,该网站就会给我们发来一个证书 B,由于我们的欣赏器并不知道 B 证书是否合法,但是我们的电脑上已经预装了 A 证书,我们可以从 A 证书中提取出 A 的公钥,然后利用 A 的公钥对 B 证书的署名举行验证(由于 B 证书的署名是 A 的私钥签的),如果验证通过了,就阐明 B 是合法的。
类似的原理,B 也可以继承签发 C 证书,C 继承签发 D 证书,如许就形成了一个信托链。
如果服务端的署名是 D 证书,那么一样寻常来说,服务器返回给欣赏器的就会包罗 B、C、D 三个证书(由于 A 证书已经在我们的电脑上了),纵然只返回 D 证书,欣赏器也可以根据 D 书中的信息,主动下载到 B、C 两个证书然后举行验证。
松哥记得从前上大学的时间,在 12306 网站上买火车票,第一次访问的时间必须要本身先手动安装一个根证书到体系中,然后才气访问。这就是由于当时 12306 所利用的证书的签发机构不被欣赏器承认,类似于上面的第 3 步,12306 给我发了一个数字证书 B 返来,但是欣赏器上没有符合的公钥对这个 B 证书举行验证,当我往本身的体系上安装了 12306 给的证书之后,相当于我的电脑上有了一个证书 A,如今就可以对 B 证书举行验证了。
总结一下:
CA 是一个权势巨子的机构,是一个发证构造,CA 发出来的证书可以证明一个人大概构造的身份。
任何人都可以得到 CA 的证书(含公钥),用以验证 CA 所签发的证书。
每一个数字证书都是由上级证书的私钥来签发的,处于最顶层的就是 CA 签发的根证书了,这个根证书没有上级证书了,以是这个根证书现实上是由 CA 本身的私钥来签发的,这也叫做自署名,即 Self-Signed。