zoukankan      html  css  js  c++  java
  • 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握手过程》

  • 相关阅读:
    Redis分布式锁的正确实现方式
    Redis+Jedis封装工具类
    MyCat配置文件详解--server.xml
    linux buff/cache释放
    mycat中间件--schema.xml配置文件详解
    mycat中间件--linux安装mycat1.6版本
    如何查找SHELL的进程号并杀死
    dubbo常用配置及注意事项
    xxxx
    解决docker镜像无法下载的问题
  • 原文地址:https://www.cnblogs.com/cpcpp/p/15228738.html
Copyright © 2011-2022 走看看