• cfssl使用方法重新整理说明


    下载安装:

    1. #下载cfssl、cfssl-json、cfssl-certinfo文件
    2. wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64  -O /usr/bin/cfssl
    3. wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -O /usr/bin/cfssljson
    4. wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -O /usr/bin/cfssl-certinfo
    5. #把可执行权限授予cfssl、cfssljson、cfssl-certinfo
    6. 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是用来存储不同模板的。

    如下,内容:

    1. {
    2. "signing": {
    3. "default": { # 默认配置
    4. "expiry": "876000h" # 签名的有效期
    5. },
    6. "profiles": { # 由于每个证书造出来,至少都得有一个应用场景,那么profiles参数,就是来定义这些场景的
    7. "server": { # server,只是一个名称,可根据业务场景自行设定名称
    8. "usages": [
    9. "signing", # 表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE;
    10. "key encipherment", # 表示该证书用于秘钥加密
    11. "server auth", # 表示该证书是服务器端证书, client可以用该 CA 对server提供的证书进行验证
    12. ],
    13. "expiry": "876000h"
    14. },
    15. "client": { # client,只是一个名称,可根据业务场景自行设定名称
    16. "usages": [
    17. "signing",
    18. "key encipherment",
    19. "client auth" # 表示该证书是客户端证书, server可以用该CA对client提供的证书进行验证
    20. ],
    21. "expiry": "876000h"
    22. },
    23. "peer": { # peer,只是一个名称,可根据业务场景自行设定名称
    24. "usages": [
    25. "signing",
    26. "key encipherment",
    27. "server auth",
    28. "client auth" # 由于这里设定了2个,所以该证书服务端和客户端都能用
    29. ],
    30. "expiry": "876000h"
    31. }
    32. }
    33. }
    34. }

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

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

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

    1. {
    2. "signing": {
    3. "default": {
    4. "expiry": "876000h"
    5. },
    6. "profiles": {
    7. "server": {
    8. "usages": [
    9. "signing",
    10. "key encipherment",
    11. "server auth"
    12. ],
    13. "expiry": "876000h"
    14. },
    15. "client": {
    16. "usages": [
    17. "signing",
    18. "key encipherment",
    19. "client auth"
    20. ],
    21. "expiry": "876000h"
    22. },
    23. "peer": {
    24. "usages": [
    25. "signing",
    26. "key encipherment",
    27. "server auth",
    28. "client auth"
    29. ],
    30. "expiry": "876000h"
    31. }
    32. }
    33. }
    34. }

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

    1. {
    2. "CN": "Kubernetes",
    3. "key": {
    4. "algo": "rsa",
    5. "size": 2048
    6. },
    7. "names": [
    8. {
    9. "C": "China",
    10. "ST": "ShanXi",
    11. "L": "XiAn",
    12. "O": "Kubernetes",
    13. "OU": "CA"
    14. }
    15. ]
    16. }

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

    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:

    1. {
    2. "CN": "service",
    3. "hosts": [
    4. "127.0.0.1",
    5. "127.0.0.2",
    6. "127.0.0.3",
    7. "*.youku.com"
    8. ],
    9. "key": {
    10. "algo": "rsa",
    11. "size": 2048
    12. },
    13. "names": [
    14. {
    15. "C": "China",
    16. "ST": "ShanXi",
    17. "L": "XiAn",
    18. "O": "Kubernetes",
    19. "OU": "CA"
    20. }
    21. ]
    22. }

    注意,这里比上面的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:

    1. {
    2. "CN": "mytest1",
    3. "key": {
    4. "algo": "rsa",
    5. "size": 2048
    6. },
    7. "names": [
    8. {
    9. "C": "China",
    10. "ST": "ShanXi",
    11. "L": "XiAn",
    12. "O": "Kubernetes",
    13. "OU": "CA"
    14. }
    15. ]
    16. }

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

    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详解

  • 相关阅读:
    大数据(9f)Flink双流JOIN
    Linux基础命令1——Linux的命令格式与命令分类
    【LeetCode每日一题】——1217.玩筹码
    自然语言处理:提取长文本进行文本主要内容(文本意思)概括 (两种方法,但效果都一般)
    JAVA动态代理
    Qunar风控安全产品的探索之路
    JetBrains ReSharper Ultimate 2023.2.2
    [《南国雪下》闲笔记事集]2010年12月15日 记雪
    软件测试的发展趋势
    解决ubuntu报错:No such file or directory
  • 原文地址:https://blog.csdn.net/m0_46900715/article/details/130841325