0
点赞
收藏
分享

微信扫一扫

ETCD 安全模式,java高级工程师面试

前言

前段时间,我向一位在阿里的朋友寻求进大厂的秘诀,他分享给我一份阿里内部资料——JAVA核心进阶手册,仔细翻阅一番才知道里面收纳整理的知识可真是齐全,不得不来感叹一番…

我将JAVA核心进阶手册大致分为以下5篇内容

  • 基础:多线程+网络+数据结构与算法+MySQL+Tomcat
  • 框架:设计模式+Spring+SpringMVC+MyBatis
  • 分布式架构:限流(ZK/Nginx)+缓存(Redis/MongoDB/Memcached)+通讯(MQ/kafka)
  • 微服务架构:RPC+SpringBoot+SpringCloud+Dubbo+K8s
  • 调优:JVM+MySQL+Tomcat

2、对等通讯 (服务器到服务器 / 集群):

对等选项的工作方式与客户端到服务器的选项相同:

如果提供了客户端到服务器或对等证书,则必须设置密钥。所有这些配置选项也可以通过环境变量 “ETCD_CA_FILE”,“ETCD_PEER_CA_FILE”等提供。

二、用HTTPS的客户端到服务器端传输安全


为此,准备好CA证书(ca.crt)和签名密钥对(server.crtserver.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

应该可以启动,可以通过使用 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.crtclient.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面试真题解析+Java核心总结学习笔记+最新全套讲解视频+实战项目源码》开源

最后

image

image

image

image

image

image

中…(img-7xfAK0qO-1649565167517)]

[外链图片转存中…(img-GnH66tdr-1649565167518)]

[外链图片转存中…(img-ta147pez-1649565167518)]

[外链图片转存中…(img-PPUuKnNy-1649565167518)]

[外链图片转存中…(img-Z7Ll7hiA-1649565167519)]

[外链图片转存中…(img-Jy8jRxJS-1649565167519)]

举报

相关推荐

0 条评论