HTTPS--CA认证

证书颁发机构(CA, Certificate Authority)是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。

如何向 CA 申请证书

(当然不是所有的申请流程都如下所述,但原理都是一样的)
我们需要使用一个 openssl 软件,在这个软件中填写你申请所需的基本信息,如国家、公司、域名、邮箱、非对称算法等等。让后我们会得到两个文本文件。(xxx表示你申请的域名)

xxx.csr 这是需要发给CA机构申请证书用的文件

xxx.key 这是服务器非对称用的私钥

  • .csr 文件包含什么?

    该文件解码后可以看到包含三部分信息:

    1. 域名基本信息
    2. 公钥,和上面的私钥是一对
    3. 签名
  • 解释 签名

    签名的过程:将1、2两部分信息进行 sha256 散列得到 hash 值,然后通过RSA算法对hash值进行加密,密钥为上面提到的私钥。

    签名的作用:提供给CA校验该csr文件的有效性。CA收到csr后,使用公钥解密,然后也将1、2部分信息进行hash,与解密的数据对比,相同则说明数据没有被篡改过。

    • 为什么要先hash再加密,直接加密不行吗?

      hash是一种摘要算法,元数据可能很大,直接对非常大的数据加密效率太低,密文也会很大,因此先对要加密的数据进行hash获取它的摘要信息,有效性是一样的。

CA 收到申请者的CSR文件后,进行审核,通过后就会下发证书文件。

证书文件

发回的证书可能包含两个文件:

  1. 申请域名的证书

  2. 证书链(包含多个节点,每个节点都是一份证书)

    通常是.pem或.crt后缀的文本文件。

每个证书的内容主要也包含三部分:

  1. 基本信息,如证书颁发机构、有效期、证书申请信息
  2. 公钥,即服务器非对称用的公钥
  3. 签名,对上面部分进行hash再用 CA 的私钥加密签名(也是用于客户端验证证书的有效性)

客户端如何验证证书?

通常一个证书链有多个证书节点,这里我们拿有3个节点的链举例:

  • DST Root CA X3 根证书节点
    • Let's Encrypt Authority X3 中间证书节点
      • xxx.com 申请者自己的证书

证书链是环环相扣,由根节点签发中间节点,中间节点签发域名证书。

  • 验证流程:
  1. 客户端访问 xxx.com 时,服务器会返回证书链;
  2. 客户端首先判断 xxx.com 证书是否可信,主要是通过验证签名,这里就需要加密这个证书的公钥。即中间节点的CA公钥。
  3. 因此去中间节点寻找公钥,中间节点证书第二部分就是CA的公钥,但我们还不能保证中间节点证书的有效性,因此还需先对中间节点进行签名验证,这时就需要去根节点找公钥。
  4. 根节点CA包括一些非常权威的CA机构,他们的证书库通常被内置在操作系统中或浏览器中。我们找到根节点的CA公钥,然后一步步回去验证下面节点的有效性。都验证通过了,则该证书有效。客户端获得了服务器的公钥可以进行非对称加密了。

HTTPS通信大致过程

  1. 建立tcp连接
  2. 开始TSL握手
    1. client hello
    2. server hello
    3. server发送证书、非对称公钥
    4. client回传PreMaster Key
    5. 生成对称加密密钥Master Key,结束
  3. 开始对称加密传输

具体流程可看我的博客《抓包观察TSL1.2握手过程》

上一篇:搭建https格式的网站


下一篇:js实现按照首字母排序