基于CFSSL工具创建CA证书

摘要:
在LAN中部署组件时,如果要使用证书来实现身份验证并确保通信安全,可以使用cfssl工具创建CA证书、服务器证书和客户端证书。运行认证中心需要CA证书和相应的CA私钥。任何知道私钥的人都可以充当CA来颁发证书。因此,私钥的保护对于配置证书生成策略、配置证书生成政策以及让CA软件知道颁发了哪些功能证书非常重要。

背景描述

CA(Certification Authority)证书,指的是权威机构给我们颁发的证书。

在局域网中部署组件时,想要通过证书来实现身份的认证,确保通信的安全性,可以通过cfssl工具来进行CA证书,服务端证书,客户端证书的创建。

 

部署cfssl工具

下载cfssl,cfssljson,cfssl-certinfo工具

下载地址:https://pkg.cfssl.org/

[root@localhost tools]# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
[root@localhost tools]# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
[root@localhost tools]# wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64

 

增加命令的执行权限,并且增加到相关目录

[root@localhost tools]# chmod +x cfssl*
[root@localhost tools]# mv cfssl_linux-amd64 /usr/local/bin/cfssl
[root@localhost tools]# mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
[root@localhost tools]# mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo

 

创建认证中心(CA)

CFSSL可以创建一个获取和操作证书的内部认证中心。

运行认证中心需要一个CA证书和相应的CA私钥。任何知道私钥的人都可以充当CA颁发证书。因此,私钥的保护至关重要

配置证书生成策略

配置证书生成策略,让CA软件知道颁发有什么功能的证书。

  • #vim >ca-config.json
    {
      "signing": {
        "default": {
          "expiry": "8760h"
        },
        "profiles": {
          "kubernetes": {
            "usages": [
                "signing",
                "key encipherment",
                "server auth",
                "client auth"
            ],
            "expiry": "8760h"
          }
        }
      }
    }
    default默认策略,指定了证书的默认有效期是一年(8760h)
  • kubernetes:表示该配置(profile)的用途是为kubernetes生成证书及相关的校验工作
  • signing:表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE
  • server auth:表示可以该CA 对 server 提供的证书进行验证
  • client auth:表示可以用该 CA 对 client 提供的证书进行验证
  • expiry:也表示过期时间,如果不写以default中的为准

生成CA证书和私钥(root证书和私钥)

创建一个文件ca-csr.json

#vim ca-csr.json
{
  "CN": "kubernetes",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "ShangHai",
      "L": "ShangHai",
      "O": "k8s",
      "OU": "System"
    }
  ]
}

参数介绍:

  • CN: Common Name,浏览器使用该字段验证网站是否合法,一般写的是域名。非常重要。
  • key:生成证书的算法
  • hosts:表示哪些主机名(域名)或者IP可以使用此csr申请的证书,为空或者""表示所有的都可以使用(本例中没有hosts字段)
  • names:一些其它的属性
  • C: Country, 国家
  • ST: State,州或者是省份
  • L: Locality Name,地区,城市
  • O: Organization Name,组织名称,公司名称(在k8s中常用于指定Group,进行RBAC绑定)
  • OU: Organization Unit Name,组织单位名称,公司部门

 

生成CA证书和CA私钥和CSR(证书签名请求)

[root@localhost tools]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca
2020/12/04 14:20:39 [INFO] generating a new CA key and certificate from CSR
2020/12/04 14:20:39 [INFO] generate received request
2020/12/04 14:20:39 [INFO] received CSR
2020/12/04 14:20:39 [INFO] generating key: rsa-2048
2020/12/04 14:20:39 [INFO] encoded CSR
2020/12/04 14:20:39 [INFO] signed certificate with serial number 497233672920328375338343228164630446467151606126

[root@localhost tools]# ls -l ca*
-rw-r--r-- 1 root root  294 Dec  4 14:13 ca-config.json
-rw-r--r-- 1 root root 1045 Dec  4 14:20 ca.csr
-rw-r--r-- 1 root root  246 Dec  4 14:19 ca-csr.json
-rw------- 1 root root 1675 Dec  4 14:20 ca-key.pem
-rw-r--r-- 1 root root 1310 Dec  4 14:20 ca.pem

该命令会生成运行CA所必需的文件ca-key.pem(私钥)和ca.pem(证书),还会生成ca.csr(证书签名请求),用于交叉签名或重新签名。

查看cert(证书信息):

# cfssl certinfo -cert ca.pem

查看CSR(证书签名请求)信息:

# cfssl certinfo -csr ca.csr

 

创建etcd服务端证书

创建一个文件etcd-csr.json

#vim etcd-csr.json
{
  "CN": "etcd",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "Beijing",
      "L": "Beijing",
      "O": "DC",
      "OU": "System"
    }
  ]
}
用CA签发etcd证书和私钥
cfssl gencert 
  -ca=ca.pem 
  -ca-key=ca-key.pem 
  -config=ca-config.json 
  -profile=kubernetes etcd-csr.json | cfssljson -bare etcd

2020/12/04 14:33:00 [INFO] generate received request
2020/12/04 14:33:00 [INFO] received CSR
2020/12/04 14:33:00 [INFO] generating key: rsa-2048
2020/12/04 14:33:00 [INFO] encoded CSR
2020/12/04 14:33:00 [INFO] signed certificate with serial number 86899219278041222746661164070003623992607015229
2020/12/04 14:33:00 [WARNING] This certificate lacks a "hosts" field. This makes it unsuitable for
websites. For more information see the Baseline Requirements for the Issuance and Management
of Publicly-Trusted Certificates, v.1.1.6, from the CA/Browser Forum (https://cabforum.org);
specifically, section 10.2.3 ("Information Requirements").

[root@localhost tools]# ls -l etcd*
-rw-r--r-- 1 root root  993 Dec  4 14:33 etcd.csr
-rw-r--r-- 1 root root  201 Dec  4 14:30 etcd-csr.json
-rw------- 1 root root 1679 Dec  4 14:33 etcd-key.pem
-rw-r--r-- 1 root root 1383 Dec  4 14:33 etcd.pem

etcd.csr为etcd的证书请求文件,etcd-key.pem为etcd的私钥,etcd.pem为etcd的证书。至此,etcd的证书签发完成。此证书可以作为etcd的服务端证书来使用。

 

 

免责声明:文章转载自《基于CFSSL工具创建CA证书》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇拓扑规则翻译函数(转)Python 区分IPv4与IPv6下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

sqoop迁移

3.1 概述 sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。 导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统; 导出数据:从Hadoop的文件系统中导出数据到关系数据库 3.2 工作机制 将导入或导出命令翻译成mapreduce程序来实现 在翻译出的mapre...

建设DevOps统一运维监控平台,全面的系统监控 Zabbix VS Nagios VS Open-Falcon OR Prometheus

前言 随着Devops、云计算、微服务、容器等理念的逐步落地和大力发展,机器越来越多,应用越来越多,服务越来越微,应用运行基础环境越来多样化,容器、虚拟机、物理机不一而足。面对动辄几百上千个虚拟机、容器,数十种要监控的对象,现有的监控系统还能否支撑的住?来自于容器、虚拟机、物理机、网络设备、中间件的指标数据如何采用同一套方案快速、完整的收集和分析告警?怎样...

解决springboot 新版本 2.1.6 spring-boot-starter-actuator 访问报404

pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"...

转载:Rancher RKE 集群备份与恢复

此方法直接使用RKE进行集群恢复,它适用于RKE创建并导入的集群或者RKE部署的local集群 一、备份 参考官网备份步骤,本文采用的是 RKE HA部署的,三台服务器都是全部角色。 1.1 自动备份 RKEv0.2以后默认ETCD自动备份没有开启,需要使用额外的配置参数启用etcd-snapshot服务。默认情况下,etcd-snapshot服务为具有e...

MySQL高可用方案--MHA部署及故障转移

架构设计及必要配置 主机环境 IP                 主机名             担任角色 192.168.192.128  node_master    MySQL-Master| MHA-Node 192.168.192.129  node_slave     MySQL-Slave | MHA-Node(备选Master) 19...

maven 常见错误解决方法

1. 最重要的一点,使用国内镜像,比如 oschina.net 的镜像; 搜 jar 推荐:http://maven.outofmemory.cn/,速度极快。 2. 错误:Could not resolve artifact org.apache.maven.archetypes:maven-archetype-quickstart:pom:RELEAS...