使用cfssl生成自签证书
阅读原文时间:2023年07月08日阅读:1

安装ssl

wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64
mv cfssl_linux-amd64 /usr/bin/cfssl
mv cfssljson_linux-amd64 /usr/bin/cfssljson
mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo
cfssl version

证书类型
client certificate: 用于服务端认证客户端,例如etcdctl、etcd proxy、fleetctl、docker客户端
server certificate: 服务端使用,客户端以此验证服务端身份,例如docker服务端、kube-apiserver
peer certificate: 双向证书,用于etcd集群成员间通信

初始化json文件
生成json模板文件

cfssl print-defaults config > ca-config.json
cfssl print-defaults csr > ca-csr.json

自签CA
编辑 ca-config.json

profiles:指定了不同角色的配置信息
服务端使用server auth(TLS Web Server Authentication X509 V3 extension),客户端使用client auth(TLS Web Server Authentication X509 V3 extension)
expiry:指定了证书的过期时间为87600小时(即10年)

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

自定义ca-csr.json

CN即common name,hosts可以指定多个(泛)域名以及多个IP地址
key:指定了加密算法,一般使用rsa(size:2048)

{
"CN": "example.net",
"hosts": [
"example.net",
"www.example.net",
"127.0.0.1"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "US",
"L": "CA",
"ST": "San Francisco"
}
]
}

生成CA证书和私钥

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

生成ca.pem、ca.csr、ca-key.pem(CA私钥,需妥善保管)

生成服务器和客户端证书
同样,首先生成默认配置文件:

cfssl print-defaults csr > server.json

修改如下部分:

"CN": "test.coreos.com",
"hosts": [
"server.coreos.org",
"*.coreos.org"
],

cfssl支持SAN(Subject Alternative Name),它是X.509中定义的一个扩展,使用了SAN字段的SSL证书,可以扩展此证书支持的域名,即一个证书可以支持多个不同域名的解析。
然后使用刚才生成的CA来给服务器签署证书,运行如下命令来生成服务端证书:

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

-profile指定了使用ca-config.json中的profile
最后的server给定了生成的文件名,将得到如下三个文件:server.csr、server-key.pem和server.pem
类似的,可以生成客户端证书,配置文件的hosts字段指定为空即可

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

参考链接:https://blog.csdn.net/sujosu/article/details/101520260

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章