Palai

Palai

程序员 | 开源爱好者 | 喜欢交友

数字证书及 CA - 扫盲小记

什么是数字证书?#

数字证书是一种数字文档,证明用于加密在线资产(即电子邮件通信、文档、网站或软件应用程序)的公钥的真实性。

一个数字证书通常包含了:

  • 公钥;
  • 持有者信息;
  • 证书认证机构(CA)的信息;
  • CA 对这份文件的数字签名及使用的算法;
  • 证书有效期;
  • 还有一些其他额外信息;

数字证书的作用#

数字证书的作用,是用来认证公钥持有者的身份,以防止第三方进行冒充。说简单些,证书就是用来告诉客户端,该服务端是否是合法的,因为只有证书合法,才代表服务端身份是可信的。

什么是 CA?#

CA 是 “Certificate Authority” 的缩写,也叫 “证书授权中心”。它是负责管理和签发证书的第三方机构,就好比例子里面的中介 ——C 公司。一般来说,CA 必须是所有行业和所有公众都信任的、认可的。因此它必须具有足够的权威性。就好比 A、B 两公司都必须信任 C 公司,才会找 C 公司作为公章的中介。

什么是 CA 证书?#

CA 证书,顾名思义,就是 CA 颁发的证书。

人人都可以找工具制作证书。但是你一个小破孩制作出来的证书是没啥用处的。因为你【不是】权威的 CA 机关,你自己搞的证书不具有权威性。

什么是证书的信任链?#

实际上,证书之间的信任关系,是可以嵌套的。比如,C 信任 A1,A1 信任 A2,A2 信任 A3...... 这个叫做证书的信任链。只要你信任链上的头一个证书,那后续的证书,都是可以信任滴。

什么是根证书?#

假设 C 证书信任 A 和 B;然后 A 信任 A1 和 A2;B 信任 B1 和 B2。则它们之间,构成如下的一个树形关系(一个倒立的树)

image

处于最顶上的树根位置的那个证书,就是 “根证书”。除了根证书,其它证书都要依靠上一级的证书,来证明自己。根证书是不需要被证明的,根证书是整个证书体系安全的根本。
所以,如果某个证书体系中,根证书出了问题(不再可信了),那么所有被根证书所信任的其它证书,也就不再可信了。这个后果是相当相当滴严重

CA 证书的作用?#

  • 验证网站是否可信(针对 HTTPS)
  • 验证某文件是否可信(是否被篡改)

这里就要提到 HTTPS 了, 我们都知道 HTTP 跟 HTPPS 的区别:

  1. HTTP 是明文传输的,存在安全风险,HTTPS 在 HTTP 与 TCP 之间加入了 SSL/TLS 安全协议 ,使得报文能够安全传输
  2. HTTP 三次握手之后便可以进行传输,而 HTTPS 在 TCP 三次握手之后还需要 SSL/TLS 的握手才能传输
  3. HTTP 默认端口是 80 而 HTTPS 默认端口是 443
  4. HTTPS 需要向 CA 申请数字证书 来保证服务器的身份可靠

HTTPS 是加密协议,可以保证你的传输过程中,不被偷窥。
但是 HTTPS 就一定是安全的吗? 假设有假的基站起了转发全部信息的作用,这样就获取了全部的信息啊?

为了防止坏人这么干,HTTPS 协议除了有加密的机制,还有一套证书的机制。通过证书来确保,某个站点确实就是某个站点。
  有了证书之后,当你的浏览器在访问某个 HTTPS 网站时,会验证该站点上的 CA 证书(类似于验证介绍信的公章)。如果浏览器发现该证书没有问题(证书被某个根证书信任、证书上绑定的域名和该网站的域名一致、证书没有过期),那么页面就直接打开;否则的话,浏览器会给出一个警告,告诉你该网站的证书存在某某问题,是否继续访问该站点?

证书的签发和验证流程#

image

CA 签发证书的过程,如上图左边部分:

  • 首先 CA 会把持有者的公钥、用途、颁发者、有效时间等信息打成一个包,然后对这些信息进行 Hash 计算,得到一个 Hash 值;
  • 然后 CA 会使用自己的私钥将该 Hash 值加密,生成 Certificate Signature,也就是 CA 对证书做了签名;
  • 最后将 Certificate Signature 添加在文件证书上,形成数字证书;

客户端校验服务端的数字证书的过程,如上图右边部分:

  • 首先客户端会使用同样的 Hash 算法获取该证书的 Hash 值 H1;
  • 通常浏览器和操作系统中集成了 CA 的公钥信息,浏览器收到证书后可以使用 CA 的公钥解密 Certificate Signature 内容,得到一个 Hash 值 H2 ;
  • 最后比较 H1 和 H2,如果值相同,则为可信赖的证书,否则则认为证书不可信
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。