使用 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.mzph.cn/news/904801.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

循环卷积(Circular Convolutions)

最近看论文发现了一个叫循环卷积的东西&#xff0c;这里学习并记录一下&#xff0c;方便以后查阅。 循环卷积&#xff08;Circular Convolutions&#xff09; 循环卷积&#xff08;Circular Convolutions&#xff09;1. 什么是循环卷积2. 数学定义关键点 3. 循环卷积与线性卷积…

【计算机视觉】Car-Plate-Detection-OpenCV-TesseractOCR:车牌检测与识别

Car-Plate-Detection-OpenCV-TesseractOCR&#xff1a;车牌检测与识别技术深度解析 在计算机视觉领域&#xff0c;车牌检测与识别&#xff08;License Plate Detection and Recognition, LPDR&#xff09;是一个极具实用价值的研究方向&#xff0c;广泛应用于智能交通系统、安…

MATLAB制作柱状图与条图:数据可视化的基础利器

一、什么是柱状图与条图&#xff1f; 柱状图和条图都是用来表示分类数据的常见图表形式&#xff0c;它们的核心目的是通过矩形的长度来比较各类别的数值大小。条图其实就是“横着的柱状图”&#xff0c;它们的本质是一样的&#xff1a;用矩形的长度表示数值大小&#xff0c;不同…

[计算机科学#13]:算法

【核知坊】&#xff1a;释放青春想象&#xff0c;码动全新视野。 我们希望使用精简的信息传达知识的骨架&#xff0c;启发创造者开启创造之路&#xff01;&#xff01;&#xff01; 内容摘要&#xff1a; 算法是解决问题的系统化步骤&#xff0c;不同的问题…

HTTP传输大文件的方法、连接管理以及重定向

目录 1. HTTP传输大文件的方法 1.1. 数据压缩 1.2. 分块传输 1.3. 范围请求 1.4. 多段数据 2. HTTP的连接管理 2.1. 短连接 2.2. 长连接 2.3. 队头阻塞 3. HTTP的重定向和跳转 3.1. 重定向的过程 3.2. 重定向状态码 3.3. 重定向的应用场景 3.4. 重定向的相关问题…

PostgreSQL 18 Beta 1发布,有哪些功能亮点?

PostgreSQL 全球开发组于 2025 年 5 月 8 日发布了第一个 PostgreSQL 18 Beta 版本&#xff0c;现已开放下载。虽然细节可能会有所改变&#xff0c;但是该版本包含了 PostgreSQL 18 最终正式版中所有新功能的预览。 以下是 PostgreSQL 18 引入的部分关键功能亮点。 性能优化 …

vue dev-tools插件

背景 在项目上用到vue技术&#xff0c;在bilibili上学习vue&#xff0c;期间老师推荐使用vue dev-tools调试神器&#xff0c;所以过来安转和使用了&#xff0c;用了感觉不错&#xff0c;希望给大家带来效率的提升。 定义 Vue DevTools 是一款旨在增强 Vue 开发者体验的工具&am…

单片机-FLASH软件模拟EEPROM,提升flash保存重要参数的使用寿命

目录 1. FLASH和EEPROM读写数据的对比   2. FLASH模拟EEPROM的原理   3. FLASH模拟EEPROM的优点   4. 实战项目工程代码 1. FLASH和EEPROM读写数据的对比 1.1 擦除操作 EEPROM通常支持按单字节擦除和写入&#xff0c;这一特性使其非常适合需要频繁更新小量数据的应…

探索Stream流:高效数据处理的秘密武器

不可变集合 stream流 Stream流的使用步骤&#xff1a; 先得到一条Stream流&#xff08;流水线&#xff09;&#xff0c;并把数据放上去 使用中间方法对流水线上的数据进行操作 使用终结方法对流水线上的数据进行操作 Stream流的中间方法 注意1&#xff1a;中间方法&#xff0…

vue3笔记(自存)

1. Vue3简介 2020年9月18日&#xff0c;Vue.js发布版3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;n 经历了&#xff1a;4800次提交、40个RFC、600次PR、300贡献者 官方发版地址&#xff1a;Release v3.0.0 One Piece vuejs/core 截止2023年10月&#xff0c;最…

实验4 mySQL查询和视图

一、实验目的 掌握SELECT语句的基本语法多表连接查询GROUP BY的使用方法。ORDER BY的使用方法。 二、实验步骤、内容、结果 实验内容&#xff1a; 实验4.1数据库的查询 目的与要求 (1)掌握SELECT语句的基本语法。 (2)掌握子查询的表示。 (3)掌握连接查询的表示。 (4)掌…

【bug】fused_bias_act_kernel.cu卡住没反应

简述 在推理人脸修复face restoration算法 GPEN的时候&#xff0c;发现有时候fused_bias_act_kernel.cu卡住没反应。 解决 清理下缓存&#xff0c;让程序自己再编译下

.net/C#进程间通信技术方案总结

C# 应用进程间通信(IPC)技术方案 进程间通信(Inter-Process Communication, IPC)是不同进程之间交换数据和消息的机制。以下是C#中常用的IPC技术方案&#xff1a; 1. 命名管道(Named Pipes) 适用于本地机器上的进程通信&#xff0c;支持双向通信。 ​​服务端示例​​&…

阿里云服务器数据库故障排查指南?

阿里云服务器数据库故障排查指南? 以下是针对阿里云服务器&#xff08;如ECS自建数据库或阿里云RDS等托管数据库&#xff09;的故障排查指南&#xff0c;涵盖常见问题的定位与解决方案&#xff1a; 一、数据库连接失败 检查网络连通性 ECS自建数据库 确认安全组规则放行数据库…

深度学习 ———— 迁移学习

迁移学习原理 什么是迁移学习&#xff1f; 迁移学习利用在大规模数据集&#xff08;如ImageNet&#xff09;上预训练的模型&#xff0c;改装小数据集&#xff08;如CIFAR-10&#xff09;。优势&#xff1a; 减少训练时间&#xff1a;预训练模型已学习通用特征&#xff08;如边…

单调栈模版型题目(3)

单调栈型题目贡献法 基本模版 这是数组a中的 首先我们要明白什么叫做贡献&#xff0c;在一个数组b{1,3,5}中&#xff0c;连续包含1的连续子数组为{1}&#xff0c;{1,3}&#xff0c;{1,3,5}&#xff0c;一共有三个&#xff0c;这三个数一共能组成6个连续子数组&#xff0c;而其…

日常知识点之随手问题整理(思考单播,组播,广播哪个更省带宽)

新入职的公司在某些场景下无脑使用组播技术&#xff0c;自己突然就意识到一个问题&#xff1a;单播&#xff0c;组播&#xff0c;广播&#xff0c;哪个更省带宽&#xff1f; 有所收获&#xff0c;做点笔记&#xff0c;仅仅是个人理解~ 1&#xff1a;简单理解 单播&#xff1…

R1-Omni

一、Omni概述 Omni 文本视频音频&#xff0c;全模态。 R1Omni 强化学习全模态。 二、Omni举例-humanOmni humanOmni&#xff1a;以人体姿态和人物交互为中心的全模态模型。 visual projector有3个&#xff0c;分别负责人脸标签、姿态检测、人和物交互。有点像moe。text enc…

linux中的日志分割

1.问题背景&#xff0c;nginx日志过大不好删除 [rootlocalhost cron.daily]# cd /lk/nginx/log/ [rootlocalhost log]# ll 总用量 2386188 -rw-r--r--. 1 root root 2078699697 5月 9 13:02 access.log -rw-r--r--. 1 root root 11138 5月 6 10:28 error.log [rootloc…

华为云Flexus+DeepSeek征文|从开通到应用:华为云DeepSeek-V3/R1商用服务深度体验

前言 本文章主要讲述在华为云ModelArts Studio上 开通DeepSeek-V3/R1商用服务的流程&#xff0c;以及开通过程中的经验分享和使用感受帮我更多开发者&#xff0c;在华为云平台快速完成 DeepSeek-V3/R1商用服务的开通以及使用入门注意&#xff1a;避免测试过程中出现部署失败等问…