• 基于CFSSL工具创建CA证书


    背景描述

    CA(Certification Authority)证书,指的是权威机构给我们颁发的证书。

    在局域网中部署组件时,想要通过证书来实现身份的认证,确保通信的安全性,可以通过cfssl工具来进行CA证书,服务端证书,客户端证书的创建。

     

    部署cfssl工具

    下载cfssl,cfssljson,cfssl-certinfo工具

    下载地址:https://pkg.cfssl.org/

    [root@localhost tools]# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
    [root@localhost tools]# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
    [root@localhost tools]# wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64

     

    增加命令的执行权限,并且增加到相关目录

    [root@localhost tools]# chmod +x cfssl*
    [root@localhost tools]# mv cfssl_linux-amd64 /usr/local/bin/cfssl
    [root@localhost tools]# mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
    [root@localhost tools]# mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo

     

    创建认证中心(CA)

    CFSSL可以创建一个获取和操作证书的内部认证中心。

    运行认证中心需要一个CA证书和相应的CA私钥。任何知道私钥的人都可以充当CA颁发证书。因此,私钥的保护至关重要

    配置证书生成策略

    配置证书生成策略,让CA软件知道颁发有什么功能的证书。

    • #vim >ca-config.json
      {
        "signing": {
          "default": {
            "expiry": "8760h"
          },
          "profiles": {
            "kubernetes": {
              "usages": [
                  "signing",
                  "key encipherment",
                  "server auth",
                  "client auth"
              ],
              "expiry": "8760h"
            }
          }
        }
      }
      default默认策略,指定了证书的默认有效期是一年(8760h)
    • kubernetes:表示该配置(profile)的用途是为kubernetes生成证书及相关的校验工作
    • signing:表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE
    • server auth:表示可以该CA 对 server 提供的证书进行验证
    • client auth:表示可以用该 CA 对 client 提供的证书进行验证
    • expiry:也表示过期时间,如果不写以default中的为准

    生成CA证书和私钥(root证书和私钥)

    创建一个文件ca-csr.json

    #vim ca-csr.json
    {
      "CN": "kubernetes",
      "key": {
        "algo": "rsa",
        "size": 2048
      },
      "names": [
        {
          "C": "CN",
          "ST": "ShangHai",
          "L": "ShangHai",
          "O": "k8s",
          "OU": "System"
        }
      ]
    }

    参数介绍:

    • CN: Common Name,浏览器使用该字段验证网站是否合法,一般写的是域名。非常重要。
    • key:生成证书的算法
    • hosts:表示哪些主机名(域名)或者IP可以使用此csr申请的证书,为空或者""表示所有的都可以使用(本例中没有hosts字段)
    • names:一些其它的属性
    • C: Country, 国家
    • ST: State,州或者是省份
    • L: Locality Name,地区,城市
    • O: Organization Name,组织名称,公司名称(在k8s中常用于指定Group,进行RBAC绑定)
    • OU: Organization Unit Name,组织单位名称,公司部门

     

    生成CA证书和CA私钥和CSR(证书签名请求)

    [root@localhost tools]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca
    2020/12/04 14:20:39 [INFO] generating a new CA key and certificate from CSR
    2020/12/04 14:20:39 [INFO] generate received request
    2020/12/04 14:20:39 [INFO] received CSR
    2020/12/04 14:20:39 [INFO] generating key: rsa-2048
    2020/12/04 14:20:39 [INFO] encoded CSR
    2020/12/04 14:20:39 [INFO] signed certificate with serial number 497233672920328375338343228164630446467151606126
    
    [root@localhost tools]# ls -l ca*
    -rw-r--r-- 1 root root  294 Dec  4 14:13 ca-config.json
    -rw-r--r-- 1 root root 1045 Dec  4 14:20 ca.csr
    -rw-r--r-- 1 root root  246 Dec  4 14:19 ca-csr.json
    -rw------- 1 root root 1675 Dec  4 14:20 ca-key.pem
    -rw-r--r-- 1 root root 1310 Dec  4 14:20 ca.pem

    该命令会生成运行CA所必需的文件ca-key.pem(私钥)和ca.pem(证书),还会生成ca.csr(证书签名请求),用于交叉签名或重新签名。

    查看cert(证书信息):

    # cfssl certinfo -cert ca.pem

    查看CSR(证书签名请求)信息:

    # cfssl certinfo -csr ca.csr

     

    创建etcd服务端证书

    创建一个文件etcd-csr.json

    #vim etcd-csr.json
    {
      "CN": "etcd",
      "key": {
        "algo": "rsa",
        "size": 2048
      },
      "names": [
        {
          "C": "CN",
          "ST": "Beijing",
          "L": "Beijing",
          "O": "DC",
          "OU": "System"
        }
      ]
    }
    用CA签发etcd证书和私钥
    cfssl gencert 
      -ca=ca.pem 
      -ca-key=ca-key.pem 
      -config=ca-config.json 
      -profile=kubernetes etcd-csr.json | cfssljson -bare etcd
    
    2020/12/04 14:33:00 [INFO] generate received request
    2020/12/04 14:33:00 [INFO] received CSR
    2020/12/04 14:33:00 [INFO] generating key: rsa-2048
    2020/12/04 14:33:00 [INFO] encoded CSR
    2020/12/04 14:33:00 [INFO] signed certificate with serial number 86899219278041222746661164070003623992607015229
    2020/12/04 14:33:00 [WARNING] This certificate lacks a "hosts" field. This makes it unsuitable for
    websites. For more information see the Baseline Requirements for the Issuance and Management
    of Publicly-Trusted Certificates, v.1.1.6, from the CA/Browser Forum (https://cabforum.org);
    specifically, section 10.2.3 ("Information Requirements").
    
    [root@localhost tools]# ls -l etcd*
    -rw-r--r-- 1 root root  993 Dec  4 14:33 etcd.csr
    -rw-r--r-- 1 root root  201 Dec  4 14:30 etcd-csr.json
    -rw------- 1 root root 1679 Dec  4 14:33 etcd-key.pem
    -rw-r--r-- 1 root root 1383 Dec  4 14:33 etcd.pem

    etcd.csr为etcd的证书请求文件,etcd-key.pem为etcd的私钥,etcd.pem为etcd的证书。至此,etcd的证书签发完成。此证书可以作为etcd的服务端证书来使用。

     

     

  • 相关阅读:
    舌尖上的中关村
    解决winform窗体闪烁问题
    24段魔尺,可以折出哪些精美图案(续)
    24段魔尺,可以折出哪些精美图案
    关于Python编程的一些问答
    BZOJ 1025: [SCOI2009]游戏
    BZOJ 1025: [SCOI2009]游戏
    BZOJ 1207: [HNOI2004]打鼹鼠
    BZOJ 1207: [HNOI2004]打鼹鼠
    BZOJ 1046: [HAOI2007]上升序列
  • 原文地址:https://www.cnblogs.com/shadow-yin/p/14843075.html
Copyright © 2020-2023  润新知