Cert Manager 申请SSL证书流程及相关概念-三
中英文对照表
英文 | 英文 - K8S CRD | 中文 | 备注 |
---|---|---|---|
certificates | Certificate |
证书 | certificates.cert-manager.io/v1 |
certificate issuers | Issuer |
证书颁发者 | issuers.cert-manager.io |
ClusterIssuer |
集群证书颁发者 | clusterissuers.cert-manager.io |
|
certificate request | CertificateRequest |
证书申请 | certificaterequests.cert-manager.io |
order | Order |
(证书)订单 | orders.acme.cert-manager.io |
challenge | Challenge |
(证书)挑战 | challenges.acme.cert-manager.io |
SelfSigned | 自签名 | cert-manager Issuer 的一种 | |
CA | 证书颁发机构 | Certificate Authority 的缩写; cert-manager Issuer 的一种 |
|
Vault | 金库 | cert-manager Issuer 的一种,即 Hashicorp Vault | |
Venafi | Venafi 在线证书办理服务,目前用的不多。 | ||
External | 外部 | cert-manager Issuer 的一种 | |
ACME | 自动证书管理环境 | Automated Certificate Management Environment 的缩写; cert-manager Issuer, 包括 HTTP01 和 DNS01 |
书接上回, 最后了解一下 cert-manager 的相关概念.
相关概念
Issuer(证书颁发者)
Issuers
和 ClusterIssuers
是 Kubernetes CRD,代表证书颁发机构(CA),能够通过兑现证书签名请求来生成签名证书。所有 cert-manager 证书都需要一个被引用的签发者,该签发者处于准备就绪的状态,可以尝试兑现请求。
Issuer
类型的一个例子是 "CA"。一个简单的CA
Issuer
如下。
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: ca-issuer
namespace: mesh-system
spec:
ca:
secretName: ca-key-pair
这是一个简单的Issuer
,将根据私钥(私钥存储在 Secret 的ca-key-pair
中)签署证书。
Issuer
: 限定在一个 NameSpace 的资源;ClusterIssuer
: 可以用于在所有命名空间中颁发 "证书"。
Certificate(证书)
cert-manager 有 Certificate
的概念,定义了所需的 X.509 证书,它将被更新并保持最新。一个 Certificate
是一个 Kubernetes 的 CRD,它引用了一个 Issuer
或 ClusterIssuer
,决定了什么将被授予证书请求。
当一个 Certificate
被创建时,一个相应的 CertificateRequest
资源由 cert-manager 创建,其中包含编码的 X.509 证书请求,Issuer
reference,以及其他基于 证书
资源规范的选项。
这个 Certificate
将告诉 cert-manager 尝试使用哪个 Issuer
来获取域名的证书密钥对。如果成功,得到的 TLS 密钥和证书将被保存在一个 secret 中,Key 分别为tls.key
和tls.crt
。这个 Secret 将与Certificate
CRD 在同一个命名空间。示例如下:
当证书由中间 CA 签发,并且Issuer
可以提供签发的证书链时,tls.crt
的内容将是请求的证书,后面是证书链。
此外,如果证书颁发机构是已知的,相应的 CA 证书将被存储在 Secret 中,密钥为ca.crt
。例如,对于 ACME 发行者,CA 是不知道的,ca.crt
将不存在于acme-crt-secret
中。
cert-manager 有意避免在tls.crt
中添加根证书,因为在安全进行 TLS 的情况下,这些证书是无用的。
当配置一个客户端连接到具有由私人 CA 签署的服务证书的 TLS 服务器时,你需要向客户端提供 CA 证书,以便它验证服务器。
dnsNames
字段指定了与证书相关的 SAN 的列表。
证书生命周期
这张图显示了使用 ACME/Let's Encrypt Issuer 的名为cert-1
的证书的生命周期。
CertificateRequest(证书申请)
CertificateRequest
是 cert-manager 中的一个 Kubernetes CRD,用于向 Issuer
申请 X.509 证书。该资源包含一个 Base64 编码的 PEM 编码的证书请求字符串,它被发送到被引用的签发者。一个成功的签发将返回一个基于证书签署请求的签名证书。CertificateRequests
通常由控制器或其他系统消费和管理,不应该由人类使用 - 除非特别需要。
CertificateRequest
的spec
内的所有字段,以及任何管理的 cert-manager 注释,都是不可改变的,创建后不能修改。
成功签发证书签署请求将导致对资源的更新,用签署的证书、证书的 CA(如果可用)设置状态,并将 Ready
条件设置为 True
。如下图:
无论证书签署请求的签发是否成功,签发的重试都不会发生。管理CertificateRequests
的逻辑和生命周期是其他控制器的责任。
条件
CertificateRequests
有一组强定义的条件,控制器或服务应该使用和依赖这些条件来决定下一步对资源采取什么行动。
Ready
每个准备好的条件由一对Ready
--一个布尔值,和Reason
--一个字符串组成。这组值和含义如下:
Ready | Reason | 条件含义 |
---|---|---|
False | Pending | CertificateRequest 目前正处于等待状态,等待其他操作的发生。这可能是由于Issuer'还不存在,或者 Issuer'正在签发证书。 |
False | Failed | 证书未能被签发--要么是返回的证书未能被解码,要么是用于签名的参考签发者的实例失败。它的控制器将不会对CertificateRequest 采取进一步行动。 |
True | Issued | 被引用的 Issuer 已成功签发了一份经签名的证书。 |
ACME Orders 和 Challenges
cert-manager 支持从 ACME 服务器请求证书,包括从 Let's Encrypt,使用 ACME Issuer。这些证书通常在公共互联网上被大多数计算机所信任。为了成功申请证书,cert-manager 必须解决 ACME challenge,完成这些 challenge 是为了证明客户拥有被申请的 DNS 地址。
为了完成这些 challenge,cert-manager 引入了两种 CRD 类型:Orders
和 Challenges
。
Orders (订单)
Orders
资源被 ACME 发行者用来管理 ACME '订单' 的生命周期,以获得签名的 TLS 证书。关于 ACME 订单和域名验证的更多细节可以在 Let's Encrypt 网站 这里 找到。一个订单代表了一个单一的证书请求,一旦一个新的 CertificateRequest
资源引用 ACME 发行人,该订单就会自动创建。一旦 Certificate
资源被创建、规格改变或需要更新,CertificateRequest
资源将由 cert-manager 自动创建。
作为终端用户,您将永远不需要手动创建一个 Order
资源。一旦创建,Order
不能被改变。相反,必须创建一个新的 Order
资源。
Order
资源封装了该 "订单" 的多个 ACME Challenge
,因此,将管理一个或多个 Challenge
资源。
Challenges (挑战)
Challenges
资源被 ACME 发行者用来管理 ACME challenge 的生命周期,为了完成对一个 DNS 名称/标识的 "认证",必须完成 challenge。
当一个 Order
资源被创建时,order 控制器将为每个正在被 ACME 服务器认证的 DNS 名称创建 Challenge
资源。
作为终端用户,你永远不需要手动创建一个 Challenge
资源。一旦创建,Challenge
就不能被改变。相反,必须创建一个新的 Challenge
资源。
Challenge 生命周期
在 Challenges
资源被创建后,它最初将被排队处理。在 challenge 被 "安排" 开始之前,处理将不会开始。这种调度过程可以防止一次尝试太多的 challenge,或一次尝试对同一 DNS 名称的多个 challenge。
一旦 challenge 被安排,它将首先与 ACME 服务器进行 "同步",以确定其当前状态。如果 challenge 已经有效,它的 status
将被更新为 valid
,并且还将设置status.processing = false
以 "取消计划"。
如果 challenge 仍然 "pending",challenge 控制器将使用配置的解决方法(HTTP01 或 DNS01 之一)"present" challenge。一旦 challenge 被 "present",它将设置status.presented = true
。
一旦 "present",challenge 控制器将执行 "self check",以确保 challenge 已经 "propagated(已传播)"(即权威的 DNS 服务器已被更新以作出正确响应,或 ingress 资源的变化已被 ingress controller 观察到并正在使用)。
如果自检失败,cert-manager 将以固定的 10 秒重试时间间隔重试自检。没有完成自检的 challenge 将继续重试,直到用户通过重试 "订单"(通过删除 "订单 "资源)或修改相关的 "证书 "资源来解决任何配置错误进行干预。
一旦自检通过,与此 challenge 相关的 ACME "authorization(认证) "将被 "accepted(接受)"。
接受认证后的最终状态将被复制到 challenge 的status.state
字段,如果 ACME 服务器试图验证 challenge 时发生错误,也会复制 "error reason(错误原因)"。
一旦 challenge 进入 valid
、invalid
、expired
或 revoked
(撤销)状态,它将设置 status.processing = false
,以防止 ACME challenge 的任何进一步处理,如果有积压的 challenge 要完成,允许安排另一个 challenge。
Challenge 调度
cert-manager 并不试图一次处理所有的 challenge ,而是对 challenge 进行 "调度"。
这个调度器对同时进行的 challenge 的最大数量设置了上限,并且不允许对同一 DNS 名称和解算器类型(HTTP01
或DNS01
)的两个 challenge 同时完成。
一次可以处理的最大 challenge 数量是 60 个,原因是 ddff78
系列文章
️ 参考文档
- cert-manager - cert-manager Documentation
- 使用 cert-manager 为 dnspod 的域名签发免费证书 | kubernetes 学习笔记 (imroc.cc)
三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.
Cert Manager 申请SSL证书流程及相关概念-三的更多相关文章
- 【原创】免费申请SSL证书【用于HTTPS,即是把网站从HTTP改为HTTPS,加密传输数据,保护敏感数据】
今天公司有个网站需要改用https访问,所以就用到SSL证书.由于沃通(以前我是在这里申请的)暂停了免费的SSL证书之后,其网站推荐了新的一个网站来申请证书,所以,今天因为刚好又要申请一个证书,所以, ...
- 阿里云申请ssl证书配置tomcat访问https
首先去阿里云上面申请ssl证书,免费的,自己百度去. 申请完ok之后会让你下载一个压缩包,里面有四个文件. 在tomcat安装目录下创建cert文件夹,把这四个文件扔进去 在conf/server.x ...
- 使用acme.sh从Let's Encrypt申请SSL证书
Let's Encrypt 简介 Let's Encrypt是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为 ...
- 超详细网站博客域名和二级域名、子域名升级HTTPS免费申请SSL证书配置nginx指南
随着互联网的飞速发展,我们的工作生活已经离不开互联网,HTTP虽然使用极为广泛, 但是存在不小的安全缺陷, 主要是其数据的明文传送和消息完整性检测的缺乏, 而这两点恰好是网络支付,网络交易等网站应用中 ...
- .io域名在申请SSL证书时被坑
注:标题其实与最后内容不符,只是描述一个事实 - 遇到坑了,不代表观点 - io域名坑我. .io后缀的域名是英属印度洋领地的国别域名,由NIC.io(runby Internet Computer ...
- 申请ssl证书报提示caa提示
申请ssl证书报下面提示caa提示,这和dns有关,换一组dns重新申请 send challenge err[acme error 'urn:acme:error:connection': DNS ...
- 腾讯云域名申请+ssl证书申请+springboot配置https
阿里云域名申请 域名申请比较简单,使用微信注册阿里云账号并登陆,点击产品,选择域名注册 输入你想注册的域名 进入域名购买页面,搜索可用的后缀及价格,越热门的后缀(.com,.cn)越贵一般,并且很可能 ...
- 申请SSL证书
1.为什么需要申请SSL证书呢? 因为之前公司网站是通过http访问的,现在要通过https方式访问,前面多了一个s,那就需要SSL证书,用https方式访问的,会加密用户上传和下载的数据,使访问更加 ...
- Linux服务系统申请SSL证书方法
inux主要面向专业性较强的技术人员,如果是WEB站点通常采取PHP语言为主选,可选的服务器环境中有Apache.Nginx.Tomcat这几类为主的框架环境,有的图方便会用一些可视化一键式的控制面板 ...
- 阿里云申请SSL证书 并部署到SpringBoot项目
前提 有一台阿里云的服务器(安装了java环境) 有已经备案的域名,并且域名绑定上面的服务器 申请SSL证书 申请教程:https://blog.csdn.net/yunweifun/article/ ...
随机推荐
- 5.@pytest.mark.parametrize()数据驱动
简介: pytest.mark.parametrize 是 pytest 的内置装饰器,它允许你在 function 或者 class 上定义多组参数和 fixture 来实现数据驱动. @pytes ...
- 学习Java AES加解密字符串和文件方法,然后写个简单工具类
Reference Core Java Volume Ⅱ 10th Edition 1 对称加密 "Java密码扩展"包含了一个Cipher,它是所有密码算法的超类.通过getIn ...
- 测试开发mysql性能调优总结(一)
测试开发mysql性能调优总结 mysql在创建表的时候,对每个字段选择合适的数据类型很重要! 根据个人的经验总结: 整数类型选择 INT小数类型选择 DECIMAL字符串类型选择 TEXT日期时间选 ...
- 2022春每日一题:Day 33
题目:[USACO 6.1.3] Cow XOR 没找到这题具体网址,这个题就是求最大异或区间(总长度尽量小,右端点尽量大) 嗯很显然一个[l,r]的异或和=s[r]s[l-1],那么现在有了优秀的n ...
- minio API demo
package mainimport ( "context" "fmt" "github.com/minio/minio-go/v7" &q ...
- i春秋GetFlag
进去是个提示界面,提示我们这是个迷你文件管理系统,我们需要登录然后下载文件再获得flag. 然后我们查看源码,没什么信息,点login进去查看源码,没什么信息 下方出现了一个substr(md5(ca ...
- win 10 玩红警/黑边,不能全屏,闪退
win 10玩红警黑边问题 1.下载ddraw.dll,放在游戏目录 下载链接:ddraw.dll 如果提示 选择保留就行了 2.Win 键+S键,搜索注册表,打开这个 进去按这个路径 计算机\ ...
- conky配置(附配置项作用解释)
alignment top_right #是否嵌入桌面 background yes #是否绘制窗口边框 draw_borders no #窗口边框 border_width 10 #cpu_avg_ ...
- [HNCTF]Web详解_原创
WEB Challenge__rce 根据给出的源代码来看典型的命令执行但是正则匹配掉说有的字母只留下数字和少量字符串. 根据大佬给出的思路使用自增绕过 <?php error_reportin ...
- 谁说.NET没有GC调优?只改一行代码就让程序不再占用内存
经常看到有群友调侃"为什么搞Java的总在学习JVM调优?那是因为Java烂!我们.NET就不需要搞这些!"真的是这样吗?今天我就用一个案例来分析一下. 昨天,一位学生问了我一个问 ...