一、理解mTLS
TLS在web端使用的非常广泛,针对传输的内容进行加密,能够有效的防止中间人攻击。双向TLS(Two way TLS/Mutual TLS,简称mTLS)的主要使用场景是在B2B和Server-toServer的场景中,以支持服务与服务之间的身份认证与授权。


mTLS主要负责服务与服务之间传输层面的认证,具体实现在sidecar中,在具体进行请求时,讲经历如下过程:
1)客户端发出的请求将被发送到客户端sidecar
2)客户端sidecar与服务端sidecar开始mTLS握手,在握手的同时,客户端sidecar讲进行secure naming check的额外操作,对服务端中的server identity(存储在证书中的SAN)进行检查,以确保其能够运行服务,该操作能够防止一些常见HTTP/TCP的流量劫持攻击。
3)在完成身份认证以及授权之后,客户端和服务端开始建立连接进行通信

Istio提供如下几种mTLS身份认证模式,在不同的场景下进行使用:
1)PERMISSIVE:同时支持密文传输和明文传输,则不管是在Istio管理下的Pod还是在Istio管理外的Pod,相互之间的通信畅通无阻。PERMISSIVE模式的主要用途是在用户迁移的过程中,服务与服务之间也仍然能够通信,例如部分workload并未注入sidecar。对于刚接触Istio的人来说是非常友好的,官方也建议在完成迁移之后调整为STRICT模式
2)STRICT:workload只支持密文传输
3)DISABLE:关闭Mutual TLS,从安全的角度而言,官方不建议在没有其他安全措施的情况下使用该模式
4)UNSET:具体的策略将从父级配置中继承(命名空间或网络层面),如果父级没有进行相应的配置,则使用PERMISSIVE模式。

二、配置TLS
1)查看curl是否支持LibreSSL
➜ ~ curl --version | grep LibreSSL
curl 7.64.1 (x86_64-apple-darwin20.0) libcurl/7.64.1 (SecureTransport) LibreSSL/2.8.3 zlib/1.2.11 nghttp2/1.41.0
2)生成证书和密钥
➜ ~ openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=example Inc./CN=example.com' -keyout example.com.key -out example.com.crt
Generating a 2048 bit RSA private key
................................................................................................................................

本文介绍了mTLS在服务间通信中的重要作用,详细阐述了Istio中mTLS的工作原理和三种身份认证模式:PERMISSIVE、STRICT和DISABLE。通过步骤指导,包括查看curl支持、生成证书、创建服务、配置Gateway、Secret以及虚拟服务,展示了如何配置和测试mTLS。此外,还提到了如何在不同命名空间和全局范围内设置对等认证策略。
最低0.47元/天 解锁文章
1173

被折叠的 条评论
为什么被折叠?



