CFSSL是CloudFlare开源的一款PKI/TLS工具。 CFSSL 包含一个命令行工具 和一个用于 签名,验证并且捆绑TLS证书的 HTTP API 服务。 使用Go语言编写。

CFSSL包括:

一组用于生成自定义 TLS PKI 的工具

cfssl程序,是CFSSL的命令行工具

multirootca程序是可以使用多个签名密钥的证书颁发机构服务器

mkbundle程序用于构建证书池

cfssljson程序,从cfssl和multirootca程序获取JSON输出,并将证书,密钥,CSR和bundle写入磁盘

PKI借助数字证书和公钥加密技术提供可信任的网络身份。通常,证书就是一个包含如下身份信息的文件:

证书所有组织的信息

公钥

证书颁发组织的信息

证书颁发组织授予的权限,如证书有效期、适用的主机名、用途等

使用证书颁发组织私钥创建的数字签名

1.github

https://github.com/cloudflare/cfssl

2.下载

wget https://github.com/cloudflare/cfssl/releases/download/v1.5.0/cfssl-certinfo_1.5.0_linux_amd64 
wget https://github.com/cloudflare/cfssl/releases/download/v1.5.0/cfssljson_1.5.0_linux_amd64 
wget https://github.com/cloudflare/cfssl/releases/download/v1.5.0/cfssl_1.5.0_linux_amd64 
chmod +x cfssl*
for x in cfssl*; do mv $x ${x%*_1.5.0_linux_amd64};  done
mv cfssl* /usr/bin

3.生成ca证书

建立集群CA keys 与Certificates

创建认证中心(CA)

CFSSL可以创建一个获取和操作证书的内部认证中心。

运行认证中心需要一个CA证书和相应的CA私钥。任何知道私钥的人都可以充当CA颁发证书。因此,私钥的保护至关重要。

生成CA证书和私钥(root 证书和私钥)

4.初始化

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

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

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

这个策略,有一个默认的配置,和一个profile,可以设置多个profile,这里的profile是etcd。

默认策略,指定了证书的有效期是一年(8760h)

etcd策略,指定了证书的用途

signing, 表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE

server auth:表示 client 可以用该 CA 对 server 提供的证书进行验证

client auth:表示 server 可以用该 CA 对 client 提供的证书进行验证

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

CN: Common Name,浏览器使用该字段验证网站是否合法,一般写的是域名。非常重要。浏览器使用该字段验证网站是否合法

C: Country, 国家

L: Locality,地区,城市

O: Organization Name,组织名称,公司名称

OU: Organization Unit Name,组织单位名称,公司部门

ST: State,州,省

生成配置模板及证书信息

   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":2048
       },
       "names":[
           {
               "C":"CN",
               "L":"Hebei",
               "ST":"Zhangjiakou",
               "O":"k8s",
               "OU":"System"
           }
       ]
   }
   EOF

5.使用证书信息文件生成证书

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

6.生成服务端的配置模板及证书信息

   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":2048
       },
       "names":[
           {
               "C":"CN",
               "L":"Hebei",
               "ST":"Zhangjiakou",
               "O":"k8s",
               "OU":"System"
           }
       ]
   }
   EOF

7.使用证书信息生成证书

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

8.集群管理员通过该证书访问集群

   cat > admin-csr.json <<EOF
   {
       "CN":"admin",
       "hosts":[],
       "key":{
           "algo":"rsa",
           "size":2048
       },
       "names":[
           {
               "C":"CN",
               "L":"Hebei",
               "ST":"Zhangjiakou",
               "O":"system:masters",
               "OU":"System"
           }
       ]
   }
   EOF

9.生成证书

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin
  cat > kube-proxy-csr.json <<EOF
   {
       "CN":"system:kube-proxy",
       "hosts":[],
       "key":{
           "algo":"rsa",
           "size":2048
       },
       "names":[
           {
               "C":"CN",
               "L":"Hebei",
               "ST":"Zhangjiakou",
               "O":"k8s",
               "OU":"System"
           }
       ]
   }
   EOF

10.生成证书

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy

参考链接:
https://www.linux78.com/index.php?title=Cfssl#github
https://kulong0105.cn/linux/2017/06/10/an-intorduction-about-cert

原文地址:http://www.cnblogs.com/even160941/p/16890124.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性