聊聊CFSSL

2023-10-30 19:00:03 浏览数 (1)

近日见闻

  1. 在最新发布的 v1.7 版本中,Karmada 新增了应用跨集群定时弹性伸缩的能力,用户可以通过 Cron 表达式设定一个时间计划,Karmada 根据设定的时间对应用进行扩缩容,既可以定时直接调整工作负载的副本实例数,又可以结合FederatedHPA 策略定时调整 FederatedHPA 伸缩范围,实现复杂场景下的工作负载伸缩。 --Karmada
  2. 隔离 (Air Gap) 可能是一种很好的安全方法,但在云环境中,它带来了许多设计挑战。Linux基金会刚刚推出了 现代安全隔离环境下的软件交付课程(LFS281)来帮助在云中创建和管理软件的IT专业人员 – 尤其是那些没有传统IT系统经验的人员 – 解决创建断开连接的价值交付系统的独特设计挑战。 免费的哦! --CNCF
  3. Beaver Notes 使用了 Vue 和 JavaScript 构建,作为一款以隐私为主导的记事本应用,它提供了简洁而直观的用户界面。不过好不好用还未知。 --Linux中国推荐
  4. dirpro 是一款由 python 编写的目录扫描器,操作简单,功能强大,高度自动化,感兴趣可以看下。 地址: https://github.com/coleak2021/dirpro

cfssl到底是什么

先摆出地址:

https://github.com/cloudflare/cfssl

目前最新版本:1.6.4

CFSSL(CloudFlare's SSL/TLS Toolkit)是一个由CloudFlare开发的开源工具,用于管理和操作TLS/SSL证书和密钥。它是一个命令行工具和Go语言库,用于创建、签发、管理和验证X.509数字证书。CFSSL通常用于构建和维护安全的通信通道,例如在Web服务器和客户端之间。突出一个安全通信。

以下是CFSSL的一些常用命令和功能:

gencert:生成X.509数字证书和私钥。

代码语言:javascript复制
cfssl gencert -initca ca-csr.json | cfssljson -bare ca

通过此命令,您可以生成自签名的根证书和私钥。

sign:使用已有的证书和私钥签发新的证书请求。

代码语言:javascript复制
cfssl sign -ca ca.pem -ca-key ca-key.pem server-csr.json | cfssljson -bare server

此命令用于签发服务器证书。

bundle:将证书链和私钥打包成一个文件。

代码语言:javascript复制
cfssl bundle ca.pem server.pem | cfssljson -bare bundle

这将把根证书、中间证书和服务器证书合并到一个文件中。

revoke:撤销证书。

代码语言:javascript复制
cfssl revoke -dbpath /path/to/db -cert /path/to/cert.pem -key /path/to/key.pem

通过此命令,您可以撤销已签发的证书。

serve:启动CFSSL HTTP API服务,用于远程操作。

代码语言:javascript复制
cfssl serve -ca ca.pem -ca-key ca-key.pem

这将启动一个HTTP API服务,允许远程客户端使用CFSSL功能。

jsoninfo:查看证书信息。

代码语言:javascript复制
cfssl jsoninfo -cert server.pem

此命令用于查看证书的详细信息。

mkbundle:创建证书捆绑包。

代码语言:javascript复制
cfssl mkbundle bundle.pem server.pem

这用于创建包含服务器证书和根证书的捆绑包。

k8s中怎么用cfssl

使用 CFSSL 工具生成证书是 Kubernetes 二进制安装中的关键步骤,以确保集群中的各个组件之间的通信是安全的。确保在生成证书时遵循最佳实践,以维护集群的安全性。在Kubernetes(K8s)的二进制安装中使用CFSSL生成证书时,需要执行以下详细步骤:

  1. 安装CFSSL: 首先,您需要在部署Kubernetes集群的机器上安装CFSSL。您可以从CFSSL的GitHub仓库中获取最新的二进制文件,然后将其放置在系统的可执行文件路径中,以便在命令行中访问。
代码语言:javascript复制
 wget "https://pkg.cfssl.org/R1.2/cfssl_linux-amd64" -O /usr/local/bin/cfssl
  wget "https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64" -O /usr/local/bin/cfssljson
  chmod  x /usr/local/bin/cfssl /usr/local/bin/cfssljson  

创建证书颁发机构(CA)证书和私钥

首先,创建一个CA配置文件(例如,ca-config.json),该文件指定了CA的属性,如过期时间和使用场景。然后,创建一个CA证书签发请求文件(例如,ca-csr.json),该文件包含CA的名称和其他信息。最后,使用CFSSL生成自签名的根CA证书和私钥:

代码语言:javascript复制
cfssl gencert -initca ca-csr.json | cfssljson -bare ca

这将生成以下文件:

  • ca.pem:根CA证书
  • ca-key.pem:根CA私钥

生成其它组件的证书和私钥

对于Kubernetes集群中的每个组件(如kube-apiserver、kube-controller-manager、kube-scheduler等),需要创建相应的证书和私钥。为每个组件创建一个CSR文件(例如,server-csr.json),其中包含组件的名称和其他配置信息,然后使用根CA证书和私钥签发组件证书:

代码语言:javascript复制
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | cfssljson -bare server

这将生成以下文件:

您需要为每个组件分别生成证书和私钥。

  • server.pem:组件的证书
  • server-key.pem:组件的私钥

分发证书文件

将生成的证书文件(例如ca.pem、server.pem)和私钥文件(例如ca-key.pem、server-key.pem)分发到Kubernetes集群中的各个节点。您可以使用安全的方式将这些文件传输到每个节点,以确保证书的机密性。

配置组件

在Kubernetes组件的配置文件中,您需要指定正确的证书和私钥文件路径。例如,kube-apiserver的配置文件需要包含以下配置项:

代码语言:javascript复制
apiServerCertSANs:
  - "kubernetes"
  - "kubernetes.default"
  - "kubernetes.default.svc"
  - "kubernetes.default.svc.cluster"
  - "kubernetes.default.svc.cluster.local"
  - "127.0.0.1"
  - "<master-node-IP>"
apiServerExtraArgs:
  tls-cert-file: "/etc/kubernetes/pki/apiserver.pem"
  tls-private-key-file: "/etc/kubernetes/pki/apiserver-key.pem"

确保每个组件都使用其对应的证书和私钥文件。

启动Kubernetes组件

启动Kubernetes集群中的各个组件,它们现在应该能够使用证书进行安全通信。确保在启动每个组件之前验证其证书和私钥路径是否正确配置。

通过以上介绍,应该对cfssl有个大致了解了,快去实践吧!

0 人点赞