gpt4 book ai didi

ssl - 使用 TLS 的 etcdctl 失败,curl 成功

转载 作者:太空宇宙 更新时间:2023-11-03 13:25:26 29 4
gpt4 key购买 nike

我有一个 etcd 服务器运行在一个 docker 容器中,实现了一个大小为 etcd 的集群。它是通过发现服务初始化的。当我使用不安全的连接时,一切都很好。但是,当我按照描述切换到 TLS 安全通信时 here etcdctl 无法工作。但是,cli curl 命令可以正常工作。

这是一个使用 TLS 和自签名证书从容器中通过 etcdctl 访问 etcd 的示例。使用 openssl 客户端,我可以验证我的 TLS 通信...

# openssl s_client -connect 172.17.42.1:2379 -cert /etc/ssl/infra/cert.pem -key /etc/ssl/infra/key.pem -CAfile /etc/ssl/infra/ca.pem -tls1

CONNECTED(00000003)
depth=1 C = GB, O = acme.net, OU = Some Services, L = London, ST = England, CN = Ecme CA
verify return:1
depth=0 O = autogenerated, OU = etcd cluster, L = the internet, CN = etcd
verify return:1
---
Certificate chain
0 s:/O=autogenerated/OU=etcd cluster/L=the internet/CN=etcd
i:/C=GB/O=acme.net/OU=Some Services/L=London/ST=England/CN=Acme CA
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDlzCCAoGgAwIBAgIIYf3y1uiPRu8wCwYJKoZIhvcNAQELMH0xCzAJBgNVBAYT
AkdCMRUwEwYDVQQKEwxVbmJsb2Nrci5uZXQxHjAcBgNVBAsTFUdlbyBMb2NhdGlv
....

但尝试使用 etcdctl 来做一个成员列表

root@2aff45e6c288:/# etcdctl --debug -C https://172.17.42.1:2379 --ca-file /etc/ssl/infra/ca.pem --cert-file /etc/ssl/infra/cert.pem --key-file /etc/ssl/infra/key.pem member list
start to sync cluster using endpoints(https://172.17.42.1:2379)
cURL Command: curl -X GET https://172.17.42.1:2379/v2/members
got endpoints(https://1.2.3.4:2379) after sync
Cluster-Endpoints: https://1.2.3.4:2379
cURL Command: curl -X GET https://1.2.3.4:2379/v2/members
client: etcd cluster is unavailable or misconfigured

所以有些东西很无聊(尽管它似乎已经与 etcd 集群对话并找到了成员(只有一个)

一个简单的 curl 命令就如我所料的那样工作

root@2aff45e6c288:/# curl --cacert /etc/ssl/infra/ca.pem --cert /etc/ssl/infra/cert.pem --key /etc/ssl/infra/key.pem -X GET https://172.17.42.1:2379/v2/members
{"members":[{"id":"2b3b4588bc2bae1e","name":"default","peerURLs":["http://1.2.3.4:2380"],"clientURLs":["https://1.2.3.4:2379"]}]}

我不知道下一步该做什么。 etcd 和 etcdctl 都是 v 2.0.9

最佳答案

我自己解决了这个问题 - 我的 TLS 证书不正确。让我感到困惑的是 etcdctl 向集群发出了两个请求,而 curl 只发出了一个。 Etcdctl 使用作为 -C 提供的地址查询集群成员以发现广告端点,然后针对所请求数据的返回地址之一发出第二个请求。 Curl 只是查询为数据提供的地址(很明显)。我的证书对于广告端点无效(即上面使用的 1.2.3.4)。因此,使用 curl 验证 etcd 集群不是很可靠。

关于ssl - 使用 TLS 的 etcdctl 失败,curl 成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33519814/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com