4. 证书环境

测试操作主机 172.10.10.200

证书环境

证书工具
  • openssl
  • cfssl(本节主角)

手把手-安装-cfssl

cfssl 工具
  • cfssl
    wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
    cp cfssl_linux-amd64 /usr/bin/cfssl
  • cfssljson
    wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
    cp cfssljson_linux-amd64 /usr/bin/cfssljson
  • cfssl-certinfo
    wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
    cp cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo

记得授执行权限哦 chmod +x /usr/bin/cfssl*

制作CA证书

CA证书的作用,用于后续k8s中的组件交互所需各种证书的签发
CA证书是根证书,权威证书,用于签发其他证书

1. 创建生成CA证书签名请求(csr)的JSON配置文件

技巧:cfssl print-defaults csr能够打印csr文件模板作参考
vim /opt/certs/ca-csr.json

{
        "CN": "HzwOrg",
        "hosts": [],
        "key": {
                "algo": "rsa",
                "size": 2048
        },
        "name": [
                {
                        "C": "CN",
                        "ST": "beijing",
                        "L": "beijing",
                        "O": "hzw",
                        "OU": "hzwself"
                }
        ],
        "ca": {
                "expiry": "175200h"
        }
}

说明:

  • hosts: 使用证书的主机列表 ??
  • CN: Common Name,浏览器使用该字段验证网站是否合法,一般写的是域名。
  • C:Contry,国家
  • ST:State,省、州
  • L:Locality,地区、城市
  • O:Organization Name,组织名称、公司名称
  • OU: Organization Unit Name,组织单位名称,公司名称
  • ca.expiry:证书过期时间(默认有效期是1年)生产上一定注意有效期,证书到期会导致集群瘫痪
2. 生成CA证书和私钥

cfssl gencert -initca ca-csr.json
该命令只会打印出证书和私钥,还需通过cfssl-json生成证书和私钥文件
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
在这里插入图片描述ca.pem:ca证书; ca-key.pem:ca证书私钥

签发证书
准备ca-config.json

技巧:cfssl print-defaults config能够打印配置文件模板作参考
vi /etc/certs/ca-config.json

{
    "signing": {
        "default": {
            "expiry": "175200h"
        },
        "profiles": {
            "server": {
                "expiry": "175200h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth"
                ]
            },
            "client": {
                "expiry": "175200h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "client auth"
                ]
            },
            "peer": {
                "expiry": "175200h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth",
                    "client auth"
                ]
            }
        }
    }
}

设置了三种证书配置,下面创建证书是指定需要的配置模式
server: 服务器启动需要证书
client: 客户端连接服务端需要证书
peer: 对端通信两端都需要证书

创建peer类型证书(etcd需要的双向证书为例)
  • 创建证书请求文件
    这里我们用etcd集群需要的双向通信证书制作做演示,结构和上面制作ca证书时的请求文件类似
    技巧:cfssl print-defaults csr能够打印csr文件模板作参考
    vi etcd-peer-csr.json (文件名叫啥无所谓,自己能分清就行)
{
    "CN": "k8s-etcd",
    "hosts": [
        "172.10.10.11",
        "172.10.10.12",
        "172.10.10.21",
        "172.10.10.22"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "name": [
        {
            "C": "CN",
            "ST": "beijing",
            "L": "beijing",
            "O": "hzw",
            "OU": "hzwself"
        }
    ]
}

hosts中配置了证书通信可用主机,这里将可能部署etcd的机器都加入,否则后续主机变化只能重新签发证书

  • 使用cfssl签发证书
    cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=peer etch-peer-csr.json

说明:
gencert:生成证书命令
-ca-ca-key:指定根证书和根证书密钥
-config-profile:指定配置文件和指定配置域(这里需要签双向通信证书,所以指定的是ca-config.json里的peer配置域,内容见上文)
etch-peer-csr.json是证书请求文件

该命令不会生成证书文件,只会打印证书内容(自己手动拷贝到相应文件也是可以的),可以通过管道符使用cfssljson工具进一步生成证书文件
[...] | cfssljson -bare etcd-peer

  • cfssl-certinfo查看证书信息
    cfssl-certinfo -cert apiserver.pem
    在这里插入图片描述cfssl-certinfo -domain www.baidu.com 查看指定域名的证书信息
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您可以使用openssl.cnf文件来自定义Ca证书的生成。下面是一个简单的例子: 1. 创建新的openssl.cnf文件 ``` cp /etc/ssl/openssl.cnf openssl.cnf ``` 2. 编辑openssl.cnf文件并添加以下部分: ``` [ca] default_ca = CA_default [CA_default] dir = /path/to/ca private_key = $dir/private/ca.key certificate = $dir/ca.crt new_certs_dir = $dir/newcerts database = $dir/index serial = $dir/serial crlnumber = $dir/crlnumber default_md = sha256 default_crl_days = 30 default_days = 365 policy = policy_anything [policy_anything] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional ``` 在此示例中,您需要将`/path/to/ca`替换为您的自定义路径。此外,您需要创建所需的目录并添加一个空文件index和一个空文件serial。 3. 生成根私钥 ``` openssl genrsa -out /path/to/ca/private/ca.key 4096 ``` 这将生成一个4096位的RSA密钥,并将其保存在名为“ca.key”的文件中。 4. 生成自签名根证书 ``` openssl req -x509 -new -nodes -key /path/to/ca/private/ca.key -config openssl.cnf -sha256 -days 1024 -out /path/to/ca/ca.crt ``` 在此命令中,-config参数指定使用的openssl.cnf文件,-key参数指定使用的私钥文件,-sha256参数指定使用SHA-256哈希算法,-out参数指定生成的证书文件的名称。 现在,您已经生成了自定义的自签名根证书,其中包含公钥和私钥。请注意,这是一个自签名的根证书,在部署到生产环境之前,您需要获取由受信任的第三方机构颁发的证书
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hzw@sirius

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值