(二)mTLS(Mutual TLS)大家都知道 TLS 是传输层安全协议,用于在互联网通信中提供加密等安全保障。 而 mTLS 则是 mutual TLS,即双向 TLS,它要求通信双方都进行身份验证。 四、基于 MCP 的 mTLS 双向认证体系工作原理(一)证书签发阶段证书申请 :客户端和服务端分别向 CA 发起证书申请请求。 只有当双方都成功验证对方的证书后,才会建立安全通信通道,数据传输过程就会被加密保护,从而实现了基于 MCP 的 mTLS 双向认证安全通信。 性能开销相比于单向认证,mTLS 双向认证在每次通信握手过程中增加了更多的身份验证步骤,这会带来一定的性能开销,可能导致通信延迟增加。
启用双向 TLS(mTLS)可提高安全性,本文将详述 mTLS 的使用入门方法。 双向传输层安全性(mTLS)已成为解决这些安全性挑战的有力解决方案。 mTLS 建立在传输层安全性(TLS)协议的基础之上,这是通过加密来保护互联网通信安全的常用方式。 mTLS 和 Kubernetes Kubernetes 提供了实现 mTLS 的理想平台,因为它具备动态服务发现和管理功能。 在 Kubernetes 中实现 mTLS 的先决条件 在 Kubernetes 集群中开始实施 mTLS 之前,请确保具备以下先决条件。 Kubernetes 集群。 随着您深入了解 mTLS,请探索 Istio 等服务网格提供的更广泛利益。Istio 不仅提供 mTLS,还提供全套安全和可观测性工具。
换句话说,不仅通信被加密,而且身份也在连接的两端进行验证(mTLS 的双向组件与浏览器使用的 TLS 不同,它只验证连接的服务器端,mTLS 验证客户端和服务器的身份)。 默认情况下,Linkerd 为所有网格中的 pod-to-pod 通信启用了 mTLS,只要双方都注入了数据平面代理,那么恭喜你:你已经在服务之间验证了加密的 mTLS。 事实上,前面我们使用的 Emojivoto 应用程序中就已经在使用 mTLS 了,只是我们没有意识到而已。 对对于 Linkerd 自动添加 mTLS 的功能,有几个需要注意的地方。 Linkerd 需要同时处理客户端和服务器端的连接才能发挥其 mTLS 的魔力。 接下来让我们来了解下 mTLS 是如何工作的,以及如何验证我们的连接是否确实具有 mTLS。
Kustomize 自定义 Linkerd 的配置 Linkerd 2.10 中文手册持续修正更新中: https://linkerd.hacker-linner.com 为了支持网格化 Pod 之间的 mTLS
量子计算机破解传统算法 → 后量子部分仍安全 场景2:后量子算法被发现漏洞 → 传统部分仍安全 场景3:两种算法都被破解 → 极低概率 平滑过渡 兼容现有系统 逐步迁移到后量子密码学 不中断现有服务 后量子算法的mTLS
非mTLS肿瘤不促进局部抗肿瘤免疫,其富含免疫抑制细胞或缺乏干细胞样B和T细胞。 mTLS状态包含大量扩增的CD8+ T细胞克隆型。在mTLS内CD8+ T细胞的扩增克隆型中鉴定出干细胞样和功能表型之间共享克隆型的频率增加。 mTLS与干细胞样CD8+ T细胞表型的更多富集相关,并且成熟的CD8+ T细胞向功能性CD8+ T细胞转变,表明mTLS可以产生肿瘤内CD8+ T细胞应答。 结果6、mTLS中DC的积聚TLS中DC细胞的再分群与功能分析。主要存在于mTLS中的cDC 2亚群显示出与外源性抗原的加工和呈递以及IG产生相关的特征的显著富集。 结果8、在HNSCC中,mTLS与更好的生存率和对ICB治疗的反应相关mTLS与HNSCC中对ICB治疗的反应改善有关。
下面我们就一个由于 Headless Service 的 mTLS 故障导致的典型案例进行说明。 Redis 客户端中 Envoy Sidecar 的 mTLS 配置本身看来并没有什么问题。 Redis 客户端以为是这样的: 但实际上是这样的: 在服务器端没有安装 Envoy Sidecar,不支持 mTLS 的情况下,按理客户端的 Envoy 不应该采用 mTLS 向服务器端发起连接。 这样同时兼容了服务器端支持和不支持 mTLS 两种情况。 下图展示了 Istio 中是如何通过 endpoint 的标签来兼容 mTLS 和 plain TCP 两种情况的。 中不再有 mTLS 相关的证书配置。
一、背景 Dapr 默认证书有效时间是1年,证书过期后就不能执行相关控制面和数据面的交互了,如下图: 二、查看证书有效时间 通过dapr mtls expiry 看到期时间,具体参见命令https:/ /v1-7.docs.dapr.io/reference/cli/dapr-mtls/dapr-mtls-expiry/ 三、解决方案 Dapr 支持使用 Dapr 控制平面、Sentry 服务(中央证书颁发机构 具体参见 https://docs.dapr.io/operations/security/mtls/。 Dapr 在1.7版本引入了一个新的命令: dapr mtls renew-certificate -k --valid-until <days> –restart 生成全新的根证书和颁发者证书,由新生成的私钥签名 1.7 版本以后Dapr 在这个方面做的更完善了,为 Dapr 控制平面 mTLS 证书过期设置监控 从 mTLS 根证书到期前 30 天开始,Dapr 哨兵服务将发出每小时警告级别的日志,指示根证书即将到期
下面我们就以一个由于 Headless Service 的 mTLS 故障导致的典型案例进行说明。 Redis 客户端中 Envoy Sidecar 的 mTLS 配置本身看来并没有什么问题。 在服务器端没有安装 Envoy Sidecar,不支持 mTLS 的情况下,按理客户端的 Envoy 不应该采用 mTLS 向服务器端发起连接。这是怎么回事呢? 这样同时兼容了服务器端支持和不支持 mTLS 两种情况。 下图展示了 Istio 中是如何通过 endpoint 的标签来兼容 mTLS 和 plain TCP 两种情况的。 ? 中不再有 mTLS 相关的证书配置。
场景二:调试 istio mtls 神坑 我们在现有环境中开启 mtls: 在 istio-system namespace 中配置mtls 所需 meshpolicy 和 destinationrule 原来我们在上一个 demo 中增加的 helloworld DestinationRule中, 默认是没有 mtls 定义(所以不开启 mtls),这个 DR 会在 helloworld pod 中覆盖 我们在 helloworld DestinationRule 中补充 mtls 配置: % kubectl apply -f hello-v1-destinationrule-with-mtls.yaml 这种 istio mtls 用户接口极度不友好,虽然 mtls 默认做到了全局透明, 业务感知不到 mtls 的存在, 但是一旦业务定义了 DestinationRule,DestinationRule 就必须要知道当前 mtls 是否开启,并作出调整。
生成shell 命令格式如下: generate --mtls <Server IP> --save . /test.exe --os Windows 命令详解: --mtls:监听协议(包括http、mtls、grpc ) 开启监听 如上一步,我们生成shell所用的监听协议为mtls,故我们要配置mtls 在终端执行命令 mtls 通过输入jobs命令,可以查看目前开启的监听。 默认端口是8888 如果要指定端口,执行命令 mtls -l 9999 查看生成过的shell implants 运行shell后,server和client端都会得到会话的消息。
values-istio-auth-galley.yaml:启用控制面 mTLS;缺省打开网格内的 mTLS;启用 Galley。 values-istio-auth-multicluster.yaml:多集群配置;启用控制面 mTLS;缺省打开网格内的 mTLS;禁用自签署证书。 values-istio-auth.yaml:启用控制面 mTLS;缺省打开网格内的 mTLS。 values-istio-demo-auth.yaml:启用控制面 mTLS;缺省打开网格内的 mTLS;激活 Grafana、Jaeger、ServiceGraph 以及 Galley;允许自动注入。 values-istio-one-namespace-auth.yaml: values-istio-one-namespace.yaml:启用控制面 mTLS;缺省打开网格内的 mTLS; values-istio.yaml
中的 mTLS 配置有关,是 istio 中一个不健壮的接口设计。 中可以覆盖子版本的 mTLS 值(默认是不开启!) 最终导致增 DestinationRule 后 mTLS 变成了不开启,导致connection termination 为了修复以上问题,用户不得不在所有 DestinationRule 中增加 mTLS 属性并设置为开启 这种 istio mtls 用户接口极度不友好,虽然 mtls 默认做到了全局透明, 业务感知不到 mtls 的存在, 但是一旦业务定义了 DestinationRule,DestinationRule 就必须要知道当前 mtls 是否开启,并作出调整。
这些策略直接建立在 Linkerd 的自动 mTLS 功能提供的安全服务身份上。 https://linkerd.io/2.11/features/automatic-mtls 为此,Linkerd 2.11 引入了一组默认授权策略,只需设置 Kubernetes annotation 即可应用于 cluster、namespace 或 pod 级别,包括: all-authenticated(只允许来自 mTLS-validated 服务的请求); all-unauthenticated 中所有 pod 上的所有管理端口(admin ports),ServerAuthorization 可以允许来自 kubelet 的健康检查连接,或用于指标收集(metrics collection)的 mTLS 这些 annotation 和 CRD 一起使您可以轻松地为集群指定各种策略,从 “允许所有流量” 到 “服务 Foo 上的端口 8080 只能从使用 Bar 服务帐户的服务接收 mTLS 流量”,更多
在这篇文章中,我将与大家分享如何利用服务网格实现安全的服务间通信,探索mTLS、授权和身份验证等 。对于关心微服务安全的你,这是一篇必读的技术博客! 安全通信的核心要素 2.1 mTLS:双向TLS加密 mTLS为服务间的通信提供双向验证和加密,确保通信的机密性和完整性。 apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: mtls-for-service spec 通过mTLS、身份验证和授权,我们可以确保服务间的通信既安全又高效。随着技术的发展,服务网格在安全领域的作用将进一步加强,为开发者和企业提供更强大的支持。
在这篇博客中,我们将扩展 mTLS 的主题,并研究 Cilium 如何提供具有出色安全性和性能特征的基于 mTLS 的无边车身份验证。 相互身份验证一直是安全的基石,我们每天都在使用 SSH、mTLS 或 IPsec 等协议和技术来解决安全问题。 Mutual TLS 或 mTLS 是一种众所周知的实现相互身份验证的加密流量的方法,但它不是唯一的方法。 支持现有的身份和证书管理:任何基于 mTLS 的身份验证控制平面或身份管理系统都可以插入并用于为服务提供证书。 左边是传统的基于 sidecar 的 mTLS 方法,依靠 sidecar 将 TLS 注入每个连接。
mTLS是TLS协议的一种补充和增强。 在Istio服务网格中,mTLS在有注入边车Istio代理的两个微服务之间启用加密通信。默认地,示例程序中的三个服务之间的通信是明文的,只使用了HTTP协议。 未使用mTLS时的三个终端的输出 要在Istio中启用mTLS,只需要使用Policy和DestionationRule对象。 你还可以设置spec.peers.mtls.mode字段值为“PERMISSIVE”(宽容)而不是“STRICT”(严格),这会允许服务能同时支持mTLS和非mTLS通信,从而兼容那些还没有采用Istio 我们的三个服务都已经被注入了Istio边车代理,因此我们可以在Tutorial命名空间上应用mTLS。 请注意,使用Istio RBAC之前要启用mTLS,因为服务器端要利用mTLS获取客户端的身份信息。
在这篇博客文章中,我将分享 Connect 的云团队如何将其整个平台迁移到云原生架构,同时对所有服务进行 mTLS("mTLSing"),以符合严格的监管要求。 令我们惊讶的是,mTLS 方面相当简单。Linkerd 在一个小时内安装好,在一周内运行到产品中,而没有影响到我们的开发团队。 跨所有服务的 mTLS 是一项监管要求 Connect 是在一个高度监管的环境中运营的,因此,我们必须考虑一些重要的因素——毕竟,我们正在处理高度敏感的金融数据。 我们能够在 5 个月内 mTLS 了所有服务,同时最大限度地减少对开发人员生产力的影响。此外,平台指标已被证明在调试和保持服务运行状况时可以节省时间。 今天,没有理由不 mTLS 你所有的服务。
而这几年微服务架构普及,“服务网格”(Service Mesh)像是给分布式系统装上了外挂,无论是通信、熔断、限流、链路追踪、mTLS**,你想要的它全都有。 四、优化点二:mTLS 没必要全开,别让加密把 CPU 吃完是的,Istio 支持自动 mTLS,加密通信从此无脑开启。听起来很安全,实际上非常吃资源。 我的建议是:按 namespace、按服务组选择性开启 mTLS,而不是一刀切。 security.istio.io/v1beta1kind: PeerAuthenticationmetadata: name: default namespace: productionspec: mtls
Using Istio to enable mTLS Istio遵循与Kubernetes相同的配置路径。 但是要使用mTLS,我们还需要告诉客户在调用服务时使用mTLS。为此,我们将使用Istio DestinationRule。 使用Istio验证原点标识(使用JWT) 当我们使用如上所述的mTLS时,我们不仅可以加密连接,更重要的是知道谁在调用谁。Istio为每个人(SPIFFE)规范使用安全生产标识框架。 例如,要将Istio配置为同时使用mTLS和验证请求中的JWT令牌(如果请求不存在、无效或过期,则失败),我们可以配置策略对象。 Istio实现的另一个好处是该请求也受到了mTLS的保护。这有助于保护JWT令牌不会被泄漏,并用于某些重放攻击。