聊聊cfssl

近日见闻

  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的一些常用命令和功能:

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

    cfssl gencert -initca ca-csr.json | cfssljson -bare ca
    

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

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

    cfssl sign -ca ca.pem -ca-key ca-key.pem server-csr.json | cfssljson -bare server
    

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

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

    cfssl bundle ca.pem server.pem | cfssljson -bare bundle
    

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

  4. revoke:撤销证书。

    cfssl revoke -dbpath /path/to/db -cert /path/to/cert.pem -key /path/to/key.pem
    

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

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

    cfssl serve -ca ca.pem -ca-key ca-key.pem
    

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

  6. jsoninfo:查看证书信息。

    cfssl jsoninfo -cert server.pem
    

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

  7. mkbundle:创建证书捆绑包。

    cfssl mkbundle bundle.pem server.pem
    

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

k8s中怎么用cfssl

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

  1. 安装CFSSL

    首先,您需要在部署Kubernetes集群的机器上安装CFSSL。您可以从CFSSL的GitHub仓库中获取最新的二进制文件,然后将其放置在系统的可执行文件路径中,以便在命令行中访问。

 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  
  ```

2. **创建证书颁发机构(CA)证书和私钥**:

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

 ```bash
 cfssl gencert -initca ca-csr.json | cfssljson -bare ca

这将生成以下文件:

  • ca.pem:根CA证书
  • ca-key.pem:根CA私钥
  1. 生成其它组件的证书和私钥

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

    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:组件的私钥

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

  2. 分发证书文件

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

  3. 配置组件

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

    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"
    

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

  4. 启动Kubernetes组件

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

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