已发表的技术专栏(订阅即可观看所有专栏)
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

或者

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

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

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

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

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

通过结合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"
                ]
            }
        }
    }
}

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"
        }
    ]
}

3.1.3、创建根证书、根密钥

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

在这里插入图片描述

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"
        }
    ]
}

在这里插入图片描述

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 -

在这里插入图片描述

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"
        }
    ]
}

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 -

在这里插入图片描述

3.4、如何查看证书

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

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

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

openssl x509 -in server.pem -noout -text

在这里插入图片描述

在这里插入图片描述

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 -

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5、openssl 跟 cfssl相比?

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

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

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

下一篇文章

   https单向认证介绍

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐