cfssl使用方法重新整理说明

news2024/12/23 9:15:41

下载安装:

#下载cfssl、cfssl-json、cfssl-certinfo文件
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64  -O /usr/bin/cfssl
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -O /usr/bin/cfssljson
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -O /usr/bin/cfssl-certinfo

#把可执行权限授予cfssl、cfssljson、cfssl-certinfo
chmod +x /usr/bin/cfssl*

验证:

cfssl -h

1、cfssl 介绍                                                                                          

​​​​CFSSL是 CloudFlare 的 PKI 工具包,除此之外,它还可以​​​用于生成证书签名。

2、主要流程                                                                                            

  • 1、需要先创建根证书
  • 2、利用根证书,来颁发子证书
    • 如果将证书用在服务器端一侧,就可以称为服务器端证书
    • 如果将证书用在客户端一侧,就可以称为客户端证书
    • 依次类推

3、创建证书时,用到的配置文件简单介绍                                              

创建根证书时,需要两个配置文件,如

  • xxx-conf.json
    • 制作证书模板配置文件
    • 证书颁发机构,颁发证书时,需要参考不同模板的要求进行证书创建
  • xxx-csr.json
    • 申请证书配置文件
    • 证书申请者申请证书时,要填写的基本信息

4、证书模板配置文件ca-conf.json                                                         

根证书在创建自己的过程中或者利用根证书在创建子证书的过程中,

不是随便创建的,是根据模板来创建的,不同的模板可以出不同的特点的证书。

那么,ca-conf.json是用来存储不同模板的。

如下,内容:

{
  "signing": {
    "default": {     # 默认配置
      "expiry": "876000h"  # 签名的有效期
    },
    "profiles": {  # 由于每个证书造出来,至少都得有一个应用场景,那么profiles参数,就是来定义这些场景的
      "server": {  # server,只是一个名称,可根据业务场景自行设定名称
        "usages": [  
          "signing",  # 表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE;
          "key encipherment",  # 表示该证书用于秘钥加密
          "server auth",  # 表示该证书是服务器端证书, client可以用该 CA 对server提供的证书进行验证
        ],
        "expiry": "876000h"
      },
      "client": {  # client,只是一个名称,可根据业务场景自行设定名称
        "usages": [
          "signing",
          "key encipherment",
          "client auth"   # 表示该证书是客户端证书, server可以用该CA对client提供的证书进行验证
        ],
        "expiry": "876000h"
      },
      "peer": {  # peer,只是一个名称,可根据业务场景自行设定名称
        "usages": [
          "signing",
          "key encipherment",
          "server auth",
          "client auth"   # 由于这里设定了2个,所以该证书服务端和客户端都能用
        ],
        "expiry": "876000h"
      }
    }
  }
}

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

这里注意,上面的配置文件,在真实使用的时候,是不准加注释的。回报如下错误:

所以,需要将ca-conf.json 文件所有注释去掉:

{
  "signing": {
    "default": {
      "expiry": "876000h"
    },
    "profiles": {
      "server": {
        "usages": [
          "signing",
          "key encipherment",
          "server auth"
        ],
        "expiry": "876000h"
      },
      "client": {
        "usages": [
          "signing",
          "key encipherment",
          "client auth"
        ],
        "expiry": "876000h"
      },
      "peer": {
        "usages": [
          "signing",
          "key encipherment",
          "server auth",
          "client auth"
        ],
        "expiry": "876000h"
      }
    }
  }
}

5、证书申请文件ca-csr.json                                                                  

{
  "CN": "Kubernetes",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "China",
      "ST": "ShanXi",
      "L": "XiAn",
      "O": "Kubernetes",
      "OU": "CA"
    }
  ]
}

一般来说,申请证书的文件就是长这样子的。

csr 文件字段解释:

  • CN(Common Name): apiserver 从证书中提取该字段作为请求的用户名 (User Name)
  • key{}.algo:用于定义加密算法
  • key{}.size:长度
  • names[].C (Country):国家
  • names[].ST (State):州或省
  • names[].L  (Locality):地区或城市(如城市或城镇名称)
  • names[].O(Organization): 组织。一般apiserver 从证书中提取该字段作为请求用户所属的组 (Group)
  • names[].OU (Organization Unit):组织单位,如负责拥有密钥的部门; 它也可以用于“做生意”(DBS)的名称

首先,明确一点:该​​"names"​​值实际上是名称对象的列表。每个名称对象应至少包含一个“C”,“L”,“O”,“OU”或“ST”值(或这些的任意组合。也就是说,不必要全部都得有。

其次,由于这里是 CA 证书,是签发其它证书的根证书,这个证书密钥不会分发出去作为 client 证书,所有组件使用的 client 证书都是由 CA 证书签发而来,所以 CA 证书的 CN 和 O 的名称并不重要,后续其它签发出来的证书的 CN 和 O 的名称才是有用的。

证书申请时,都要提供类似的信息,可以通过配置文件xxx-csr.json,也可以命令行创建时,通过参数设置。

6、cfssl gencert -initca ca-csr.json | cfssljson -bare ca - 介绍

首先,这个命令,是用来造根证书,根秘钥的。然后,先把根证书和根秘钥造好之后,之后,才会使用根证书和根秘钥去给服务端,客户端去造认证证书。

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

是一样的效果,这里注意下,参数:cfssljson只是整理json格式,-bare主要的意义在于命名。具体来说,-bare后面给啥内容,那么生成的证书的名字就叫啥内容。

ca-csr.json, 申请证书时,需要向证书颁发机构,提交证书拥有者的一些信息。

单独执行cfssl gencert -initca ca-csr.json命令时,效果如下:

 这样只是相当于打印到控制台,并不保存成文件。

再执行完整的命令,结果如下:

 7、创建服务器端证书,证书密钥                                                           

 首先,先创建服务端的申请证书文件server-csr.json:

{
  "CN": "service",
  "hosts": [
      "127.0.0.1",
      "127.0.0.2",
      "127.0.0.3",
      "*.youku.com"
  ],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "China",
      "ST": "ShanXi",
      "L": "XiAn",
      "O": "Kubernetes",
      "OU": "CA"
    }
  ]
}

注意,这里比上面的ca-csr.json多了一个字段hosts。

hosts包含的是授权范围,不在此范围的的节点或者服务使用此证书就会报证书不匹配错误。另外,hosts也可配置区域,即一个证书的网站可以是*.youku.com也是可以是*.google.com。

接下来,生成证书的命令为:

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-conf.json -profile=server server-csr.json | cfssljson -bare server -

参数解释:

  • -ca: 根证书
  • -ca-key: 根秘钥
  • -config: 根证书的配置文件(里面定义了很多场景)
  • -profile: 选择根证书配置文件里的一个场景
  • server-csr.json : 申请证书的对象的相关信息配置文件
  • -bare:制造的证书文件的文件名称(或前缀)

执行结果如下:

 8、制作客户端证书                                                                                 

一样的先造一个客户端的申请证书的配置文件client-csr.json:

{
  "CN": "mytest1",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "China",
      "ST": "ShanXi",
      "L": "XiAn",
      "O": "Kubernetes",
      "OU": "CA"
    }
  ]
}

和制作服务端证书类似,只需要改个别参数即可,命令如下:

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-conf.json -profile=client client-csr.json | cfssljson -bare client -

执行结果如下:

 9、使用cfssl-certinfo来查看证书信息                                                   

命令:cfssl-certinfo -cert server.pem

 ok,差不多就这些了.......

参考文档:grpc、https、oauth2等认证专栏实战7:使用cfssl来制作证书介绍_码二哥的博客-CSDN博客

CFSSL使用方法重新整理说明_51CTO博客_cfssl详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/564123.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

低代码开发:构建企业数字化生态系统的秘密武器!

目前,我们正处于数字化时代,而企业数字化早已是大势所趋,也是因为企业数字化转型是提高企业效率与竞争力的必经之路。 发展背景 近年来,伴随着人工智能、大数据分析技术、云计算等领域的迅速发展,不少企业开始正视数字…

【How to Design Translation Prompts for ChatGPT: An Empirical Study 论文略读】

How to Design Translation Prompts for ChatGPT: An Empirical Study 论文略读 INFORMATIONAbstract1 Introduction2 Background3 Experiments3.1 Prompt Design3.2 Experimental Setup3.2.1 Datasets3.2.2 Baselines and Evaluation Metrics 3.3 Multilingual Translation3.4…

接入支付宝沙箱环境

1、这里有几个重要数据要拿到,一个是支付宝的公钥和私钥,一个是支付的网关,和支付的APPID。这几个数据是要写到代码中的 官方手册:文档地址 1.1 配置沙箱应用环境 https://openhome.alipay.com/develop/sandbox/app 1.2 配置接口…

Git忽略文件的几种方法,以及.gitignore文件的忽略规则

Git忽略文件的几种方法,以及.gitignore文件的忽略规则 .gitignore文件定义Git全局的.gitignore文件Git 忽略规则Git忽略规则的优先级.gitignore文件忽略规则常用匹配示例: 关于.gitignore规则不生效的问题 不忽略没有后缀名的文件搜索电脑里没有后缀的文…

请问你如何理解以下的歌词“unravel - TK from 凛冽时雨 (TK from 凛として時雨)为什么很多人说崖山海战以后无中国

目录 请问你如何理解以下的歌词“unravel - TK from 凛冽时雨 (TK from 凛として時雨) 为什么很多人说崖山海战以后无中国 请问你如何理解以下的歌词“unravel - TK from 凛冽时雨 (TK from 凛として時雨) 以下是我对《unravel - TK from 凛冽时雨》这首歌词的理解&#xff1…

Hadoop部署伪分布式

伪分布式模式也是只需要一台机器,但是与本地模式的不同,伪分布式使用的是分布式的思想,具有完整的分布式文件存储和分布式计算的思想。只不过在进行存储和计算的时候涉及到的相关的守护进程都运行在同一台机器上,都是独立的Java进…

《LKD3粗读笔记》(15)进程地址空间

进程地址空间:内核除了管理本身的内存外,还必须管理用户空间中进程的内存,这个内存就是进程地址空间,即系统中每个用户空间进程所看到的内存。Linux操作系统采用虚拟内存技术,系统中的所有进程之间以虚拟方式共享内存。…

面试都不会造火箭,还想拿20k,过于离谱

前段时间公司缺人,也面了许多测试,一开始瞄准的就是中级水准,当然也没指望能来大牛,提供的薪资在15-20k这个范围,来面试的人有很多,但是平均水平真的让人很失望。看了简历很多上面都是写有4年工作经验&…

iOS App外包开发的内存泄露解决

在iOS应用开发中,内存泄露是一个常见的问题。内存泄露会导致应用程序占用越来越多的内存,最终可能导致应用程序崩溃。为了解决这个问题,可以使用以下工具和方法来查找和修复内存泄露。今天和大家分享这方面的知识,希望对大家有所帮…

AttributeError: module ‘gym‘ has no attribute ‘benchmark_spec‘解决办法

报错如下: 我安装的gym版本是gym-0.26.2 报错原因:gym版本太高了,需要降低版本 pip install gym0.9.0 -i https://pypi.douban.com/simple

@Qualifier注解详解

本文来说下Qualifier注解使用 文章目录 Autowired注解Qualifier注解Primary注解 Resource注解 Autowired注解 spring Autowire 的注解默认是按类型注入bean 如果存在多个实现类,可以使用 Qualifier注解 Qualifier注解 Primary注解 存在多个实现类,也可以…

支持双向充放电的高效Buck-Boost控制器——TMI5810

传统方案下,MCU需要分别控制“充电电路”和“放电电路”的功能模块实现电池包充放电,整个过程相当复杂,电路设计也比较繁琐。 拓尔微TMI5810是一颗集双向充放电和高效率于一身的同步升降压电源管理芯片,能有效解决多节锂电池充放电…

RAM Sequential

前段时间,在微信公众号上偶然看到一篇很不错的技术分享文章:《南湖处理器DFT设计范例》。文中详细介绍了中科院计算所的RISC-V处理器实施的DFT设计。 去年,也基于一款处理器应用过Share Test Bus技术,但在memory界面fault测试的问…

基于 ESP32 创建 HTTP Server 服务器,支持载入文件到服务器,并对载入文件进行删除管理

软件编程指南参见:HTTP 服务器 测试准备 任意一款 ESP32 系列开发板2.4GHz 路由器热点准备各种格式的文件 测试软件 可基于 esp-idf/examples/protocols/http_server /file_serving 例程进行测试 测试步骤 1、软件配置 只需要设置 ESP32 连接的 2.4GHz 的 WiFi…

linux 部署Nginx

1,进入官网下载Nginx资源: 官网下载:http://nginx.org/en/download.html 2、下载 nginx-1.20.2 3、上传服务器 /opt目录 4、解压nginx-1.20.2.tar.gz 到当前目录 tar -zxvf nginx-1.20.2.tar.gz 5、配置基本信息,命令如下 #配置config…

香港服务器如何操作域名解析让网站上线?

​  网站上线是一个需要多个步骤的过程,其中之一就是解析IP。在这个过程中,您需要将您的网站域名解析到香港服务器IP地址,以便访问者可以通过域名来访问您的网站。 下面是解析IP的一般步骤: 1. 获取服务器IP地址:首先…

回收站文件恢复教程:如何找回误删除的重要文件

在使用电脑的过程中,误删除文件是一件很常见的事情,尤其是对于那些不太熟悉电脑操作的人来说,这种情况更为普遍。当重要文件误删除之后,人们最希望的就是能够快速地找回它。其实,在 Windows 操作系统中,回收…

View的工作原理

View的工作原理 当Activity对象被创建的时候,会将DecorView添加到Window中,同时创建ViewRootImpl对象并将它和DecorView关联起来 ViewRoot对应于ViewRootImpl类,它是连接WindowManager和DecorView的纽带,View的三大流程均是通过ViewRoot完成的 View的绘制是从ViewRoot的perf…

如何编写快速的SQL查询(一)——MySQL8.0优化器查询优化处理与样例

当希望MySQL能够以更高的性能运行查询时,最好的办法就是弄清楚MySQL是如何优化和执行查询的。一旦理解了这一点,很多查询优化工作实际上就是遵循一些原则让优化器能够按照预想的合理的方式运行。 MySQL是如何执行一个查询的过程的?根据图8-1可…

Java基础 变量与数据类型(类型转换)

变量 为什么需要变量 一花一世界,如果把一个程序看做一个世界或一个社会的话,那么变量就是程 序世界的花花草草、万事万物。即,变量是程序中不可或缺的组成单位,最基 本的存储单元。 初识变量 变量的概念 内存中的一个存储区域…