【博客539】使用openssl手动为k8s集群签发证书

news2025/1/11 10:49:18

使用openssl手动为k8s集群签发证书

创建ca私钥和ca证书

1、生成ca私钥:生成一个 2048 位的 ca.key 文件

openssl genrsa -out ca.key 2048

2、基于ca私钥,生成根(root)证书:在 ca.key 文件的基础上,生成 ca.crt 文件

openssl req -x509 -new -nodes -key ca.key -subj “/CN=${MASTER_IP}” -days 10000 -out ca.crt

生成应用的私钥和csr

1、生成应用私钥:生成一个 2048 位的 server.key 文件:

openssl genrsa -out server.key 2048

2、基于应用私钥,创建一个用于生成证书签名请求(CSR)的配置文件。

openssl req -new -key server.key -out server.csr -config csr.conf

保存文件(例如:csr.conf)前,记得用真实值替换掉尖括号中的值(例如:<MASTER_IP>)。 注意:MASTER_CLUSTER_IP 就像前一小节所述,它的值是 API 服务器的服务集群 IP。 下面的例子假定你的默认 DNS 域名为 cluster.local。

csr.conf example:

[ req ]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn

[ dn ]
C = <country>
ST = <state>
L = <city>
O = <organization>
OU = <organization unit>
CN = <MASTER_IP>

[ req_ext ]
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = kubernetes
DNS.2 = kubernetes.default
DNS.3 = kubernetes.default.svc
DNS.4 = kubernetes.default.svc.cluster
DNS.5 = kubernetes.default.svc.cluster.local
IP.1 = <MASTER_IP>
IP.2 = <MASTER_CLUSTER_IP>

[ v3_ext ]
authorityKeyIdentifier=keyid,issuer:always
basicConstraints=CA:FALSE
keyUsage=keyEncipherment,dataEncipherment
extendedKeyUsage=serverAuth,clientAuth
subjectAltName=@alt_names

使用ca私钥和ca证书为应用的csr签发应用的证书

基于 ca.key、ca.crt 和 server.csr 等三个文件生成服务端证书:

openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key
-CAcreateserial -out server.crt -days 10000
-extensions v3_ext -extfile csr.conf -sha256

查看结果

查看证书签名请求:

openssl req -noout -text -in ./server.csr

查看证书:

openssl x509 -noout -text -in ./server.crt

使用

此时需要与apiserver通信的组件可以使用server.crt来验证自己的身份

各类文件格式

私钥文件通常以 .key 结尾,证书文件通常以 .crt 结尾,证书签名请求文件通常以 .csr 结尾。
不论什么后缀的文件,其实都是文本格式的文件。

证书文件的开头和结尾是这样子的:

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

私钥文件的开头和结尾是这样的:

-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----

证书签名请求文件的开头和结尾是这样的:

-----BEGIN CERTIFICATE REQUEST-----
...
-----END CERTIFICATE REQUEST-----

key,csr,crt文件的作用

key:私钥,openssl格式,通常是rsa算法

csr(Certificate Signing Request):证书请求文件,用于申请证书,含有公钥信息。在申请的时候,必须使用自己的私钥来签署申请,还可以设定一个密钥

crt:证书文件,是签署人用自己的 key 给你签署的凭证。可以自签署

为什么生成密钥的时候只有私钥,没有公钥

RSA密钥都是一对,可这里只生成了私钥,那公钥在哪呢?
实际上公钥是根据私钥生成的,由于RSA非对称特性,私钥算出公钥很容易,公钥算出私钥就很难。

生成公钥的指令为:

openssl rsa -in ca.key -pubout -out ca.pub

生成应用的csr的时候,为什么需要使用应用的私钥

其实csr里需要的是公钥,创建证书请求时需要提供私钥,这个私钥的作用是为了提供公钥

生成ca证书的时候,为什么需要使用ca私钥

其实生成ca.crt里需要的也是公钥,创建ca证书时需要提供私钥,这个私钥的作用是为了提供公钥

签发证书的时候,为什么要同时用到ca.key和ca.crt

使用CA的证书,这用来宣示此服务器证书是谁签的;
使用CA的私钥,这用来生成摘要保证签名内容不被篡改。

创建所需条件整理

  • 1、创建证书需要:私钥(其实为了提取公钥)

  • 2、创建csr需要:私钥(其实为了提取公钥)+ csr请求配置文件

  • 3、签署csr需要:csr + ca私钥 + ca证书

流程梳理

  • 1、生成ca的私钥

  • 2、利用ca的私钥(为了提取公钥)生成ca证书,证书包含了公钥信息和ca机构信息

  • 3、生成server的私钥

  • 4、利用server的私钥(为了提取公钥)生成server的csr,csr包含了server公钥信息和server的身份信息

  • 5、使用server的csr,还有ca私钥,ca证书来生成server证书,其实签名只需要ca私钥就可以,假设ca证书是为了加入ca证书里的ca机构信息,才知道证书是谁签署的

证书自签署和认证原理

证书自签署:

我们手动生成ca私钥,然后使用ca私钥生成ca证书,证书里包含了从私钥中提取出来的公钥信息和ca机构的信息。再手动生成应用私钥,然后使用应用私钥和csr配置文件生成csr,csr里包含了应用的公钥信息和应用的身份信息。使用ca私钥和ca证书来签署csr,从而得到了server证书,里面包含了应用的公钥和身份信息,以及对应用的公钥和身份信息进行hash之后,使用ca私钥对hash的值进行签名后的一个签名值。

认证原理:

当需要验证对方身份的时候,拿到对方的证书,然后对签名值使用ca的公钥进行解密,得到加密前的内容,也就是对应用的公钥和身份信息进行hash后的hash值,此时再对证书里的应用的公钥和身份信息使用相同的hash算法,得到一个hash值,与前面那一步解密出来的hash值进行比较,如果一致,就证明身份可靠

签名和认证原理图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/19941.html

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

相关文章

[MQ] 交换机与队列的介绍

✨✨个人主页:沫洺的主页 &#x1f4da;&#x1f4da;系列专栏: &#x1f4d6; JavaWeb专栏&#x1f4d6; JavaSE专栏 &#x1f4d6; Java基础专栏&#x1f4d6;vue3专栏 &#x1f4d6;MyBatis专栏&#x1f4d6;Spring专栏&#x1f4d6;SpringMVC专栏&#x1f4d6;SpringBoot专…

[Spring Cloud] Open Feign 使用

✨✨个人主页:沫洺的主页 &#x1f4da;&#x1f4da;系列专栏: &#x1f4d6; JavaWeb专栏&#x1f4d6; JavaSE专栏 &#x1f4d6; Java基础专栏&#x1f4d6;vue3专栏 &#x1f4d6;MyBatis专栏&#x1f4d6;Spring专栏&#x1f4d6;SpringMVC专栏&#x1f4d6;SpringBoot专…

机械设计基础试题3

一、判断题&#xff08;请在后面的括号中&#xff0c;正确的填√&#xff0c;错误的填&#xff09; &#xff08;20分&#xff09; 1. 如果机构的自由度F&#xff1d;2&#xff0c;则机构无确定性运动。 &#xff08; &#xff09; 2. 作相对运动的三个构件的三个瞬心不一定在一…

JavaEE 进阶:Spring 的创建和使用

文章目录前言一、创建 Spring 项⽬1、创建⼀个 Maven 项⽬2、添加 Spring 框架⽀持3、添加启动类二、存储 Bean 对象1、创建 Bean2、将 Bean 注册到容器三、获取并使⽤ Bean 对象1、创建 Spring 上下⽂① ApplicationContextⅠ 注意事项② BeanFactory③ ApplicationContext VS…

【浅学Java】Bean的作用域和生命周期

Bean的作用域和生命周期1. Bean的作用域1.1 什么是Bean的作用域1.2 Bean的6种作用域singleton——单例作用域prototype——多例作用域request——请求作用域session——会话作用域application——全局作用域(了解)websoccket——HTTP WebSocket作用域(了解)1.3 设置作用域2. Be…

计算机毕业设计node.js+vue+Element企业员工信息管理系统

项目介绍 随着Internet的发展,人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化、网络化和电子化。本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用node框架和node来完成对系统的设计。整个开发过程首先对企业员工管理系统进行需求分…

LVS-NAT模式部署

目录 一、环境准备 1、准备三台centos服务器 2、实验拓扑 3、NAT模式介绍 二、LVS-NAT模式部署 1、给lvs服务器安装LVS 2、新建LVS集群 3、添加Real Server服务器节点 4、开启路由转发 5、给后端web服务器配置网关 6、效果测试 一、环境准备 1、准备三台centos服务器…

ctfhub-web-warmup

打开题目链接 是一张图 查看源代码 提示source.php 访问这个文件 得到源码 <?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$whitelist ["source">"source.php","hint">"hint.php…

Java毕业设计项目_企业级实战全栈项目中信CRM

【教程、代码】文章底部 1.学习目标视频教程目录【教程、代码】文章底部2.CRM 系统概念与项目开发流程2.1. CRM基本概念 圈内存在这么一句话&#xff1a;“世上本来没有CRM&#xff0c;大家的生意越来越难做了&#xff0c;才有了CRM。”在同质化竞争时代&#xff0c;顾客资产尤…

[附源码]java毕业设计社区医院管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

RabbitMQ初步到精通-第六章-RabbitMQ之死信队列

目录 第六章-RabbitMQ之死信队列 1. 死信概念 2. 死信架构 3. 死信来源 3.1 消息 TTL 过期 3.2 队列达到最大长度&#xff08;队列满了&#xff0c;无法再添加数据到 mq 中&#xff09; 3.3 消息被拒绝&#xff08;basic.reject 或 basic.nack&#xff09;并且 requeuefa…

基于stm32单片机的智能恒温箱游泳池

资料编号&#xff1a;104 下面是相关功能视频演示&#xff1a; 104-基于stm32单片机的智能恒温箱游泳池控制系统Proteus仿真&#xff08;源码仿真全套资料&#xff09;功能介绍&#xff1a; 采用stm32单片机&#xff0c;程序可以设置最高值和最低值&#xff0c;当温度超过最高…

[笔记]vue从入门到入坟《五》vue-cli构建vue webpack项目

参考&#xff1a; 用vue-cli搭建vue项目 vue-cli 项目结构目录简介 文章目录前言一、Vue-cli介绍二、开始2.0 下载安装npm 以及gitnpm安装git安装2.1 全局安装 vue-cli2.2 创建项目目录介绍三、常见问题总结前言 一、Vue-cli介绍 官网 简单地说就是构建vue项目的工具包&#…

SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.1 缓存的作用

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇5 整合第三方技术5.1 缓存的作用5.1.1 缓存介绍5.1.2 小结5 整合第三…

【计算机组成原理Note】5.3 CPU数据通路(CPU内部总线+专用数据通路)

5.3.1 数据通路-CPU内部单总线方式 这是第一节的图&#xff0c;将其部件换到一边&#xff1a; 5.3.1.1 CPU内部单总线方式 内部总线是指同一部件&#xff0c;如CPU内部连接各寄存器及运算部件之间的总线; 系统总线是指同一台计算机系统的各部件&#xff0c;如CPU、内存、通道…

C++类型转换+特殊类的设计+单例模式+IO流+空间配置器

索引类型转换(1).C语言的类型转换(2).C四种类型转换a.static_castb.reinterpret_castc.const_castd.dynamic_castvolatile关键字(了解即可)RTTL特殊类的设计(1).设计一个类不能支持拷贝(2).设计一个类&#xff0c;只能在堆上创建对象(3).设计一个类&#xff0c;只能在栈上创建对…

[C++数据结构](33)图,图的遍历,最小生成树,最短路径算法详解

文章目录图的基本概念图的存储结构邻接矩阵邻接表实现图的遍历广度优先遍历深度优先遍历最小生成树Kruskal 算法Prim 算法最短路径Dijkstra 算法Bellman-Ford 算法Bellman-Ford 算法的队列优化Floyd 算法图的基本概念 图(Graph)是由顶点集合及顶点间的关系组成的一种数据结构&…

uni-app入门:常用事件绑定与数据同步

1.常见事件与事件绑定 1.1点击事件bindtap 1.2 文本输入事件bindinput 1.3 切换事件bindtouchend 2.数据同步 2.1事件回调 2.2逻辑层中page对象中的中数据如何进行改变 2.3页面触发事件如何传参到page中数据 …

Android 基础知识1-开发环境搭建

1.1 Android开发准备工作 配置Android开发环境之前&#xff0c;首先需要了解Android对操作系统的要求。它可以使用Windows XP 已经以上版本、Mac OS 、Linux等操作系统&#xff0c;我是以Windows系统为例学习以及开发的。 1.2 开发包以及其工具的安装和配置 Android以Java作为…

内蒙古工程学院无线网络设计与规划

摘 要 I ABSTRACT II 第1章 绪论 1 1.1选题背景及意义 1 1.1.1选题背景 1 1.1.2选题意义 1 1.1.3国内外研究现状 2 1.2需求分析 3 1.2.1建设背景 3 1.2.2总体建设目标 4 1.2.4具体实施目标 5 1.3校园无线网在教育中的发展 6 第2章 无线网络的应用 7 2.1 无线网络的概述 7 2.1.1…