• Ukieweb

    佳的博客

    曾梦想仗剑天涯,后来工作忙没去。

PKI 公钥基础设施 及 CA 认证原理 之 -- CFSSL 证书生成工具的使用

CFSSL 是 CloudFlare 开源的一款 PKI/TLS 工具。 CFSSL 包含一个命令行工具 和一个用于 签名,验证并且捆绑 TLS 证书的 HTTP API 服务。 使用 Go 语言编写。

项目地址: https://github.com/cloudflare/cfssl

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

参考链接: https://blog.cloudflare.com/how-to-build-your-own-public-key-infrastructure/

cfssl用法参考:https://coreos.com/os/docs/latest/generate-self-signed-certificates.html

1.  CFSSL包括:

  • 一组用于生成自定义 TLS PKI 的工具

  • cfssl :是 CFSSL 的命令行工具

  • cfssljson :从cfssl和multirootca程序获取JSON输出,并将证书,密钥,CSR 和 bundle 写入磁盘

  • multirootca :是可以使用多个签名密钥的证书颁发机构服务器

  • mkbundle :用于构建证书池

2. 安装 cfssl (二进制方式)

这里我们只用到 cfssl 工具 和 cfssljson 和查看工具 cfssl-certinfo :

wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64

chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64

mv cfssl_linux-amd64 /usr/local/bin/cfssl
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo

3. cfssl 命令介绍

  • bundle: 创建包含客户端证书的证书包

  • genkey: 生成一个key(私钥)和CSR(证书签名请求)

  • scan: 扫描主机问题

  • revoke: 吊销证书

  • certinfo: 输出给定证书的证书信息, 跟cfssl-certinfo 工具作用一样

  • gencrl: 生成新的证书吊销列表

  • selfsign: 生成一个新的自签名密钥和 签名证书

  • print-defaults: 打印默认配置,这个默认配置可以用作模板

    • config:生成ca配置模板文件

    • csr:生成证书请求模板文件 

  • serve: 启动一个HTTP API服务

  • gencert: 生成新的key(密钥)和签名证书

    • -initca:初始化一个新ca

    • -ca:指明 ca 的证书

    • -ca-key:指明 ca 的私钥文件

    • -config:指明 请求证书 csr 的 json 文件

    • -profile:与 -config 中的 profile 对应,是指根据 config 中的 profile 段来生成证书的相关信息

  • ocspdump 

  • ocspsign 

  • info:  获取有关远程签名者的信息

  • sign:  签名一个客户端证书,通过给定的CA和CA密钥,和主机名

  • ocsprefresh 

  • ocspserve 

4. cfssl 创建证书

4.1 创建认证中心(CA)

运行认证中心 CA 需要生成 CA 证书CA 私钥 (root 证书 和 私钥),其实就是创建一个自签名证书

打印 csr 模板

# cfssl print-defaults csr > ca-csr.json
# cat ca-csr.json
{
    "CN": "example.net",
    "hosts": [
        "example.net",
        "www.example.net"
    ],
    "key": {
        "algo": "ecdsa",
        "size": 256
    },
    "names": [
        {
            "C": "US",
            "L": "CA",
            "ST": "San Francisco"
        }
    ]
}

修改模板如下

# vim ca-csr.json
{
  "CA": {
     "expiry": "87600h",
     "pathlen": 0
   },
  "CN": "dzcx root ca",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "ShangHai",
      "L": "ShangHai",
      "O": "k8s",
      "OU": "System"
    }
  ]
}

  • CA:  默认 CA 的证书只有 5 年,这里改为 10 年( 新增的参数,模板没有 )

  • CN: Common Name,自定义一个名字, 一般用域名

  • key:生成证书的算法

  • hosts:表示哪些主机名(域名)或者IP可以使用此 csr 申请的证书,为或者""表示所有的都可以使用( CA 不设置 hosts 字段)

  • names:一些其它的属性

    • C: Country, 国家

    • ST: State,州或者是省份

    • L: Locality Name,地区,城市

    • O: Organization Name,组织名称,公司名称(在k8s中常用于指定Group,进行RBAC绑定)

    • OU: Organization Unit Name,组织单位名称,公司部门

创建 CA 证书

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

[root@tmp cfssl]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
2020/05/20 13:57:38 [INFO] generating a new CA key and certificate from CSR
2020/05/20 13:57:38 [INFO] generate received request
2020/05/20 13:57:38 [INFO] received CSR
2020/05/20 13:57:38 [INFO] generating key: rsa-2048
2020/05/20 13:57:38 [INFO] encoded CSR
2020/05/20 13:57:38 [INFO] signed certificate with serial number 378591317186040818700586804688980599461480903089

您将获得以下文件

[root@tmp cfssl]# ll
total 20
-rw-r--r--. 1 root root 1005 May 20 13:57 ca.csr
-rw-------. 1 root root 1679 May 20 13:57 ca-key.pem
-rw-r--r--. 1 root root 1371 May 20 13:57 ca.pem
  • 请保证 ca-key.pem 文件安全。使用此密钥可以在您的 CA 中创建任何种类的证书。

  • * .csr 顶级 CA 这个文件未用

查看 CA.PEM 证书内容

X509v3 extensions: CA:TRUE

[root@tmp ca]# openssl x509 -in ca.pem -text -noout         
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            68:9f:21:f4:e0:69:dd:9f:c1:26:38:b8:23:f9:a9:d9:8c:b3:a3:9a
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=CN, ST=ShangHai, L=ShangHai, O=DZCX, OU=LAOJIA, CN=dzcx laojia local ca
        Validity
            Not Before: May 21 02:02:00 2020 GMT
            Not After : Apr 27 02:02:00 2120 GMT
        Subject: C=CN, ST=ShangHai, L=ShangHai, O=DZCX, OU=LAOJIA, CN=dzcx laojia local ca
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:a3:39:29:f2:f2:7f:ec:3c:cf:1c:c8:3a:27:d9:
                    e3:20:12:b8:61:8b:9b:2d:5c:c2:8b:14:9d:8e:18:
                    f2:a1:a3:4c:a0:14:ac:66:a8:8f:1a:91:77:08:aa:
                    2b:92:bd:78:a8:2a:9d:c2:1e:fd:d3:c3:a6:b9:6b:
                    4e:d8:85:de:57:7f:bb:e0:8c:3b:93:b3:64:78:99:
                    30:51:c2:d3:60:01:06:43:b1:4a:e7:b5:3a:83:24:
                    e9:c0:88:65:5b:44:92:20:af:0f:77:75:9d:a6:f9:
                    b3:17:b8:b8:e5:d0:16:da:85:12:f6:eb:5e:1e:c2:
                    4f:02:9f:5e:7f:94:b2:ca:a1:73:39:bf:7f:69:9f:
                    bc:47:13:50:bd:b9:6d:f6:78:1a:bb:57:74:e5:cf:
                    1c:5e:26:c8:19:95:2f:d5:ca:da:fe:e2:5e:08:19:
                    cf:c3:15:1b:f8:d8:ad:e7:1d:c3:b8:af:9c:ec:17:
                    06:49:c5:6f:cb:27:2b:cd:25:66:1a:96:71:ed:c5:
                    e6:19:db:16:06:4f:7a:26:95:80:bd:98:4a:ae:9e:
                    6f:69:30:af:1c:b2:00:88:89:95:ba:e8:4d:51:2f:
                    48:76:54:c2:5e:a4:3e:97:87:9a:58:00:c5:aa:47:
                    ca:ed:69:91:fb:bf:9b:7e:60:ec:ca:59:1e:17:db:
                    c2:d1
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Basic Constraints: critical
                CA:TRUE, pathlen:2
            X509v3 Subject Key Identifier: 
                5F:A3:94:0B:4C:DC:45:FA:5E:37:06:F5:6F:B0:0C:51:5E:45:63:C6
            X509v3 Authority Key Identifier: 
                keyid:5F:A3:94:0B:4C:DC:45:FA:5E:37:06:F5:6F:B0:0C:51:5E:45:63:C6
    Signature Algorithm: sha256WithRSAEncryption
         06:22:37:ca:e9:e2:b6:85:d2:7b:6d:eb:68:eb:36:b2:57:a9:
         f0:41:3c:0e:a2:ff:9f:5e:be:7f:60:64:2a:56:a9:07:6e:48:
         e6:2a:59:ab:07:95:82:a6:28:64:02:f9:d6:4c:09:25:9a:6a:
         bb:48:75:da:b5:a8:8f:a4:54:c6:cc:cc:2d:38:fa:60:26:87:
         a1:49:e0:da:19:4d:e2:29:88:87:5c:c9:3a:99:9e:81:dd:61:
         42:0b:be:f8:77:a3:f1:68:39:56:fc:26:42:e4:c2:04:56:fb:
         00:2a:8b:3a:ac:27:40:27:fb:96:d1:5a:e9:4c:f2:86:b7:dc:
         e4:6c:8f:b8:e4:53:13:f0:fb:19:bd:9d:9b:b2:5e:0f:16:8c:
         5f:d8:85:9c:5c:de:fc:88:46:c4:0b:19:80:4b:0b:0c:c2:e8:
         bf:ec:1e:92:2d:db:15:29:a1:89:bd:d2:c6:c3:22:78:26:51:
         c4:bc:32:fc:b7:78:48:9b:fd:97:f7:77:70:3e:23:c3:b4:5b:
         56:60:6a:69:85:c5:c4:e3:cb:8e:8d:1e:ca:08:d2:11:6d:c2:
         a6:ea:44:b7:5a:d4:13:28:62:e7:28:9a:76:95:1c:c5:b8:15:
         8d:4b:7f:ae:d7:40:77:b7:6b:05:4c:a8:5c:66:01:56:42:ee:
         61:83:89:f6

4.2 配置签名选项

打印 config 模板

[root@tmp cfssl]# cfssl print-defaults config > ca-config.json

[root@tmp cfssl]# cat ca-config.json 
{
    "signing": {
        "default": {
            "expiry": "168h"
        },
        "profiles": {
            "www": {
                "expiry": "8760h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth"
                ]
            },
            "client": {
                "expiry": "8760h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "client auth"
                ]
            }
        }
    }
}

默认生成 www 和 client 配置; 用于 TLS web 服务器和客户端 认证, X509 V3 证书

对模板进行修改

{
    "signing": {
        "default": {
            "expiry": "87600h"
        },
        "profiles": {
            "server": {
                "expiry": "87600h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth"
                ]
            },
            "client": {
                "expiry": "87600h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "client auth"
                ]
            },
            "peer": {
                "expiry": "87600h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth",
                    "client auth"
                ]
            }
        }
    }
}
  • default:默认策略,指定了证书的默认有效期是一年(8760h)

  • server/client/peer:表示该配置(profile)的用途

    • signing:表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE

    • server auth:生成的证书由服务器使用,并由客户端验证服务器身份。如 docker 和 kube-apiserver

    • client auth: 通过服务器客户端进行身份验证。如: etcdct, etcd proxy ,docker client 等

  • expiry:也表示 过期时间,如果不写以 default 中的为准。 这里改为 87600h (10年)

peer 配置同时具有 server auth client auth 表示 通信的双方互相验证。 

关于更多 【server auth】 和 【client auth】 区别参考:X509 V3 证书 格式说明

4.3 生成 server 证书

生成 server 证书的 csr 

服务器证书最重要的是设置 CNhosts 

# cfssl print-defaults csr > server.json

# cat server.json
{
    "CN": "coreos1",
    "hosts": [
        "192.168.122.68",
        "ext.example.com",
        "coreos1.local",
        "coreos1"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
          "C": "CN",
          "ST": "ShangHai",
          "L": "ShangHai",
          "O": "dzcx",
          "OU": "yunwei"
        }
    ]
}

生成 服务器证书私钥

  • -profile=server 指定使用 server 配置

  • server.json 配置的 server 模板

  • server-cert 生成的证书的前缀

[root@tmp cfssl]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=server server.json | cfssljson -bare server-cert
2020/05/20 14:45:53 [INFO] generate received request
2020/05/20 14:45:53 [INFO] received CSR
2020/05/20 14:45:53 [INFO] generating key: rsa-2048
2020/05/20 14:45:53 [INFO] encoded CSR
2020/05/20 14:45:53 [INFO] signed certificate with serial number 195518660804980521202440009503382212314971696118
2020/05/20 14:45:53 [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@tmp cfssl]# ll
total 36
-rw-r--r--. 1 root root 1102 May 20 14:45 server-cert.csr
-rw-------. 1 root root 1679 May 20 14:45 server-cert-key.pem
-rw-r--r--. 1 root root 1464 May 20 14:45 server-cert.pem

证书内容

  • X509v3 Extended Key Usage: TLS Web Server Authentication

  • CA:FALSE

  • X509v3 Subject Alternative Name: DNS:kube-node1

[root@tmp ca]# openssl x509 -in server-diff.pem -text -noout       
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            28:ba:fa:d0:35:bb:2e:bd:04:32:48:8b:79:62:02:23:95:aa:e5:e5
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=CN, ST=ShangHai, L=ShangHai, O=DZCX, OU=LAOJIA, CN=dzcx laojia local ca
        Validity
            Not Before: May 22 05:49:00 2020 GMT
            Not After : May 20 05:49:00 2030 GMT
        Subject: C=CN, ST=ShangHai, L=ShangHai, O=dzcx, OU=etcd, CN=kube-node1
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:b8:f2:5a:f4:f3:2c:aa:25:51:86:11:84:24:c9:
                    b7:7b:56:02:c8:62:66:c0:8e:d9:20:94:4b:6b:ba:
                    66:8b:31:ab:8a:b9:4c:8c:78:e5:a5:97:4f:61:76:
                    4d:04:58:9c:a8:1b:f9:90:37:cc:55:14:d4:ef:c0:
                    ed:0b:2e:66:dd:37:51:b5:06:ab:8a:5e:87:01:eb:
                    f4:36:7c:82:e4:bb:a9:e0:17:08:89:6c:df:81:54:
                    41:48:e5:05:25:bc:d6:53:fa:d2:65:14:b1:80:bd:
                    54:c7:1a:17:db:51:fa:4b:a0:e1:79:88:b6:c8:88:
                    d2:02:9e:a9:79:71:25:61:62:72:06:04:b9:81:72:
                    20:0b:d4:9a:c4:0d:74:c1:f3:be:5c:1b:76:77:64:
                    c2:8f:f9:d5:1f:11:6f:cb:83:fa:b5:8b:58:2e:1c:
                    d6:6b:10:3a:04:a3:f1:3c:68:30:16:1a:d1:5d:83:
                    de:5f:b9:58:96:af:23:c1:9f:0c:cb:83:ee:63:37:
                    01:29:87:79:01:7e:3f:58:04:5d:b1:98:a2:1e:12:
                    44:27:34:f8:de:d6:9c:5c:90:21:e4:3a:18:bf:70:
                    18:b8:d0:c1:3e:50:a2:df:38:eb:3b:74:aa:63:a4:
                    3d:7f:b8:8c:d1:00:5c:57:40:d4:c0:79:af:2c:17:
                    d5:95
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage: 
                TLS Web Server Authentication
            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Subject Key Identifier: 
                8F:2E:B5:27:C4:90:93:FD:EA:8C:DA:C8:2E:EF:31:48:82:07:06:0B
            X509v3 Authority Key Identifier: 
                keyid:5F:A3:94:0B:4C:DC:45:FA:5E:37:06:F5:6F:B0:0C:51:5E:45:63:C6
            X509v3 Subject Alternative Name: 
                DNS:kube-node1
    Signature Algorithm: sha256WithRSAEncryption
         2a:62:6a:95:da:b5:6a:bf:d5:bd:d0:01:7e:02:7e:b8:75:86:
         a2:5d:e2:ce:72:97:02:65:c7:7a:c3:db:47:e6:fe:d4:77:87:
         5e:56:c9:8c:a4:d1:15:a6:5a:4c:1f:8a:7e:42:ce:84:df:ee:
         a8:ac:2c:08:66:0d:d4:ef:20:5f:e7:8e:3f:15:6f:bd:1c:55:
         5e:d4:c5:e7:c0:09:f4:71:24:ef:5b:b9:55:3e:f7:6f:d5:a6:
         7b:03:96:e0:33:54:99:81:11:49:b1:81:97:70:3c:ac:b8:a5:
         45:88:01:c5:7c:21:5c:33:03:90:41:88:e1:cf:1a:51:88:be:
         c1:f9:f2:33:07:af:36:8e:af:a9:08:ba:92:7e:d1:01:4b:8a:
         65:f7:23:7a:26:1f:28:00:c0:13:78:4b:76:ed:41:ea:5a:f7:
         cf:0a:a5:19:b9:7d:3f:e1:57:c4:a1:ad:c9:87:dd:91:fa:25:
         2b:f4:93:f1:f4:0d:89:1e:27:13:7e:e6:dd:15:73:ec:33:14:
         a8:0a:d7:ee:d5:34:af:54:8d:1c:f0:69:cb:fa:b0:c5:0f:db:
         b1:c5:17:2a:1d:16:ed:8c:c0:12:0d:bd:f5:7b:5f:f9:7c:f7:
         74:d0:56:41:f3:e6:53:25:ac:ab:19:87:c5:c8:f0:b9:64:e8:
         b7:58:de:35

4.4 生成 client 证书 ( 网站)

生成 client 证书的 csr 

对于client 证书,我们可以忽略主机值设置 CN 为客户端值:

# cfssl print-defaults csr > client.json

# cat client.json
{
    "CN": "www.xieow.net",
    "hosts": [""],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
          "C": "CN",
          "ST": "ShangHai",
          "L": "ShangHai",
          "O": "dzcx",
          "OU": "yunwei"
        }
    ]
}

生成 客户端证书私钥

[root@tmp cfssl]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=client client.json | cfssljson -bare client

2020/05/20 14:55:40 [INFO] generate received request
2020/05/20 14:55:40 [INFO] received CSR
2020/05/20 14:55:40 [INFO] generating key: rsa-2048
2020/05/20 14:55:40 [INFO] encoded CSR
2020/05/20 14:55:40 [INFO] signed certificate with serial number 545852657215626295217446445695888814018746963305
2020/05/20 14:55:40 [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@tmp cfssl]# ll

total 52
-rw-r--r--. 1 root root 1050 May 20 14:55 client.csr
-rw-------. 1 root root 1679 May 20 14:55 client-key.pem
-rw-r--r--. 1 root root 1411 May 20 14:55 client.pem

证书内容

  • X509v3 Extended Key Usage: TLS Web Client Authentication

  • CA:FALSE

  • X509v3 Subject Alternative Name: DNS:

[root@tmp ca]# openssl x509 -in client-diff.pem -text -noout         
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            31:16:a5:bf:68:c8:f5:67:33:ff:25:3c:58:7f:ce:e2:6e:77:de:ff
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=CN, ST=ShangHai, L=ShangHai, O=DZCX, OU=LAOJIA, CN=dzcx laojia local ca
        Validity
            Not Before: May 22 05:48:00 2020 GMT
            Not After : May 20 05:48:00 2030 GMT
        Subject: C=CN, ST=ShangHai, L=ShangHai, O=dzcx, OU=etcd, CN=kube-node1
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:a9:a3:f4:26:31:09:fe:0f:3f:9c:f2:ba:c8:11:
                    f4:0b:f2:24:b5:ff:98:45:e7:ba:8e:0f:33:ff:cc:
                    7b:64:d9:33:8e:45:ac:59:93:58:7f:ba:c6:cd:d9:
                    ee:c6:55:eb:29:59:4c:de:9a:e6:dd:64:af:4c:0d:
                    30:4b:9e:7a:85:81:8a:8d:43:0c:6b:8e:04:49:3e:
                    9e:f5:6b:ba:d0:51:df:d1:06:45:c1:d1:ce:40:f7:
                    5b:ff:83:ec:62:bb:9f:ea:2b:7e:c0:77:f9:b5:7c:
                    66:05:d9:92:e4:f6:13:1b:90:9f:22:73:1d:7d:c9:
                    5a:17:02:19:d8:02:ae:cc:9b:ac:18:18:ce:8f:54:
                    1c:bd:79:0d:ee:55:31:ba:fb:8d:e3:0a:be:6b:9f:
                    73:53:57:b5:f6:95:8b:1f:40:e8:8b:e3:62:df:e9:
                    bd:5f:06:44:af:a8:2a:85:30:da:69:58:f9:1e:8f:
                    3f:d5:1d:aa:a1:8c:86:79:10:de:a5:4c:f4:27:46:
                    ce:fc:3a:b8:ce:ba:ec:70:5b:a5:25:c5:51:ec:e4:
                    6c:37:b4:af:40:f8:da:98:d5:8f:51:d2:ef:45:29:
                    65:66:04:34:90:26:a0:9c:30:19:9f:b2:19:90:ec:
                    5c:93:05:26:21:6c:e6:3f:8b:c0:0f:7e:f3:8d:1c:
                    c1:b3
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage: 
                TLS Web Client Authentication
            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Subject Key Identifier: 
                55:4B:55:8F:87:43:32:AC:03:76:65:9F:81:35:46:50:25:57:D6:2B
            X509v3 Authority Key Identifier: 
                keyid:5F:A3:94:0B:4C:DC:45:FA:5E:37:06:F5:6F:B0:0C:51:5E:45:63:C6
            X509v3 Subject Alternative Name: 
                DNS:
    Signature Algorithm: sha256WithRSAEncryption
         6d:63:79:2f:b0:e5:19:8f:6a:50:84:3c:e1:96:4a:ac:59:04:
         d7:f7:0c:10:13:24:3a:5f:72:dd:c1:55:d4:bc:10:45:e7:a8:
         46:7a:74:69:49:42:47:fe:d7:c6:83:bc:e7:67:5b:e7:80:1e:
         e7:51:a7:55:e9:58:1e:34:9c:18:44:4a:12:74:f5:54:3d:60:
         45:f1:83:5a:b9:95:38:d1:f3:dc:fe:4e:f3:a5:1f:60:10:53:
         59:31:f6:ab:9a:a7:1c:cf:7a:5d:d0:45:4e:e7:28:c8:2b:d1:
         52:3d:f7:74:da:fc:a8:d9:ab:5c:e4:23:78:3e:f4:9e:7b:00:
         d2:b4:16:41:7e:e7:6d:ef:33:da:1f:b7:08:48:0d:75:51:a8:
         0b:0f:ed:d9:cd:d3:da:0d:28:18:f2:60:72:13:d2:79:7b:1e:
         8e:0c:f4:f1:23:fe:dd:87:79:bd:cf:19:94:0b:0c:c7:91:3e:
         ce:41:d6:9a:6a:4f:5a:01:9d:34:4b:ec:7b:78:5e:ef:b8:17:
         5d:87:5f:76:40:70:6e:29:cf:a9:88:64:c5:64:b7:b9:52:85:
         25:5f:2f:cf:41:f7:55:03:bf:99:37:e5:e4:9f:9c:98:96:99:
         ab:fb:5c:3d:08:54:a3:0d:d7:cc:ed:a2:59:d6:ae:7a:98:d6:
         0d:87:c3:60

4.5 生成 peer 对等证书

生成 peer 证书的 csr ; 替换 CN 和 hosts

# cfssl print-defaults csr > member1.json

# cat member1.json

{
    "CN": "member1",
    "hosts": [
        "192.168.122.101",
        "ext.example.com",
        "member1.local",
        "member1"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
          "C": "CN",
          "ST": "ShangHai",
          "L": "ShangHai",
          "O": "dzcx",
          "OU": "yunwei"
        }
    ]
}

生成 peer 证书私钥

[root@tmp cfssl]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=peer member1.json | cfssljson -bare member1

2020/05/20 15:01:26 [INFO] generate received request
2020/05/20 15:01:26 [INFO] received CSR
2020/05/20 15:01:26 [INFO] generating key: rsa-2048
2020/05/20 15:01:26 [INFO] encoded CSR
2020/05/20 15:01:26 [INFO] signed certificate with serial number 93063574151482303566808578105258759235399113076
2020/05/20 15:01:26 [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@tmp cfssl]# ll
total 68
-rw-r--r--. 1 root root 1102 May 20 15:01 member1.csr
-rw-------. 1 root root 1679 May 20 15:01 member1-key.pem
-rw-r--r--. 1 root root 1480 May 20 15:01 member1.pem

查看证书

  • X509v3 Extended Key Usage: TLS Web Client Authentication,TLS Web Server Authentication

  • CA:FALSE

  • X509v3 Subject Alternative Name: DNS:kube-node1, DNS:kube-node2。。。

[root@tmp ca]# openssl x509 -in peer-diff.pem -text -noout  
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            30:91:60:62:42:34:83:55:38:c3:9b:05:33:8a:f1:5c:d1:5a:57:18
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=CN, ST=ShangHai, L=ShangHai, O=DZCX, OU=LAOJIA, CN=dzcx laojia local ca
        Validity
            Not Before: May 22 05:49:00 2020 GMT
            Not After : May 20 05:49:00 2030 GMT
        Subject: C=CN, ST=ShangHai, L=ShangHai, O=dzcx, OU=etcd, CN=kube-node1
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:bf:ed:91:3e:a5:0d:ec:2e:17:b6:28:a8:0c:ad:
                    2a:a4:d3:55:01:ee:18:f3:5d:9b:a0:15:1b:07:78:
                    5f:12:a8:e1:9b:62:45:9c:41:35:18:1e:ce:83:f4:
                    e1:49:b0:f2:dd:de:df:64:37:fd:40:97:a5:31:be:
                    10:e2:6c:79:9b:eb:8d:9c:74:07:8d:15:2e:4a:b8:
                    2a:ce:fb:bc:81:25:a7:c4:e7:3b:2f:6c:2b:b1:14:
                    04:a6:61:6b:e4:d7:bf:87:cd:1e:a3:01:de:83:b8:
                    3a:95:42:aa:62:47:71:3f:cf:66:f3:9f:96:0f:c7:
                    6f:fb:ad:7c:68:b8:0b:78:ba:36:37:76:e3:04:82:
                    e8:b9:95:ed:e6:21:a3:38:dc:ac:ca:83:f9:3c:8f:
                    92:d1:6c:70:51:d8:a5:7b:0c:47:d6:b2:29:f0:24:
                    69:63:5a:c9:ab:7b:ff:93:85:d0:ba:79:95:f6:79:
                    a2:dc:c3:5f:6d:55:2c:69:9d:22:fb:d3:91:49:8f:
                    a7:4d:8b:44:f4:7a:b6:6a:44:e1:2f:25:00:b0:c1:
                    a0:81:7d:48:83:c8:6c:72:0b:85:f5:fb:b4:25:fd:
                    24:30:40:8d:53:85:44:aa:4a:81:d4:8b:db:ca:8f:
                    32:7a:0a:9b:b2:ee:26:7e:86:cc:ea:94:29:4c:5b:
                    b2:27
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage: 
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Subject Key Identifier: 
                3F:A9:A4:8E:5D:4C:5C:98:C4:26:45:3D:B1:DA:65:70:2D:56:57:BF
            X509v3 Authority Key Identifier: 
                keyid:5F:A3:94:0B:4C:DC:45:FA:5E:37:06:F5:6F:B0:0C:51:5E:45:63:C6
            X509v3 Subject Alternative Name: 
                DNS:kube-node1, DNS:kube-node2, DNS:kube-node3, IP Address:192.168.16.32, IP Address:192.168.16.33, IP Address:192.168.16.35
    Signature Algorithm: sha256WithRSAEncryption
         39:ff:ad:11:fd:d4:a0:99:aa:1d:b4:a8:88:65:cf:5c:40:ce:
         e4:e3:cd:0c:1e:b8:e9:38:cf:6e:39:5a:a2:e5:63:23:8c:69:
         d8:df:d0:1a:f6:46:83:3e:c9:87:a5:13:8e:95:11:d1:d5:7f:
         46:41:9b:c0:84:14:90:39:45:5f:f5:cb:56:d3:f8:98:73:ee:
         f7:ea:e8:80:7b:e8:83:9e:78:6e:46:d8:27:7f:c3:0d:42:2c:
         26:d2:9f:20:ef:53:b4:8c:b5:7c:8c:5e:52:55:2b:f9:15:8a:
         4e:cb:2a:42:be:b8:ca:4a:2a:8b:cd:1f:29:e8:2d:c3:70:58:
         4c:c6:b5:2c:ea:7e:ce:54:50:75:3b:75:bc:f4:8e:4d:da:cd:
         ff:e3:e8:8c:40:31:d4:25:36:37:7c:e9:b1:4a:d2:fb:2e:f5:
         e2:ae:44:7e:8f:e6:12:f5:d2:ed:4a:2b:b1:5b:1c:83:2f:88:
         f9:2c:24:e0:74:ad:61:4d:5d:66:16:9f:8a:46:e1:2e:65:da:
         58:e3:08:32:ff:1a:d1:bd:9c:f7:f7:34:a0:24:d5:2a:38:cf:
         84:77:28:0e:32:97:a9:09:02:b8:51:5a:fc:2a:10:86:0f:53:
         01:c9:fb:a8:ef:32:56:7d:95:65:b6:d7:83:31:b3:9f:2e:37:
         48:25:e7:09

5. 查看cert(证书信息) 和 证书签名请求

# 查看cert(证书信息):
# cfssl certinfo -cert ca.pem

# 查看CSR(证书签名请求)信息:
# cfssl certinfo -csr ca.csr

6. 其他说明

签名完后,要把 CA 的公钥 ca.pem 内容追加到 签发的 证书后面,如 client.pem ,不然浏览器,读不到签发的机构




0
0
下一篇:PKI 公钥基础设施 及 CA 认证原理 之 -- X509 V3 证书扩展配置格式

0 条评论

老佳啊

85后,大专学历,中原人士,家里没矿。

由于年轻时长的比较帅气,导致在别人眼里,我一直不谈恋爱的原因是清高,实则是自己的小自卑。最大的人生目标就是找一个相知相爱相容的人,共度余生。

和人相处时如果能感受到真诚,会非常注重彼此的关系,对别人没有什么心机,即使有利益冲突,一般也会以和为贵,因为在这个世界上,物质的东西,从来不会吸引到我。

特别迷恋那些大山大水,如果现在还能隐居,可能早就去了。对那些宏伟的有底蕴的人文景观比较不感冒。

从事于IT行业,却一直对厨房念念不忘,由于身材魁梧,总觉得自己上辈子是个将军,可惜这辈子没当兵,也不会打架。