公钥基础设施(PKI)/CFSSL证书生成工具的使用(2)

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/local/bin/cfssl
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo

cfssl工具,子命令介绍:

bundle: 创建包含客户端证书的证书包

genkey: 生成一个key(私钥)和CSR(证书签名请求)

scan: 扫描主机问题

revoke: 吊销证书

certinfo: 输出给定证书的证书信息, 跟cfssl-certinfo 工具作用一样

gencrl: 生成新的证书吊销列表

selfsign: 生成一个新的自签名密钥和 签名证书

print-defaults: 打印默认配置,这个默认配置可以用作模板

serve: 启动一个HTTP API服务

gencert: 生成新的key(密钥)和签名证书

◾-ca:指明ca的证书

◾-ca-key:指明ca的私钥文件

◾-config:指明请求证书的json文件

◾-profile:与-config中的profile对应,是指根据config中的profile段来生成证书的相关信息

ocspdump

ocspsign

info: 获取有关远程签名者的信息

sign: 签名一个客户端证书,通过给定的CA和CA密钥,和主机名

ocsprefresh

ocspserve

创建认证中心(CA)

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

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

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

创建一个文件ca-csr.json:

{
  "CN": "www.linuxidc.com",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "linuxidc",
      "OU": "ops"
    }
  ]
}

术语介绍:

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

C: Country, 国家

L: Locality,地区,城市

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

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

ST: State,州,省

生成CA证书和CA私钥和CSR(证书签名请求):

# cfssl gencert -initca ca-csr.json | cfssljson -bare ca  ## 初始化ca
# ls ca*
ca.csr  ca-csr.json  ca-key.pem  ca.pem

该命令会生成运行CA所必需的文件ca-key.pem(私钥)和ca.pem(证书),还会生成ca.csr(证书签名请求),用于交叉签名或重新签名。

小提示:

使用现有的CA私钥,重新生成:

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

使用现有的CA私钥和CA证书,重新生成:

cfssl gencert -renewca -ca cert.pem -ca-key key.pem

查看cert(证书信息):

# cfssl certinfo -cert ca.pem

查看CSR(证书签名请求)信息:

# cfssl certinfo -csr ca.csr

配置证书生成策略

配置证书生成策略,让CA软件知道颁发什么样的证书。

# vim ca-config.json
{
  "signing": {
    "default": {
      "expiry": "8760h"
    },
    "profiles": {
      "etcd": {
        "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ],
        "expiry": "8760h"
      }
    }
  }
}

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

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

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

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

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

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

cfssl常用命令:

cfssl gencert -initca ca-csr.json | cfssljson -bare ca ## 初始化ca

cfssl gencert -initca -ca-key key.pem ca-csr.json | cfssljson -bare ca ## 使用现有私钥, 重新生成

cfssl certinfo -cert ca.pem

cfssl certinfo -csr ca.csr

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/4d960749ce6c42ff772828522ef4bd5f.html