CFSSL是CloudFlare开源的一款PKI/TLS工具,CFSSL包含一个命令行工具和一个用于签名,验证并且捆绑TLS证书的HTTP API服务,环境构建方面需要 Go 1.12+。

需要两套证书,一套k8s通讯使用,一套etcd内部通讯使用

安装一些实用的命令行工具,其中包括 cfssl、cfssljson。

cfssljson 程序,从 cfssl 获取 JSON 输出,并将证书、密钥、CSR和 bundle 写入指定位置。

环境配置

HostName | ip | etcd内部通信端口 |外部通信端口
infra0 | 192.168.1.106 | 2379 | 2380 |
infra1 | 192.168.1.108 | 2379 | 2380 |
infra2 | 192.168.1.109 | 2379 | 2380 |

docker 安装

我这已经把docker提前安装了(可以参考下面的A)

A、安装方式,可以参考官方文档:https://docs.docker.com/engine/install/ubuntu/

B、普通用户加入docker组

sudo gpasswd -a $user docker  # 用户加入docker组

newgrp docker    # 刷新docker组状态

=====================以下在操作在mstart 上执行=====================

一、下载证书生成工具

官方下载地址: https://pkg.cfssl.org/  。需要下载三个文件,分别是 cfssl_linux-amd64,cfssljson_linux-amd64,cfssl-certinfo_linux-amd64

https://github.com/cloudflare/cfssl/releases/download/1.2.0/cfssl_linux-amd64
https://github.com/cloudflare/cfssl/releases/download/1.2.0/cfssljson_linux-amd64
https://github.com/cloudflare/cfssl/releases/download/1.2.0/cfssl-certinfo_linux-amd64

注:下载慢,可以使用第三方工具,迅雷下载,然后上传至服务器!

二、给所有工具设置执行权限

yang@master:~$ sudo chmod +x cfssl*
yang@master:~$ ls
cfssl-certinfo_linux-amd64 cfssljson_linux-amd64 cfssl_linux-amd64

三、生成默认CA配置json配置文件

yang@master:~$ sudo cfssl print-defaults config > ca-config.json
yang@master:~$ sudo cfssl print-defaults csr > ca-csr.json
yang@master:~$ ls
ca-config.json ca-csr.json cfssl-certinfo_linux-amd64 cfssljson_linux-amd64 cfssl_linux-amd64

A、ca-config.json文件内容:

{
"signing": {
"default": {
"expiry": "168h"
},
"profiles": {
"www": {
"expiry": "8760h",
"usages": [
"signing",
"key encipherment",
"server auth"
]
},
"client": {
"expiry": "8760h",
"usages": [
"signing",
"key encipherment",
"client auth"
]
}
}
}
}

B、ca-csr.json文件内容:

{
"CN": "example.net",
"hosts": [
"example.net",
"www.example.net"
],
"key": {
"algo": "ecdsa",
"size": 256
},
"names": [
{
"C": "US",
"L": "CA",
"ST": "San Francisco"
}
]
}

四、生成CA证书

A、首先修改ca-config.json文件内容:

yang@master:~$ cat ca-config.json
{
"signing":{
"default":{
"expiry":"876000h"
},
"profiles":{
"kubernetes":{
"usages":[
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry":"876000h"
}
}
}
}

字段说明:

ca-config.json:可以定义多个 profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书时使用某个 profile;

signing:表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE;

server auth:表示client可以用该 CA 对server提供的证书进行验证;

client auth:表示server可以用该CA对client提供的证书进行验证;

B、修改ca-csr.json文件内容:

yang@master:~$ cat ca-csr.json
{
"CN": "CA",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "xian",
"L": "shanxi",
"O": "Kubernetes",
"OU": "System"
}
]
}

CN:Common Name,etcd 从证书中提取该字段作为请求的用户名 (User Name);浏览器使用该字段验证网站是否合法;

O:Organization,etcd 从证书中提取该字段作为请求用户所属的组 (Group);

这两个参数在后面的kubernetes启用RBAC模式中很重要,因为需要设置kubelet、admin等角色权限,那么在配置证书的时候就必须配置对了。

C、生产CA证书和私钥

命令:cfssl gencert -initca ca-csr.json | cfssljson -bare ca

yang@master:~$ cfssl gencert -initca ca-csr.json | cfssljson -bare ca
2021/12/15 02:29:56 [INFO] generating a new CA key and certificate from CSR
2021/12/15 02:29:56 [INFO] generate received request
2021/12/15 02:29:56 [INFO] received CSR
2021/12/15 02:29:56 [INFO] generating key: rsa-2048
2021/12/15 02:29:56 [INFO] encoded CSR
2021/12/15 02:29:56 [INFO] signed certificate with serial number 297280955480032641265224573714844144324135690602

注:如果生成权限问题,将此目录设置为777权限。

D 、查看生产证书文件

yang@master:~$ ls
ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem cfssl-certinfo_linux-amd64 cfssljson_linux-amd64 cfssl_linux-amd64

说明:

根证书文件: ca.pem
根证书私钥: ca-key.pem
根证书申请文件: ca.csr (csr是不是client ssl request?)

五、创建 etcd证书签名请求(etcd-csr.json)

yang@master:~$ sudo nano etcd-csr.json
{
"CN": "etcd",
"hosts": [
"127.0.0.1",
"192.168.1.106",
"192.168.1.108",
"192.168.1.109"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "xian",
"L": "shanxi",
"O": "k8s",
"OU": "System"
}
]
}

说明:

如果 hosts 字段不为空则需要指定授权使用该证书的 IP 或域名列表,由于该证书后续被 etcd 集群使用,所以填写IP即可。 因为本次部署etcd是三台,那么则需要填写三台服务器的IP地址。

六、使用ca证书签发etcd证书

yang@master:~$ sudo cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes etcd-csr.json | cfssljson -bare etcd
2021/12/15 02:30:47 [INFO] generate received request
2021/12/15 02:30:47 [INFO] received CSR
2021/12/15 02:30:47 [INFO] generating key: rsa-2048
2021/12/15 02:30:47 [INFO] encoded CSR
2021/12/15 02:30:47 [INFO] signed certificate with serial number 655402234356318897903430018951458950558238874375

A、查看生成的etcd证书

yang@master:~$ ls
ca-config.json ca-csr.json ca.pem cfssljson_linux-amd64 etcd.csr etcd-key.pem
ca.csr ca-key.pem cfssl-certinfo_linux-amd64 cfssl_linux-amd64 etcd-csr.json etcd.pem

注:可以看出多了etcd.csr、etcd-key.pem、etcd.pem

B、将TLS 认证文件拷贝至证书目录下(三台机器都拷贝)

yang@master:~$ sudo cp etcd*.pem ca*.pem /opt/kubernetes/ssl/
yang@master:/opt/kubernetes/ssl$ ls
ca-key.pem ca.pem etcd-key.pem etcd.pem
yang@master:/opt/kubernetes$ sudo chmod 777 ssl
yang@master:/opt/kubernetes/ssl$ sudo scp etcd*.pem ca*.pem yang@192.168.1.108:/opt/kubernetes/ssl
yang@192.168.1.108's password:
etcd-key.pem 100% 1679 857.4KB/s 00:00
etcd.pem 100% 1424 2.2MB/s 00:00
ca-key.pem 100% 1679 2.6MB/s 00:00
ca.pem 100% 1298 2.1MB/s 00:00
yang@master:/opt/kubernetes/ssl$ sudo scp etcd*.pem ca*.pem yang@192.168.1.109:/opt/kubernetes/ssl
The authenticity of host '192.168.1.109 (192.168.1.109)' can't be established.
ECDSA key fingerprint is SHA256:Spztpaw4tS1mizoKjV0+ly+WA9/9N7RxahpsMjAr6U8.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.1.109' (ECDSA) to the list of known hosts.
yang@192.168.1.109's password:
etcd-key.pem 100% 1679 2.3MB/s 00:00
etcd.pem 100% 1424 1.2MB/s 00:00
ca-key.pem 100% 1679 4.0MB/s 00:00
ca.pem 100% 1298 2.3MB/s 00:00
yang@node1:/opt/kubernetes/ssl$ ll # node1 中文件
total 24
drwxrwxrwx 2 root root 4096 Dec 15 04:13 ./
drwxr-xr-x 4 root root 4096 Dec 15 03:55 ../
-rw------- 1 yang yang 1679 Dec 15 04:13 ca-key.pem
-rw-r--r-- 1 yang yang 1298 Dec 15 04:13 ca.pem
-rw------- 1 yang yang 1679 Dec 15 04:13 etcd-key.pem
-rw-r--r-- 1 yang yang 1424 Dec 15 04:13 etcd.pem
yang@node2:/opt/kubernetes/ssl$ ll # node2 中文件
total 24
drwxrwxrwx 2 root root 4096 Dec 15 04:16 ./
drwxr-xr-x 4 root root 4096 Dec 15 03:56 ../
-rw------- 1 yang yang 1679 Dec 15 04:16 ca-key.pem
-rw-r--r-- 1 yang yang 1298 Dec 15 04:16 ca.pem
-rw------- 1 yang yang 1679 Dec 15 04:16 etcd-key.pem
-rw-r--r-- 1 yang yang 1424 Dec 15 04:16 etcd.pem
yang@node2:/opt/kubernetes/ssl$

注:拷贝文件目录及目标文件目录,都要给777权限,否则会报权限错误。

此时,etcd证书生成完成!

etcd使用Cfssl生成自签证书(pem)的更多相关文章

  1. OpenSSL生成证书详解 如何使用OpenSSL生成自签证书 转载

    原文:http://my.oschina.net/fajar/blog/425478 使用OpenSSL生成自签证书(亲测) 一,前言 读过我博客的小伙伴儿都知道,我一般在前言里面会提到为什么写这篇博 ...

  2. 填坑:Windows下使用OpenSSL生成自签证书(很简单,一个晚上搞明白的,让后来者少走弯路)

    最近在学习中发现openssl 中有个坑,所有的教程都是openssl genrsa -des3 -out private.key 1024,但是产生的证书,npm start 之后就报错如下: er ...

  3. openssl实现CA自签证书和颁发数字证书

    1. 测试环境准备: CA签署服务器:192.168.2.181 WEB服务器:192.168.2.180 CA安装openssl  WEB服务器使用nginx 2. CA生成自签证书: 2.1 为C ...

  4. Ubuntu 18.04使用OpenSSL自签证书(证书支持多IP及多域名,谷歌浏览器无警告)

    前言 在HTTPS数据传输的过程中,需要用SSL/TLS对数据进行加密和解密,以保证网络传输过程中数据的机密性.HTTPS协议可以大致分为两个部分:其一是协商密钥,首先当Client向Web Serv ...

  5. 【加解密】使用CFSSL生成证书并使用gRPC验证证书

    写在前面的话 CFSSL是CloudFlare旗下的PKI/TLS工具.可以用于数字签名,签名验证和TLS证书捆绑的命令行工具和HTTP API服务器. 是使用golang语言开发的证书工具. 官方地 ...

  6. 使用cfssl生成自签证书

    安装ssl wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 wget https://pkg.cfssl.org/R1.2/cfssljson_li ...

  7. nginx ssl 自签证书实验

    两台服务器 11.11.11.3     (生成证书然后到CA服务上注册) 11.11.11.4    (nginx服务.CA证书签发) 1.建立CA服务器(11.3) .在CA上生成私钥文件 在/e ...

  8. APNS 生成证书 p12 或者 PEM

    .net环境下须要p12文件,下面是生成p12过程 1.$ openssl x509 -in aps_development.cer -inform der -out PushChatCert.pem ...

  9. 搭建Apache服务器并使用自签证书实现https访问

    实验环境:两台Centos7.2的虚拟机,一台作CA服务器,一台作Apache服务器,此处安装httpd-2.4.6的版本. 1)CA服务器 # 私钥一般存放位置:/etc/pki/CA/privat ...

  10. [证书服务器 第二篇] 基于OpenSSL 在 CentOS6 系统上 搭建自签证书服务,并应用于Web容器

    第一部分:概述 .. 第二部分:环境准备 1 操作系统 CentOS 6.x 2 安装openssl yum install -y openssl 3 安装jdk 从官网下载JDK http://ww ...

随机推荐

  1. dayjs取 本周、上周、本月、上月、本季度、上季度时间段

    let dateTimes = [ { id: 1, name: '本周', start_time: dayjs().startOf('week').add(1, 'day').format('YYY ...

  2. CentOS Linux release 7.6 zabbix5.0 安装

    # zabbix 安装关方文档 https://www.zabbix.com/cn/download?zabbix=5.0&os_distribution=centos&os_vers ...

  3. WampServer3.0服务器端开启ssl认证后重启Apache失败,解决办法

    最近项目中需要访问网站的 https 地址,于是进行部署,什么事情都是想起来简单,做起来难,想着一天就能搞定的事儿,结果前后折腾了三天. 现在把部署的经历记录下来,希望对朋友们有所帮助. 1.在西部数 ...

  4. 4-20mA换算为实际值公式

    Ov = [(Osh - Osl) * (Iv - Isl) / (Ish - Isl)] + Osl 实际工程量 = [((实际工程量)的高限 - (实际工程量)的低限)*(lv - 4) / (2 ...

  5. Python的入门学习Day 10~13——form”夜曲编程“

    Day 10 time:2021.8.7. ​ 今天本来打算学习时发现手机应该拿去充电了,再上完J课程之后发现时间确实只留到了晚上呢 .但幸好,以我多天的敲代码的牢固根基(哈哈哈),我最终还是弥补回来 ...

  6. 软件架构易用性在软件UI中的体现

    软件架构易用性在软件UI中的体现 贾硕航 (石家庄铁道大学,河北省石家庄市,050000) 摘要:易用性(usability)是一种以使用者为中心的设计概念,易用性设计的重点在于让产品的设计能够符合使 ...

  7. pytest-2 之前后置及 conftest.py+fixture+yield实现用例前后置

    pytest测试用例及类级别的前置,可以和unittest一样进行定义,也可以把该前置方法或类定义到conftest.py里,而在需要前置的方法的参数里加上该前置名作为参数: pytest有两种方式来 ...

  8. sdio 移植st官方例程 stm32f103

    第一步:建立驱动文件 建立sdio_sdcard.h和sdio_sdcard.c,并将这两个文件添加到MDK工程中,如下图 第二步:移植官方例程 1.找到STM32F10x_StdPeriph_Lib ...

  9. springcloud(二) - 服务调用Feign&openFeign

    功能介绍:动态代理的方式,简化请求其他服务的开发成本,更好得对请求地址组装.接受返回信息.返回参数解析等  Feign和OpenFeign区别: OpenFeign实现了Feign的基础功能,同时支持 ...

  10. SpringBoot_Thymeleaf项目开发

    用Springboot集成Thymeleaf,开发一个前后端不分离的Web项目,记录下每个步骤:(IDEA版) 一.项目初始化: 1.打开idea,以次点击 File -- New -- Projec ...