Linux使用CFSSL自签TLS证书

CFSSL是CloudFlare开源的一款PKI/TLS工具(PKI = Publick Key Infrastructure 公钥基础设施 )。 CFSSL 包含一个命令行工具 和一个用于 签名,验证并且捆绑TLS证书的 HTTP API 服务。 使用Go语言编写。

项目地址: https://github.com/cloudflare/cfssl

下载地址: https://pkg.cfssl.org/

参考链接: https://blog.cloudflare.com/how-to-build-your-own-public-key-infrastructure/

⒈安装CFSSL

# 生成证书
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64

# 利用Json生成证书
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64

# 查看证书信息的工具
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/local/bin/cfssl
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo

⒋验证指令

cfssl --help

5. 生成一个配置模板

cfssl print-defaults config > config.json

//默认生成的模板文件如下:

{
     "signing": {  //签名
         "default": {
             "expiry": "168h"  //默认过期时间
         },
         "profiles": {
             "www": {
                 "expiry": "8760h",
                 "usages": [
                     "signing",
                     "key encipherment",
                     "server auth"
                 ]
             },
             "client": {
                 "expiry": "8760h",
                 "usages": [
                     "signing",
                     "key encipherment",
                     "client auth"
                 ]
             }
         }
     }
 }

6. 生成证书信息文件

cfssl print-defaults csr > csr.json

# 默认生成的模板文件如下:
{
     "CN": "example.net",  //标识具体的域
     "hosts": [  //使用该证书的域名
         "example.net",
         "www.example.net"
     ],
     "key": {  //加密方式,一般RSA 2048
         "algo": "ecdsa",
         "size": 256
     },
     "names": [  //证书包含的信息,例如国家、地区等
         {
             "C": "US",
             "L": "CA",
             "ST": "San Francisco"
         }
     ]
 }

6. 示例:  生成配置模板及证书信息,如生成CA颁发机构的根证书

cat > ca-config.json <<EOF
 {
     "signing":{
         "default":{
             "expiry":"87600h"
         },
         "profiles":{
             "kubernetes":{
                 "expiry":"87600h",
                 "usages":[
                     "signing",
                     "key encipherment",
                     "server auth",
                     "client auth"
                 ]
             }
         }
     }
 }
 EOF
 
 cat > ca-csr.json <<EOF
 {
     "CN":"kubernetes",
     "key":{
         "algo":"rsa",
         "size":
     },
     "names":[
         {
             "C":"CN",
             "L":"Hebei",
             "ST":"Zhangjiakou",
             "O":"k8s",
             "OU":"System"
         }
     ]
 }
 EOF


# 使用证书信息文件生成证书
 cfssl gencert -initca ca-csr.json | cfssljson -bare ca -

7. 示例: CA机构给别人的证书,服务端的证书

# 别人的申请证书的信息
cat > server-csr.json << EOF
 {
     "CN":"kubernetes",
     "hosts":[
         "127.0.0.1",
         "192.168.0.211",
         "192.168.0.212",
         "192.168.0.213",
         "10.10.10.1",
         "kubernetes",
         "kubernetes.default",
         "kubernetes.default.svc",
         "kubernetes.default.svc.cluster",
         "kubernetes.default.svc.cluste.local"
     ],
     "key":{
         "algo":"rsa",
         "size":
     },
     "names":[
         {
             "C":"CN",
             "L":"Hebei",
             "ST":"Zhangjiakou",
             "O":"k8s",
             "OU":"System"
         }
     ]
 }
 EOF

# CA根据申请的信息生成证书
cfssl gencert -ca=ca.pem 
              -ca-key=ca-key.pem 
              -config=ca-config.json 
              -profile=kubernetes 
              server-csr.json | cfssljson -bare server

8. 示例:  CA给别人的信息, 集群管理员


# 申请证书的信息
cat > admin-csr.json <<EOF
 {
     "CN":"admin",
     "hosts":[],
     "key":{
         "algo":"rsa",
         "size":
     },
     "names":[
         {
             "C":"CN",
             "L":"Hebei",
             "ST":"Zhangjiakou",
             "O":"system:masters",
             "OU":"System"
         }
     ]
 }
 EOF


# CA根据申请信息颁发的证书
 cfssl gencert -ca=ca.pem 
               -ca-key=ca-key.pem 
               -config=ca-config.json 
               -profile=kubernetes 
               admin-csr.json | cfssljson -bare admin

9. 示例:kube-proxy申请的证书

# 申请证书的信息
cat > kube-proxy-csr.json <<EOF
 {
     "CN":"system:kube-proxy",
     "hosts":[],
     "key":{
         "algo":"rsa",
         "size":
     },
     "names":[
         {
             "C":"CN",
             "L":"Hebei",
             "ST":"Zhangjiakou",
             "O":"k8s",
             "OU":"System"
         }
     ]
 }
 EOF


# CA根据申请信息颁发的证书
 cfssl gencert -ca=ca.pem 
               -ca-key=ca-key.pem 
               -config=ca-config.json 
               -profile=kubernetes 
               kube-proxy-csr.json | cfssljson -bare kube-proxy

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值