grpc、https、oauth2等认证专栏实战7:使用cfssl来制作证书介绍
1、cfssl 介绍已发表的技术专栏(订阅即可观看所有专栏)0 grpc-go、protobuf、multus-cni 技术专栏 总入口1 grpc-go 源码剖析与实战 文章目录2 Protobuf介绍与实战 图文专栏 文章目录3 multus-cni 文章目录(k8s多网络实现方案)4 grpc、oauth2、openssl、双向认证、单向认证等专栏文章目录1、cfssl 介
已发表的技术专栏(订阅即可观看所有专栏)
0 grpc-go、protobuf、multus-cni 技术专栏 总入口
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的配置文件,不好学。可能需要通过多次命令才能创建完证书和证书密钥。
下一篇文章
更多推荐
所有评论(0)