首页 > 其他分享 >cfssl ca 证书有效期修改

cfssl ca 证书有效期修改

时间:2022-10-10 13:31:21浏览次数:33  
标签:有效期 证书 ca apiserver pem cfssl kube


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 证书有效期修改_json

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


验证网站:

https://myssl.com/cert_decode.html

验证信息如下:


cfssl ca 证书有效期修改_字段_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 证书有效期修改_字段_03

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

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


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

验证信息如下:


cfssl ca 证书有效期修改_字段_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 证书有效期修改_linux_05

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


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

验证信息如下:


cfssl ca 证书有效期修改_linux_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 证书有效期修改_字段_07

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

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


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

验证信息如下:


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


标签:有效期,证书,ca,apiserver,pem,cfssl,kube
From: https://blog.51cto.com/u_11409186/5743293

相关文章

  • 洛谷 P5194 [USACO05DEC]Scales S 折半搜索
    题目https://www.luogu.com.cn/problem/P5194思路\(n\leq1000\)的范围很吓人,但是按照【每个砝码的质量至少等于前面两个砝码的质量的和】的规则,打表可知n在50时总重量......
  • 本地部署安装Calico网络
    2 本地部署安装Calico网络(1)官方文档:https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises(2)我这里集群使用的calico版本......
  • 靶场VNH练习(3)TROLLCAVE: 1.2
    靶场名称:TROLLCAVE:1.2难度:简单目标:拿到root账户的flag文件下载链接:https://www.vulnhub.com/entry/trollcave-12,230/环境搭建使用虚拟机打开ova文件这里没有IP,......
  • 【解题报告】[LNOI 2014] LCA/[GXOI/GZOI 2019] 旧词
    【省选系列】[LNOI2014]LCA/[GXOI/GZOI2019]旧词首黑祭,好耶![LNOI2014]LCA首先考虑,每个节点对答案的贡献,我们可以发现LCA一定会在z到根节点的路径上,每个节点每次增......
  • Navicat:Access violation at address xxxxxxxxx in module ‘navicat.exe’.Read of
    在navicat中如果报了这个错误,  则表示内存越界,需要重新注册windows的动态链接库;解决方案:打开cmd;在命令行中输入 for%1in(%windir%\system32\*.dll)doregsv......
  • Educational Codeforces Round 136 (Rated for Div. 2) D - Reset K Edges
    题目来源:EducationalCodeforcesRound136(RatedforDiv.2)D题目链接:Problem-D-Codeforces 题意给定一棵以1为根、大小为n的树,每次操作可以将一棵子树接到根......
  • 11. JS switch case语句详解
    1.前言JSswitchcase语句与 ifelse 语句的多分支结构类似,都可以根据不同的条件来执行不同的代码;但是与ifelse多分支结构相比,switchcase语句更加简洁和紧凑,执行......
  • php中header函数参数的Cache-control的使用方法
    网页的缓存是由HTTP消息头中的“Cache-control”来控制的,常见的取值有private、no-cache、max-age、must-revalidate等,默认为private。其作用根据不同的重新浏览方式分为......
  • Java-Day04 Scanner/if-else/switch-case/for
    2022/10/9一、Scanner:从键盘获取数据1.要使用Scanner首先需要导入包:importjava.util.Scanner;2.使用方法:Scanner变量名=newScanner(System.in);/......
  • DOCKER 部署 CANAL
    DOCKER部署CANAL1、MYSQL开启binlog前提MYSQL已经安装完成,canal采用读取Mysql的binlog日志来实现数据同步,需要修改mysql配置为难my.cnf,并将binlog的格式模式设置为ROW,其......