写点什么

ETCD 安全模式

  • 2022 年 4 月 14 日
  • 本文字数:2025 字

    阅读完需:约 7 分钟

二、用 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.crtmember1.keymember2.crtmember2.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,先点赞收藏一波。这样,等真的沉下心来学习,不至于被找资料分散了心神。慢慢来,先从点赞收藏做起,加油吧!


另外,给大家安排了一波学习面试资料:




以上就是本文的全部内容,希望对大家的面试有所帮助,祝大家早日升职加薪迎娶白富美走上人生巅峰!

用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
ETCD 安全模式_Java_爱好编程进阶_InfoQ写作平台