• 生成自签名证书
    • 概述
    • 下载 cfssl
    • 初始化证书颁发机构
    • 生成证书
      • 证书介绍
      • 配置 CA 选项
      • 生成 CA 证书
      • 生成服务器端证书
      • 生成客户端证书
  • #

    生成自签名证书

    概述

    本文档提供使用 cfssl 生成自签名证书的示例。

    假设实例集群拓扑如下:

    Name Host IP Services
    node1 172.16.10.1 PD1, TiDB1
    node2 172.16.10.2 PD2, TiDB2
    node3 172.16.10.3 PD3
    node4 172.16.10.4 TiKV1
    node5 172.16.10.5 TiKV2
    node6 172.16.10.6 TiKV3

    下载 cfssl

    假设使用 x86_64 Linux 主机:

    1. mkdir ~/bin
    2. curl -s -L -o ~/bin/cfssl https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
    3. curl -s -L -o ~/bin/cfssljson https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
    4. chmod +x ~/bin/{cfssl,cfssljson}
    5. export PATH=$PATH:~/bin

    初始化证书颁发机构

    生成 cfssl 的默认配置,以便于之后修改:

    1. mkdir ~/cfssl
    2. cd ~/cfssl
    3. cfssl print-defaults config > ca-config.json
    4. cfssl print-defaults csr > ca-csr.json

    生成证书

    证书介绍

    • tidb-server certificate 由 TiDB 使用,为其他组件和客户端验证 TiDB 身份。
    • tikv-server certificate 由 TiKV 使用,为其他组件和客户端验证 TiKV 身份。
    • pd-server certificate 由 PD 使用,为其他组件和客户端验证 PD 身份。
    • client certificate 用于通过 PD、TiKV、TiDB 验证客户端。例如 pd-ctltikv-ctlpd-recover

    配置 CA 选项

    根据实际需求修改 ca-config.json

    1. {
    2. "signing": {
    3. "default": {
    4. "expiry": "43800h"
    5. },
    6. "profiles": {
    7. "server": {
    8. "expiry": "43800h",
    9. "usages": [
    10. "signing",
    11. "key encipherment",
    12. "server auth",
    13. "client auth"
    14. ]
    15. },
    16. "client": {
    17. "expiry": "43800h",
    18. "usages": [
    19. "signing",
    20. "key encipherment",
    21. "client auth"
    22. ]
    23. }
    24. }
    25. }
    26. }

    根据实际需求修改 ca-csr.json

    1. {
    2. "CN": "My own CA",
    3. "key": {
    4. "algo": "rsa",
    5. "size": 2048
    6. },
    7. "names": [
    8. {
    9. "C": "CN",
    10. "L": "Beijing",
    11. "O": "PingCAP",
    12. "ST": "Beijing"
    13. }
    14. ]
    15. }

    生成 CA 证书

    1. cfssl gencert -initca ca-csr.json | cfssljson -bare ca -

    将会生成以下几个文件:

    1. ca-key.pem
    2. ca.csr
    3. ca.pem

    生成服务器端证书

    hostname 中为各组件的 IP 地址,以及 127.0.0.1

    1. echo '{"CN":"tidb-server","hosts":[""],"key":{"algo":"rsa","size":2048}}' | cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=server -hostname="172.16.10.1,172.16.10.2,127.0.0.1" - | cfssljson -bare tidb-server
    2. echo '{"CN":"tikv-server","hosts":[""],"key":{"algo":"rsa","size":2048}}' | cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=server -hostname="172.16.10.4,172.16.10.5,172.16.10.6,127.0.0.1" - | cfssljson -bare tikv-server
    3. echo '{"CN":"pd-server","hosts":[""],"key":{"algo":"rsa","size":2048}}' | cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=server -hostname="172.16.10.1,172.16.10.2,172.16.10.3,127.0.0.1" - | cfssljson -bare pd-server

    将会生成以下几个文件:

    1. tidb-server-key.pem tikv-server-key.pem pd-server-key.pem
    2. tidb-server.csr tikv-server.csr pd-server.csr
    3. tidb-server.pem tikv-server.pem pd-server.pem

    生成客户端证书

    1. echo '{"CN":"client","hosts":[""],"key":{"algo":"rsa","size":2048}}' | cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=client -hostname="" - | cfssljson -bare client

    将会生成以下几个文件:

    1. client-key.pem
    2. client.csr
    3. client.pem

    #