前言

本文中所出现的域名、组织、相关政治敏感内容,均属于临时调试、测试环境中用来帮助理解记忆的因素,与实际无关,相关文件均已永久删除,仅供学习相关科学技术使用,请勿用于错误的模仿和非法用途

该方式生成的服务器证书、CA不受到任何公共平台、大型企业(比如微软、苹果、谷歌)的信任,也不会因此获得域名解析权,可能对你的财产、人身安全造成负面影响

在昨天又Renew一下2021年初的老文章 https://www.blueskyxn.com/202101/3744.html 今天又有群友发了几个新玩具给我,我一看,有点意思,好像也不麻烦,于是就来学习一波。

本次使用的玩具是 https://github.com/cloudflare/cfssl 看上去够大牌。

流程

配置环境->下载程序->配置CA配置文件->生成CA相关材料->配置服务器证书配置文件->生成服务器证书相关材料->使用(微调材料来获取需要的PEM、KEY等文件/配置信任)。

环境用Linux就行了,我是Cent OS 7+宝塔面板SSH。

下载

https://github.com/cloudflare/cfssl/releases 直接把要的二进制文件全部下载到任一目录,我是全部放在了  /root/cfssl 这个文件夹中

你可以手动、BT面板下载、Wget下载等方式,丢进去就行,也别搞什么累死累活的命令安装、编译安装,哪有那么麻烦,简单来说,能动就行。

记得文件名要去掉版本号。主要的文件是 cfssl 和 cfssljson 这两个。

配置CA配置文件

先调一下权限

chmod +x cfssl*

如果还有报错就去调一下777/775/755

然后生成一下默认配置来

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

然后默认配置参考如图

然后你可以根据自己的情况进行微调、测试、学习、使用。比如测试配置文件如下

请注意,这里的O会被当作(宝塔面板)“证书品牌”,这里的CN会被当作签发者

一般来说,加密用RSA2048即可。

备注词条信息(ca-config)

  • kubernetes:表示该配置(profile)的用途是为kubernetes生成证书及相关的校验工作
    • signing:表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE
    • server auth:表示可以该CA 对 server 提供的证书进行验证
    • client auth:表示可以用该 CA 对 client 提供的证书进行验证
  • expiry:也表示过期时间,如果不写以default中的为准

备注词条信息(ca-csr)

  • CN: Common Name,浏览器使用该字段验证网站是否合法,一般写的是域名。非常重要。
  • key:生成证书的算法
  • hosts:表示哪些主机名(域名)或者IP可以使用此csr申请的证书,为空或者""表示所有的都可以使用(本例中没有hosts字段)
  • names:一些其它的属性
  • C: Country, 国家
  • ST: State,州或者是省份
  • L: Locality Name,地区,城市
  • O: Organization Name,组织名称,公司名称(在常用于指定Group,进行RBAC绑定)
  • OU: Organization Unit Name,组织单位名称,公司部门

 生成CA证书

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

记得要在文件目录执行命令(cd进去)

然后就能看到生成了几个ca开头的文件(csr、key、pem)

请注意,这个并非服务器证书,塞到宝塔SSL的效果如图

检查一下内容,效果如图

./cfssl-certinfo -cert ca.pem

配置服务器证书配置文件

把CA的配置文件改改,调整一下内容,重命名一下,效果如图。第一个CN是SSL证书主域名。

生成服务器证书相关材料

./cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www gov-csr.json | ./cfssljson -bare gov

请注意核对文件名字,尤其是 profile的格式,=后面的第一个字段是CA-config中的配置类型,默认是www,然后空格接csr文件名。如果配置类型没写或者写错就会如图所示,

正确的如图所示

然后就生成了这些文件,csr、key和pem

使用

服务器证书申请得到的pem丢证书,key丢私钥即可(可以从begin区分)

host一下看看预览效果

 

默认是不会被任何平台信任的,但是你可以手动添加信任。

比如说chrome在这里

管理证书-受信任的根证书颁发机构-导入

可以看到要求这些文件

之前拿到了CA的pem和key,把CA的pem改为crt丢进去就行了,当然,把pem和key合并后改名crt也可以,我测试时是合并后丢进去,没啥问题。

然后高级不需要动

这里弄好之后,chrome就不会跳提示了。

 

然后清理实验环境