cfssl

“活着,已经是最深厚的福报了,因为没死,才能偿还往昔的债业”

CFSSL is CloudFlare's PKI toolkit, and, among other things, it's useful for generating Certificate Signature Requests, or CSRs. A CSR is what you give to a Certificate Authority; they'll sign it and give you back a certificate that you install on your webserver. CFSSL can generate both a private key and certificate request.

这就是最官方的解释了,本想从wiki上获取一些cfssl的前世今生,可惜wiki上还没有这个词条,既然没有太多的历史背景,就直接从使用上看看这个工具的能力:

cfssl是通过go语言写就,通过读取json文件配置的证书生成时所需的各种参数,这就是对cfssl的最基本了解,下面看两段配置文件定义:

config.json - config.json可以理解为证书功能性的配置,例如这里主要添加了3个profile,每个profile下面定义了证书的过期时间和使用范围。在这里放置ca,server和client三份profile,是为了后面更好的对比生成证书的结果

ca.json - ca.json和server.json都可以看作是证书内容性的配置,例如这里面主要是一些字段值的定义,当然了还有很重要的私钥属性配置。

server.json

配置完成了,下面看看实际生成证书的效果,首先生成根证书:

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

接着生成服务端证书:

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

(cfssljson,这个工具官方的说明是将cfssl生成的json格式的结果,提取出来保存为文件)

上面生成了ca和server两份证书,来看一下两者的内容,ca证书,关注一些红框里面的证书生效时间为5年

server证书,生效时间是2000个小时,说明我们config.json中server profile的设定是有效的。

对比ca.pem证书固定的5年有效期,如果在创建ca的时候也指定config和profile会是什么结果,用下面的这段语句测试一下:

cfssl gencert -initca --config=config.json --profile=ca ca.json | cfssljson -bare ca

发现ca的时间一成不变永远是5年的期限,在官网内也没有找到相关的说明,难道是代码内固化了吗?不管怎样,至少所有证书的开始时间都是当前的UTC时间,这就足够了,如果证书即将到期,如法再生成一次,将旧的文件替换掉就可以接着使用了,不是吗。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据