当前位置: 首页 > news >正文

使用 OpenSSL 吊销 Kubernetes(k8s)的 kubeconfig 里的用户证书

一.用 OpenSSL 依据已有的自签名 CA 注销签发的证书的步骤

1. 准备工作 你得有自签名 CA 的私钥(通常是 .key 文件)、CA 证书(通常是 .crt 文件)以及证书吊销列表(CRL)文件。若还没有 CRL 文件,就需要创建一个。

2. 创建初始 CRL 文件

要是还没有 CRL 文件,就用以下命令创建一个:

openssl ca -gencrl -keyfile ca.key -cert ca.crt -out crl.pem
  • ca.key:这是自签名 CA 的私钥文件。
  • ca.crt:这是自签名 CA 的证书文件。
  • crl.pem:这是生成的证书吊销列表文件

 3.吊销证书

你要吊销某个证书时,得知道该证书的序列号。可以用以下命令查看证书序列号:

 

openssl x509 -noout -serial -in certificate.crtopenssl ca -revoke certificate.crt -keyfile ca.key -cert ca.crt
  • certificate.crt:你要吊销的证书文件。
  • ca.key:自签名 CA 的私钥文件。
  • ca.crt:自签名 CA 的证书文件。

   4.更新 CRL 文件

openssl ca -gencrl -keyfile ca.key -cert ca.crt -out crl.pem
  • ca.key:自签名 CA 的私钥文件。
  • ca.crt:自签名 CA 的证书文件。
  • crl.pem:更新后的证书吊销列表文件。

二.要使用 OpenSSL 吊销 Kubernetes(k8s)的 kubeconfig 里的用户证书

 1. 确定相关文件和信息

CA 私钥:一般存储在 Kubernetes 集群的控制平面节点上,通常路径为 /etc/kubernetes/pki/ca.key。 • CA 证书:同样位于控制平面节点,路径通常是 /etc/kubernetes/pki/ca.crt。 • 用户证书:能从 kubeconfig 文件里提取。kubeconfig 文件一般在 ~/.kube/config,你可以用下面的命令提取用户证书:

kubectl config view --raw -o jsonpath='{.users[?(@.name=="<USER_NAME>")].user.client-certificate-data}' | base64 -d > user.crt

这里的 <USER_NAME> 要替换成 kubeconfig 里实际的用户名.

2. 查看证书序列号

使用 OpenSSL 查看要吊销的用户证书的序列号:

openssl x509 -noout -serial -in user.crt

此命令会输出证书的序列号,后续吊销证书时会用到。

3. 检查并创建 CRL 文件

如果还没有证书吊销列表(CRL)文件,就需要创建一个。若已有,可跳过此步骤。

openssl ca -gencrl -keyfile /etc/kubernetes/pki/ca.key -cert /etc/kubernetes/pki/ca.crt -out crl.pem

这里的 crl.pem 就是生成的 CRL 文件。

4. 吊销证书

利用 OpenSSL 的 ca 命令吊销用户证书:

openssl ca -revoke user.crt -keyfile /etc/kubernetes/pki/ca.key -cert /etc/kubernetes/pki/ca.crt

运行此命令后,用户证书就会被标记为已吊销.

5. 更新 CRL 文件

吊销证书后,需要更新 CRL 文件以包含新吊销的证书:

openssl ca -gencrl -keyfile /etc/kubernetes/pki/ca.key -cert /etc/kubernetes/pki/ca.crt -out crl.pem

 6.查看 CRL 的基本信息

openssl crl -noout -text -in crl.pem

 openssl crl:这是 OpenSSL 用于处理 CRL 的命令。

• -noout:表示不输出 CRL 的二进制内容。 • -text:将 CRL 的内容以文本形式输出。 • -in crl.pem:指定要查看的 CRL 文件,这里假设 CRL 文件名为 crl.pem,你可根据实际情况替换

查看 CRL 的详细吊销条目

openssl crl -noout -revoked -in crl.pem

 -revoked:此选项用于只输出 CRL 中的吊销条目信息

8. 在 Kubernetes 中使用 CRL

要让 Kubernetes 集群使用更新后的 CRL 来验证客户端证书,需要在 API Server 的配置里添加 CRL 文件的路径。

修改 API Server 配置

编辑 API Server 的静态 Pod 配置文件,通常位于 /etc/kubernetes/manifests/kube-apiserver.yaml。在 spec.containers[].command 部分添加以下参数:

- --client-ca-file=/etc/kubernetes/pki/ca.crt
- --crl-file=/path/to/crl.pem
重启 API Server

保存配置文件后,Kubernetes 会自动重启 API Server 以应用新配置。

9.重新生成新的 CRL 且不包含已吊销证书

要保证 OpenSSL 配置文件(通常是 /etc/pki/tls/openssl.cnf)的 dir 参数指向 CA 工作目录

手动修改索引文件

OpenSSL 借助 index.txt 文件来记录证书状态。你可以手动编辑该文件,把要恢复的证书状态从 R(已吊销)改成 V(有效)。

vim /etc/pki/CA/index.txt

 找到要恢复的证书条目,将开头的 R 改成 V,并删除与吊销相关的时间等信息。

重新生成 CRL
openssl ca -gencrl -keyfile ca.key -cert ca.crt -out new_crl.pem
  • ca.key 是 CA 私钥文件。
  • ca.crt 是 CA 证书文件。
  • new_crl.pem 是新生成的 CRL 文件。

替换旧的 CRL 把新生成的 CRL 文件替换掉旧的 CRL 文件,这样在验证证书时就不会再把这些证书当作已吊销。

10. 废弃当前 CRL 并使用新的 CRL 管理

备份当前的 index.txt 文件,然后清空该文件:

sudo cp /etc/pki/CA/index.txt /etc/pki/CA/index.txt.bak
sudo truncate -s 0 /etc/pki/CA/index.txt
重置序列号和 CRL 编号

重置 serial 和 crlnumber 文件

echo "01" | sudo tee /etc/pki/CA/serial
echo "01" | sudo tee /etc/pki/CA/crlnumber

 生成新的 CRL

将新生成的 CRL 文件应用到证书验证环境中

7. 在吊销证书的过程中出现的问题

问题1:Using configuration from /etc/pki/tls/

            openssl.cnf /etc/pki/CA/index.txt: No such file or directory

问题2:Using configuration from /etc/pki/tls/

          openssl.cnf /etc/pki/CA/crlnumber: No such file or directory error while loading CRL number

解决方式

1)创建 CA 目录

首先,确保 CA 工作目录存在,通常是 /etc/pki/CA :

mkdir -p /etc/pki/CA
2)创建索引文件

创建 index.txt 文件,该文件用于记录证书的状态信息,初始为空:

touch /etc/pki/CA/index.txt

3) 创建 crlnumber 文件

echo "01" | sudo tee /etc/pki/CA/crlnumber

4)创建序列号文件

创建 serial 文件,并为其设置一个初始的序列号,例如 01

echo "01" | sudo tee /etc/pki/CA/serial

5)  确认文件权限

要保证 OpenSSL 命令有足够的权限来访问和修改 /etc/pki/CA 目录下的文件,你可以通过以下命令修改文件和目录的权限:

sudo chmod -R 700 /etc/pki/CA

5)调整 OpenSSL 配置文件,可以不变

确保 /etc/pki/tls/openssl.cnf 配置文件中的相关设置无误,尤其是 dir 参数,它应指向 CA 工作目录。你可以通过以下命令编辑该文件。

在文件中找到 [ CA_default ] 部分,确认 dir 参数如下:

[ CA_default ]
dir             = /etc/pki/CA           # Where everything is kept

 

 

相关文章:

  • 论文速读《Embodied-R: 基于强化学习激活预训练模型具身空间推理能力》
  • 如何添加或删除极狐GitLab 项目成员?
  • Codeforces Round 1023 (Div. 2)
  • 代码随想录训练营第十八天| 150.逆波兰表达式求值 239.滑动窗口最大值 347.前k个高频元素
  • 什么是gitlab自动部署,怎么配置gitlab自动部署
  • QGIS分割平行四边形
  • 分布式、高并发-Day04
  • 白平衡色温坐标系下自适应计算白点权重的方法
  • 部署Superset BI(三)连接HANA数据库
  • yolo训练用的数据集的数据结构
  • RTPSParticipant构建流程
  • SpringBoot整合Kafka、Flink实现流式处理
  • ResNet50应用于农业保险现场照片作物种类核验
  • 【回眸】QAC使用指南——导出 Dashboard Report个性化定制Report
  • ==和equals的区别 hashCode和equals的联系
  • JAVA设计模式——(十二)原型模式(Prototype Pattern)
  • c#OdbcDataReader的数据读取
  • LeetCode LCR 033. 字母异位词分组
  • 天线测试报告解读学习
  • 项目三 - 任务3:学生多态方式喂养宠物
  • 人民日报评论:莫让“胖东来们”陷入“棒杀”“捧杀”泥潭
  • 青年与城市共成长,第六届上海创新创业青年50人论坛将举办
  • 溢价率19.48%,民企番禺置业3.07亿元竞得广州番禺融媒体中心北侧地块
  • 科普|肩周炎的自限性,意味着不治也能自己好?
  • 有乘客被高铁车门夹住?铁路回应:系突感不适下车,未受伤,列车正点发车
  • 张国清赶赴贵州毕节黔西市指导游船倾覆事故应急救援救治工作