cfssl
本文章介绍如何使用cfssl
创建自签名证书
参考etcd
官方提供的教程: 点我跳转
主要流程:
- 创建 ca 证书
- 使用 ca 证书签发我们需要的证书
开始之前
下载地址: https://github.com/cloudflare/cfssl/releases
在下载地址中选择自己系统平台的版本, 比如这里平台为linux amd64
则下载如下版本
1 | cfssljson_1.6.1_linux_amd64 |
需要下载cfssl
和cfssljson
两个可执行程序, 并修改文件名并赋予可执行权限
1 | -rw-r--r-x 1 root root 16659824 Sep 26 17:21 cfssl |
保存cfssl
的默认配置, 用于修改参数替换使用
1 | mkdir ~/cfssl && cd ~/cfssl |
两个配置文件默认的内容如下:
ca-config.json
ca 签名参数配置文件ca-csr.json
用来生成 CA 证书签名请求(CSR)的 JSON 配置文件
1 | // ca-config.json |
1 | // ca-csr.json |
ca-csr.json
中字段的释义
CN: Common Name,浏览器使用该字段验证网站是否合法,一般写的是域名,浏览器使用该字段验证网站是否合法
C:Country, 国家
ST:State,州,省
L: Locality,地区,城市
O:Organization Name,组织名称,公司名称
OU:Organization Unit Name,组织单位名称,公司部门
配置CA参数
修改ca-config.json
配置文件, 配置CA
的签发参数, 修改默认的www
为server
并添加peer
和修改默认的有效期为43800h (5 years)
, 如下结果配置
客户端证书(client): 由客户端使用, 用于服务端对客户端进行验证
服务端证书(server): 由服务端使用, 用于客户端验证服务端身份
对等证书(peer): 由
etcd
成员机器使用, 用于相互通信
1 | { |
修改ca-csr.json
配置证书请求文件
1 | { |
生成CA的文件
1 | cfssl gencert -initca ca-csr.json | cfssljson -bare ca - |
执行完上面的命令将会生成如下文件
ca.csr: ca证书签名请求文件
ca.pem: ca 的证书
ca-key.pem: ca 的密钥
1 | [root@localhost cfssl-file]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca - |
生成服务端证书
首先得到默认的配置文件, 并命名为server.json
1 | cfssl print-defaults csr > server.json |
对于server
端的证书,重点需要修改CN
和hosts
两部分参数
CN: 主机名\域名
hosts: 允许使用该证书的IP地址\域名\主机名
1 | ... |
执行下面的命令开始生成
1 | cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=server server.json | cfssljson -bare server |
和ca
的执行操作基本一致,产生下面的文件
1 | -rw-r--r-- 1 root root 505 Sep 27 11:22 server.csr # new |
server.pem: 服务端的证书
server-key.pem: 服务端的密钥
执行的命令参数释义:
-ca=ca.pem : 指定 ca 的证书
-ca-key=ca-key.pem : 指定 ca 的密钥
-config=ca-config.json : 指定 ca 的签名配置
-profile=server : ca 的签名配置文件中
profiles
中的key
值, 指定使用哪个配置参数进行签名
生成对等证书
主要用于etcd
集群配置, 所以hosts
中必须包含其他节点的IP地址或者主机名
1 | cfssl print-defaults csr > etcd.json |
内容修改如下
1 | ... |
执行下面的命令
1 | cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=peer etcd.json | cfssljson -bare etcd |
生成客户端证书
1 | cfssl print-defaults csr > client.json |
客户端证书可以忽略hosts
参数,仅设置CN
即可
1 | ... |
执行下面的命令
1 | cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=client client.json | cfssljson -bare client |