• 【grpc、https、oauth2等认证专栏实战7:使用cfssl来制作证书介绍


    已发表的技术专栏(订阅即可观看所有专栏)
    0  grpc-go、protobuf、multus-cni 技术专栏 总入口

    1  grpc-go 源码剖析与实战  文章目录

    2  Protobuf介绍与实战 图文专栏  文章目录

    3  multus-cni   文章目录(k8s多网络实现方案)

    4  grpc、oauth2、openssl、双向认证、单向认证等专栏文章目录


    1、cfssl 介绍

    使用cfssl创建证书

    1.1、主要流程

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

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

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

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

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

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

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

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

    如下,内容:

    在这里插入图片描述

    简单叙述一下,校验原理?
    在这里插入图片描述

    ca-conf.json文件,创建一个应该就可以了。

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

    在这里插入图片描述

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

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

    经测试这个命令等价于

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

    或者

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

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

    单独执行cfssl gencert -initca ca-csr.json命令时,效果如下:
    在这里插入图片描述
    备注

    上面图片里,最下面的红色字体写错了。
    没有存储到文件里。

    cfssl gencert -initca ca-csr.json | cfssljson -bare cc
    
    • 1

    通过结合cfssljson -bare cc命令,将生成的相关证书文件存储下来。
    cc,是生成证书的名称前缀

    在这里插入图片描述

    3、制作证书

    3.1、制作根证书

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

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

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

    {
        "CN":"www.golang.com",
        "key": {
            "algo": "rsa",
            "size": 2048
        },
        "names": [
            {
                "C": "CN",
                "ST": "beijing",
                "L": "beijing",
                "O": "baidu",
                "OU": "bigdata"
            }
        ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    3.1.3、创建根证书、根密钥

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

    在这里插入图片描述

    3.2、服务器端

    3.2.1、服务器端证书申请配置文件server-csr.json

    {
        "CN":"www.golang-server.com",
        "hosts":[
           "127.0.0.1",
           "www.golang-server.cn",
           "*.golang-server.*"
        ],
        "key":{
           "algo":"rsa",
           "size":2048
       },
       "names":[
           {
               "C":"CN",
               "ST":"beijing",
               "L":"beijing",
               "O":"baidu",
               "OU":"bigdata"
            }
        ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    在这里插入图片描述

    IP,域名都可以设置多个。

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

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

    在这里插入图片描述

    3.3、制作客户端证书

    3.3.1、客户端申请文件

    {
       "CN":"www.golang-client.com",
       "hosts":[],
       "key":{
           "algo":"rsa",
           "size":2048
       },
       "names":[
           {
            "C":"CN",
             "ST":"beijing",
             "L":"beijing",
             "O":"baidu",
             "OU":"bigdata"
            }
        ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    3.3.2、创建客户端证书、密钥

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

    在这里插入图片描述

    3.4、如何查看证书

    无论是openssl还是cfssl,默认创建的都是x509类型的证书。

    因此,也可以使用openssl来查看证书

    3.4.1、使用openssl来查看证书信息

    openssl x509 -in server.pem -noout -text
    
    • 1

    在这里插入图片描述

    在这里插入图片描述

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

    在这里插入图片描述

    4、可以通过命令行来动态设置SAN模块,如设置域名,IP

    可以通过–hostname参数,动态的设置,
    参考方式如下:

    cfssl gencert -ca=ca.pem -ca-key=ca-key.pem  -config=ca-conf.json -profile=client -hostname=www.golang-node1.com,www.golang-node2.com,127.0.0.1,10.211.55.10 node-csr.json | cfssljson -bare node -
    
    • 1

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    5、openssl 跟 cfssl相比?

    我个人更加偏向用cfssl命令,

    • 可以通过一个命令一次性生成证书和证书密钥
    • 配置文件更加友好

    而openssl的配置文件,不好学。可能需要通过多次命令才能创建完证书和证书密钥。

  • 相关阅读:
    Java数据输入
    微信视频号怎么下载视频?
    【Monorepo实战】pnpm+turbo+vitepress构建公共组件库文档系统
    Vue中判断语句和循环语句的基础用法 v-if和v-for的注意事项
    群晖下虚拟机编译部署WOW服务端TrinityCore
    软件设计模式系列之十九——中介者模式
    论文阅读--On optimization methods for deep learning
    cuda和cuDNN的安装
    计算机视觉——使用OpenCV GrabCut算法从图像中移除背景
    分页存储的原理——非连续存储分配
  • 原文地址:https://blog.csdn.net/u011582922/article/details/126339600