当前位置: 首页 > 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

 

 

http://www.xdnf.cn/news/299791.html

相关文章:

  • uv全功能更新:统一管理Python项目、工具、脚本和环境的终极解决方案
  • 嵌入式学习--江协51单片机day1
  • GCC编译器安装详细说明(举例arm-2013q3)
  • pywinauto通过图片定位怎么更加精准的识别图片?
  • 抖音代播领航者——品融电商(PINKROON)的运营实力与服务解析
  • 使用 AddressSanitizer 检测堆越界错误
  • 【CPU占用率查看】
  • 创建简易个人关系图谱(Neo4j )
  • 【落羽的落羽 C++】list及其模拟实现
  • On the Biology of a Large Language Model——论文学习笔记——拒答和越狱
  • 华为私有协议Hybrid
  • 5月6日日记
  • QtGUI模块功能详细说明,图像处理(三)
  • 目标检测(Object Detection)研究方向常用数据集简单介绍
  • 【Bootstrap V4系列】学习入门教程之 组件-卡片(Card)高级用法
  • 数据初步了解
  • 论文速读:《CoM:从多模态人类视频中学习机器人操作,助力视觉语言模型推理与执行》
  • 电池热管理CFD解决方案,为新能源汽车筑安全防线
  • TikTok 矩阵账号运营实操细节:打造爆款矩阵
  • SpringBoot整合Kafka、Flink实现流式处理
  • 三种信号本振
  • Redis 7.0中5种新特性及实战应用
  • 【ArcGISPro】创建要素和刷新数据库后卡顿
  • 浔川AI 第二次内测报告
  • 数据可视化与分析
  • Flutter开发IOS蓝牙APP的大坑
  • 购物数据分析
  • 云境天合水陆安全漏电监测仪—迅速确定是否存在漏电现象
  • OS7.【Linux】基本指令入门(6)
  • FPGA实战项目1——坦克大战