赞
踩
TLS(Transport Layer Security)和 mTLS(mutual TLS)都是用于加密通信的协议,用于保护数据在网络上的传输安全。它们在保护通信方面有一些区别:
主要区别在于 TLS 通常是单向验证,而 mTLS 是双向验证。mTLS 提供了更高级别的安全性,因为它不仅验证服务器的身份,还验证客户端的身份,确保了通信的完整性和安全性。
在网络安全领域,mTLS 通常用于要求更严格的安全标准的场景,如微服务之间的通信、API 访问控制等。通过使用 mTLS,可以确保通信双方的身份验证和通信数据的加密,提高了通信的安全性和可靠性。
TLS(Transport Layer Security)和 mTLS(mutual TLS)在网络通信中有不同的使用场景,根据安全需求和通信模型的不同,选择合适的加密方式非常重要:
TLS 使用场景:
mTLS 使用场景:
总的来说,TLS 适用于大多数常规的加密通信场景,而 mTLS 则适用于对通信安全性要求更高、需要双向身份验证的场景,如微服务架构、API 访问控制等。选择合适的加密方式取决于您的安全需求和通信模型。
参考:TLS 握手期间会发生什么?
写给 Kubernetes 工程师的 mTLS 指南 | 云原生资料库
TLS 终止(TLS Termination)指的是在将 TLS 加密流量传递给 Web 服务器之前对其进行解密的过程。将 TLS 流量卸载到入口网关或专用设备上,可以提高 Web 应用的性能,同时确保加密流量的安全性。一般运行在集群入口处,当流量到达入口处时实施 TLS 终止,入口与集群内服务器之间的通信将直接使用 HTTP 明文,这样可以提高服务性能。
Istio 默认在入口网关处终止 TLS,然后再为网格内的服务开启 mTLS。你也可以让流量直通(passthrough)到后端服务处理,例如:
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: sample-gateway
spec:
servers:
- port:
number: 443
name: https
protocol: HTTPS
tls:
mode: PASSTHROUGH
互联网客户端对 Web 服务的访问,一般使用单向 TLS,即只需要服务端提供身份证明,而不关心客户端的身份。当你需要验证客户端身份时,使用单向 TLS 可以使用密码、token、双因子认证等方式。不过这样的认证方式需要应用程序内部支持,而双向 TLS 是运行在应用程序之外的,不需要多应用逻辑进行修改。
虽然 mTLS 是确保云原生应用程序服务间通信安全的首选协议,但是应用 mTLS 需要完成复杂的对称加密、解密过程,这将非常耗时且消耗大量的 CPU 资源。
对于某些安全级别不高的流量,如果我们在流量入口处终止 TLS,并网格内部仅对针对性的服务开启 mTLS,就可以加快请求响应和减少计算资源消耗。
Istio流量主要包含入口流量和内部流量,入口流量是需要TLS进行加密的,加密解密过程是需要消耗CPU资源的,若是集群规模比较大内部服务多,内部流量
关键要点是:
理解 TLS 配置
作为入站请求的一部分,网关必须对流量进行解码才能应用路由规则。 网关根据 Gateway资源中的服务配置解码。 例如,如果入站连接是明文的 HTTP,则端口协议配置成 HTTP:
apiVersion: networking.istio.io/v1beta1
kind: Gateway
...
servers:
- port:
number: 80
name: http
protocol: HTTP
同样,对于原始 TCP 流量,协议将设置为 TCP。
对于 TLS 连接,还有更多选项:
apiVersion: networking.istio.io/v1beta1
kind: Gateway
...
servers:
- port:
number: 443
name: https
protocol: HTTPS
tls:
mode: PASSTHROUGH
在这种模式下,Istio 将根据 SNI 信息进行路由并将请求按原样转发到目的地。
apiVersion: networking.istio.io/v1beta1
kind: Gateway
...
servers:
- port:
number: 443
name: https
protocol: HTTPS
tls:
mode: MUTUAL
caCertificates: ...
如何理解 Istio 中的 mTLS 流量加密?
tio 的对等认证默认使用 PERMISSIVE 模式,自动将 mTLS 流量发送到这些工作负载,将纯文本流量发送到没有 sidecar 的工作负载。在将 Kubernetes 服务纳入 Istio 网格后,为了防止服务无法通过 mTLS,我们可以先使用 PERMISSIVE 模式。当我想为某些服务开启严格的 mTLS 模式时,可以使用以下两种方式之一:
你可以使用 namespace 和 selector 指定某个命名空间下的某个工作负载开启严格的 mTLS。例如下面的配置:
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: foo-peer-policy
namespace: default
spec:
selector:
matchLabels:
app: reviews
mtls:
mode: STRICT
你也可以给安装 Istio 的命名空间 istio-system 设置严格的 mTLS,那样会为网格中的所有服务开启严格的 mTLS,详细步骤请参考 Istio 文档 。
PeerAuthentication 中指定对目标工作负载实施的 mTLS 模式。对等认证支持以下模式:
DestinationRule 用于设置流量路由策略,例如负载均衡、异常点检测、TLS 设置等。其中 TLS 设置中包含多种模式 ,使用 ISTIO_MUTUAL 模式可以为工作负载开启 Istio 的自动 TLS,如下所示。
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: reviews
namespace: default
spec:
host: reviews
trafficPolicy:
tls:
mode: ISTIO_MUTUAL
参考官网:安全最佳实践 安全策略示例
安全中通常会匹配那些路径能访问,通常这些访问路径研发人员才知道,若全是交给技术设施人员比较吃力,此处小编建议使用SpringcloudGateway网关进行路由规则的配置。istio人员只需配置限制的域名,流量加密鉴权等。在内部服务对安全要求较高的服务上加mTLS,网关入口终止TLS。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。