ETCD 安全模式
二、用 HTTPS 的客户端到服务器端传输安全
为此,准备好 CA 证书(ca.crt
)和签名密钥对(server.crt
,?server.key
)。
Let us configure etcd to provide simple HTTPS transport security step by step:
让我们一步一步配置 etcd 来提供简单的 HTTPS 传输安全:
$ etcd --name infra0 --data-dir infra0 \
--cert-file=/path/to/server.crt --key-file=/path/to/server.key \
--advertise-client-urls=https://127.0.0.1:2379 --listen-client-urls=https://127.0.0.1:2379
应该可以启动,可 Java 开源项目【ali1024.coding.net/public/P7/Java/git】 以通过使用 HTTPS 访问 etcd 来测试配置:
$ curl --cacert /path/to/ca.crt https://127.0.0.1:2379/v2/keys/foo -XPUT -d value=bar -v
该命令应该显示握手成功。 由于我们用自己的证书颁发机构使用自签名证书,CA 必须使用--cacert
选项传递给 curl。 另一种可能性是将 CA 证书添加到系统的可信证书目录(通常位于 /etc/pki/tls/certs
或 /etc/ssl/certs
)中。
OSX 10.9+ 用户: curl 7.30.0 在 OSX 10.9+ 不能理解通过命令行传递的证书. 取而代之的,将虚拟 ca.crt 直接导入 keychain 或给 curl 添加-k
标志来忽略错误。 要测试没有-k'标志,运行
open ./fixtures/ca/ca.crt` 并按照提示进行操作。 测试后请删除此证书! 如果有解决方法,请告诉我们。
三、用 HTTPS 客户端证书的客户端到服务器端认证
现在我们已经给了 etcd 客户端验证服务器身份和提供传输安全性的能力。我们也可以使用客户端证书来防止对 etcd 未经授权的访问。
客户端将向服务器提供证书,服务器将检查证书是否由 CA 签名,并决定是否服务请求。
为此需要第一个示例中提到的相同文件,以及由同一证书颁发机构签名的客户端(client.crt
,?client.key
) 密钥对。
$ etcd --name infra0 --data-dir infra0 \
--client-cert-auth --trusted-ca-file=/path/to/ca.crt --cert-file=/path/to/server.crt --key-file=/path/to/server.key \
--advertise-client-urls https://127.0.0.1:2379 --listen-client-urls https://127.0.0.1:2379
现在尝试发送与上面相同的请求到服务器:
$ curl --cacert /path/to/ca.crt https://127.0.0.1:2379/v2/keys/foo -XPUT -d value=bar -v
该请求会被服务器拒绝:
...
routines:SSL3_READ_BYTES:sslv3 alert bad certificate
...
要想请求成功,我们需要将 CA 签名的客户端证书发送给服务器:
$ curl --cacert /path/to/ca.crt --cert /path/to/client.crt --key /path/to/client.key \
-L https://127.0.0.1:2379/v2/keys/foo -XPUT -d value=bar -v
输出为:
...
SSLv3, TLS handshake, CERT verify (15):
...
TLS handshake, Finished (20)
还有来自服务器的响应:
{
"action": "set",
"node": {
"createdIndex": 12,
"key": "/foo",
"modifiedIndex": 12,
"value": "bar"
}
}
四、集群中的传输安全和客户端证书
《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源 ----------------
对于对等通信,etcd 支持与上述相同的模型,这意味着集群中的 etcd 成员之间的通信。
Assuming we have our?ca.crt
?and two members with their own keypairs (member1.crt
?&?member1.key
,?member2.crt
?&?member2.key
) signed by this CA, we launch etcd as follows:
假设我们有我们的 ca.crt
?和两个成员,他们有这个 CA 签名的自己的 keypairs(member1.crt
&member1.key
,member2.crt
&member2.key
),我们如下启动 etcd:
DISCOVERY_URL=... # from https://discovery.etcd.io/new
member1
$ etcd --name infra1 --data-dir infra1 \
--peer-client-cert-auth --peer-trusted-ca-file=/path/to/ca.crt --peer-cert-file=/path/to/member1.crt --peer-key-file=/path/to/member1.key \
--initial-advertise-peer-urls=https://10.0.1.10:2380 --listen-peer-urls=https://10.0.1.10:2380 \
--discovery ${DISCOVERY_URL}
member2
$ etcd --name infra2 --data-dir infra2 \
--peer-client-cert-auth --peer-trusted-ca-file=/path/to/ca.crt --peer-cert-file=/path/to/member2.crt --peer-key-file=/path/to/member2.key \
--initial-advertise-peer-urls=https://10.0.1.11:2380 --listen-peer-urls=https://10.0.1.11:2380 \
--discovery ${DISCOVERY_URL}
etcd 成员将组成一个集群,集群中成员之间的所有通信将使用客户端证书进行加密和验证。etcd 的输出将显示其连接的地址使用 HTTPS。
最后
俗话说,好学者临池学书,不过网络时代,对于大多数的我们来说,我倒是觉得学习意识的觉醒很重要,这是开始学习的转折点,比如看到对自己方向发展有用的信息,先收藏一波是一波,比如如果你觉得我这篇文章 ok,先点赞收藏一波。这样,等真的沉下心来学习,不至于被找资料分散了心神。慢慢来,先从点赞收藏做起,加油吧!
另外,给大家安排了一波学习面试资料:
以上就是本文的全部内容,希望对大家的面试有所帮助,祝大家早日升职加薪迎娶白富美走上人生巅峰!
评论