etcd 使用 cfssl 证书
Table of Contents
etcd推荐使用cfssl工具来生成证书进行验证
cfssl安装
以x86_64 Linux为例
1 | mkdir ~/bin |
离线安装的情况,直接把两个文件下载下来重命名即可
生成ca证书
生成ca的配置文件
1 | mkdir ~/cfssl |
三大证书类型介绍:
1 | client certificate: is used to authenticate client by server. For example etcdctl, etcd proxy, fleetctl or docker clients. |
三大证书都由CA证书进行签发
其中ca-config.json中的expiry: 这个属性是指定证书的有效时间
然后执行命令生成CA证书
1 | cfssl gencert -initca ca-csr.json | cfssljson -bare ca - |
会得到ca-key.pem、ca.csr、ca.ppem。
其中 Please keep ca-key.pem file in safe.
This key allows to create any kind of certificates within your CA.
csr证书在这里面用不到。至此,CA证书生成完毕,后面利用CA证书来生成server证书和client端的证书。
server证书
生成server证书的配置文件
1 | cfssl print-defaults csr > server.json |
server.json的重要属性有:
1 | ... |
以etcd为例子,后面可以通过
curl -L --cacert /root/openssl/dd_ca.crt https://c2ccacf259ed:4001/version进行访问
执行命令生成server端证书
1 | cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=server server.json | cfssljson -bare server |
得到server-key.pem 、server.csr 、server.pem三个文件
client证书
生成client配置文件
1 | cfssl print-defaults csr > client.json |
client证书可以忽略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 |
得到client-key.pem、client.csr、client.pem
至此所有证书生成完毕
etcd使用cfssl
etcd通过命令行标志或环境变量获取几个证书相关的配置选项:
客户端到服务器通信
1 | --cert-file = <path>:用于与etcd的SSL/TLS连接的证书。设置此选项时,advertise-client-urls可以使用HTTPS模式。 |
对等通信
对等通信–服务器到服务器/集群
对等选项的工作方式与客户端到服务器选项的工作方式相同:
1 | --peer-cert-file = <path>:用于对等体之间SSL / TLS连接的证书。这将用于侦听对等体地址以及向其他对等体发送请求。 |
如果提供客户端到服务器或对等体证书,则还必须设置密钥。所有这些配置选项也可通过环境变量ETCD_CA_FILE,ETCD_PEER_CA_FILE等获得。
两个例子
(1) 带client证书
1 | 启动方式 |
这里面c2ccacf259ed在前面的server.json文件hosts中进行了声明,同时需要在client端的/etc/hosts文件中声明c2ccacf259ed对应的ip地址。
(2) 不带client证书
1 | 启动方式 |
参考
cfssl:
https://coreos.com/os/docs/latest/generate-self-signed-certificates.html
openssl:
http://www.cnblogs.com/breg/p/5923604.html
etcd的api: