0
点赞
收藏
分享

微信扫一扫

cfssl ca 证书有效期修改

您好 2022-10-10 阅读 64


cfssl ca证书有效期修改

  

作者

刘畅

时间

2022-02-20

 

 

目录

​​1 准备cfssl证书生成工具 ​​

​​2 生成kube-apiserver证书(5年) ​​

​​3 生成kube-apiserver证书(100年) ​​



前言: 之前使用二进制方式部署的k8s高可用集群证书有限期为5年(原因: ca证书默认有限期为5年),时间有点短

,如果证书过期还要重新生成证书,比较麻烦,于是研究一下cfssl如何生成有限期较长的ca证书,比如效期为100

年,下面为验证过程。

1 准备cfssl证书生成工具

cfssl是一个开源的证书管理工具,使用json文件生成证书,相比openssl更方便使用。

# 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/bin/cfssl-certinfo

2 生成kube-apiserver证书(5年)

1 自签证书颁发机构(CA)

# mkdir -p /root/k8s_tls_5/
# cd /root/k8s_tls_5/

生成CA默认配置文件和默认签名请求文件的方法(使用时根据需要修改默认配置)
# cfssl print-defaults config > ca-config.json
# cfssl print-defaults csr > ca-csr.json

(1) cfssl的配置文件

# 
cat > ca-config.json <<
EOF
{
"signing":
{
"default":
{
"expiry":
"87600h"
},
"profiles":
{
"kubernetes":
{
"expiry":
"87600h",
"usages":
[
"signing",
"key
encipherment",
"server
auth",
"client
auth"
]
}
}
}
}

EOF

注:
1) ca-config.json  # 可以定义多个profiles,分别指定不同的过期时间、使用场景等参数,后续在签名
证书时使用某个profile参数配置服务证书的有效期。
2) signing   # 表示该证书可用于签名其它证书,生成的ca.pem证书中CA=TRUE。
3) server auth  # 表示client可以用该CA对server提供的证书进行验证。
4) client auth   # 表示 server 可以用该CA对client提供的证书进行验证。

(2) 自签CA 证书签名请求文件

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

EOF

(3) 生成CA证书和私钥
# cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
注: 生成以ca开头证书颁发机构(CA)的文件有ca.csr、ca-key.pem、ca.pem

(4) 验证ca证书ca.pem
# cfssl certinfo -cert ca.pem |grep not

​​

cfssl ca 证书有效期修改_字段

​​

​​# 可以看到ca证书的有效期是5年。


验证网站:

https://myssl.com/cert_decode.html

验证信息如下:


​​

cfssl ca 证书有效期修改_linux_02

​​


 

2 使用自签CA签发kube-apiserver HTTPS证书

(1) 创建kube-apiserver证书签名请求文件(使用CN)

# cat 
> kube-apiserver-csr.json << EOF
{
"CN":
"kube-apiserver",
"hosts":
[
"k8s-master1",
"k8s-master2",
"127.0.0.1",
"172.16.1.81",
"10.0.0.81",
"172.16.1.82",
"10.0.0.82",
"172.16.1.80",
"172.28.0.1",
"kubernetes",
"kubernetes.default",
"kubernetes.default.svc",
"kubernetes.default.svc.cluster",
"kubernetes.default.svc.cluster.local"
],
"key":
{
"algo":
"rsa",
"size":
2048
},
"names":
[
{
"C":
"CN",
"L":
"BeiJing",
"ST":
"BeiJing",
"O":
"k8s",
"OU":
"System"
}
]
}

EOF

注:
CN # Common Name,kube-apiserver从证书中提取该字段作为请求的用户名(User Name),浏览
器使用该字段验证网站是否合法。RBAC,用于client auth,放到客户端证书中。
O # Organization,kube-apiserver从证书中提取该字段作为请求用户所属的组(Group)。RBAC,
用于client auth,放到客户端证书中。

# 上述文件hosts字段中指定授权使用该证书的IP或者域名列表,为所有Master/LB/VIP IP/apiserver
集群内部cluster ip(指定的service-cluster-ip-range 网段的第一个IP "${CLUSTER_KUBERNETES_SVC_IP}")一个都不能少,为了方便后期扩容可以多写几个预留的IP。
注意: hosts字段把可能部署kubelet的主机ip都写进去,只能写ip地址,不能写网段。后期如果在非hosts列表中ip主机上部署kubelet,需要重新签发证书,并更换证书,并重启服务

(2) 生成kube-apiserver证书和私钥
# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes \
kube-apiserver-csr.json | cfssljson -bare kube-apiserver
# 生成以kube-apiserver开头的文件kube-apiserver.csr、kube-apiserver-key.pem、kube-apiserver.pem

(3) 验证kube-apiserver.pem证书
# cfssl certinfo -cert kube-apiserver.pem |grep not

​​

cfssl ca 证书有效期修改_linux_03

​​

​​# 可以看到kube-apiserver证书的有效期是10年,但是ca证书的有效期只有5年,所以kube-apiserver证书的

# 实际有效期也只有5年。


验证网站: https://myssl.com/cert_decode.html

验证信息如下:


​​

cfssl ca 证书有效期修改_json_04

​​


 

 

3 生成kube-apiserver证书(100年)

1 自签证书颁发机构(CA)

# mkdir -p /root/k8s_tls_100/
# cd /root/k8s_tls_100/

生成CA默认配置文件和默认签名请求文件的方法(使用时根据需要修改默认配置)
# cfssl print-defaults config > ca-config.json
# cfssl print-defaults csr > ca-csr.json

(1) cfssl的配置文件

# 
cat > ca-config.json <<
EOF
{
"signing":
{
"default":
{
"expiry":
"876000h"
},
"profiles":
{
"kubernetes":
{
"expiry":
"876000h",
"usages":
[
"signing",
"key
encipherment",
"server
auth",
"client
auth"
]
}
}
}
}

EOF

注:
1) ca-config.json  # 可以定义多个profiles,分别指定不同的过期时间、使用场景等参数,后续在签名
证书时使用某个profile参数配置服务证书的有效期。
2) signing     # 表示该证书可用于签名其它证书,生成的ca.pem证书中CA=TRUE。
3) server auth # 表示client可以用该CA对server提供的证书进行验证。
4) client auth     # 表示 server 可以用该CA对client提供的证书进行验证。

(2) 自签CA 证书签名请求文件,添加配置ca证书的有效期,添加字段"CA":{"expiry":"876000h"},

# 
cat > ca-csr.json <<
EOF
{
"CA":{"expiry":"876000h"},
"CN":
"kubernetes",
"key":
{
"algo":
"rsa",
"size":
2048
},
"names":
[
{
"C":
"CN",
"L":
"Beijing",
"ST":
"Beijing",
"O":
"k8s",
"OU":
"System"
}
]
}
EOF

(3) 生成CA证书和私钥
# cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
注: 生成以ca开头证书颁发机构(CA)的文件有ca.csr、ca-key.pem、ca.pem

(4) 验证ca证书ca.pem
# cfssl certinfo -cert ca.pem |grep not

​​

cfssl ca 证书有效期修改_json_05

​​

​​# 可以看到ca证书的有效期是100年。


验证网站: https://myssl.com/cert_decode.html

验证信息如下:


​​

cfssl ca 证书有效期修改_字段_06

​​


 

2 使用自签CA签发kube-apiserver HTTPS证书

(1) 创建kube-apiserver证书签名请求文件(使用CN)

# cat 
> kube-apiserver-csr.json << EOF
{
kube-apiserver",
"hosts":
[
"k8s-master1",
"k8s-master2",
"127.0.0.1",
"172.16.1.81",
"10.0.0.81",
"172.16.1.82",
"10.0.0.82",
"172.16.1.80",
"172.28.0.1",
"kubernetes",
"kubernetes.default",
"kubernetes.default.svc",
"kubernetes.default.svc.cluster",
"kubernetes.default.svc.cluster.local"
],
"key":
{
"algo":
"rsa",
"size":
2048
},
"names":
[
{
"C":
"CN",
"L":
"BeiJing",
"ST":
"BeiJing",
"O":
"k8s",
"OU":
"System"
}
]
}

EOF

注:
CN # Common Name,kube-apiserver从证书中提取该字段作为请求的用户名(User Name),浏览
器使用该字段验证网站是否合法。RBAC,用于client auth,放到客户端证书中。
O # Organization,kube-apiserver从证书中提取该字段作为请求用户所属的组(Group)。RBAC,
用于client auth,放到客户端证书中。

# 上述文件hosts字段中指定授权使用该证书的IP或者域名列表,为所有Master/LB/VIP IP/apiserver
集群内部cluster ip(指定的service-cluster-ip-range 网段的第一个IP "${CLUSTER_KUBERNETES_SVC_IP}")一个都不能少,为了方便后期扩容可以多写几个预留的IP。
注意: hosts字段把可能部署kubelet的主机ip都写进去,只能写ip地址,不能写网段。后期如果在非hosts列表中ip主机上部署kubelet,需要重新签发证书,并更换证书,并重启服务



(2) 生成kube-apiserver证书和私钥
# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes \
kube-apiserver-csr.json | cfssljson -bare kube-apiserver
# 生成以kube-apiserver开头的文件kube-apiserver.csr、kube-apiserver-key.pem、kube-apiserver.pem

(3) 验证kube-apiserver.pem证书
# cfssl certinfo -cert kube-apiserver.pem |grep not

​​

cfssl ca 证书有效期修改_linux_07

​​

​​# 可以看到kube-apiserver证书的有效期是100年,又因为ca证书的有效期是100年,所以kube-apiserver证

# 书的实际有效期是100年。


验证网站: https://myssl.com/cert_decode.html

验证信息如下:


​​

cfssl ca 证书有效期修改_json_08

​​


举报

相关推荐

0 条评论