本文探索有关mTLS身份验证架构、证书、私钥和公钥概念以及如何使用开源Istio服务网格启用mTLS。
译者 | 李睿
(相关资料图)
审校 | 重楼
本文是关于mTLS以及如何使用Istio服务网格实现它的详细指南。以下将讨论以下主题:
了解TCP/IP套件的mTLS协议SLL vs TLS vs mTLS为什么mTLS很重要?mTLS的用例证书颁发机构,公钥,X.509证书:必须知道的mTLS概念mTLS是如何工作的?如何使用Istio服务网格启用mTLSIstio中mTLS的证书管理相互传输层安全(mTLS)是一种加密协议,旨在验证双方的身份并保护他们在网络中的通信。mTLS协议是TLS协议的扩展,其中双方(Web客户端和Web服务器)都经过身份验证。mTLS的主要目标是实现以下目标:
真实性:确保双方都是真实且经过验证的保密性:确保传输中的数据安全完整性:确保发送数据的正确性mTLS协议位于应用程序层和传输层之间,仅对消息(或数据包)进行加密。它可以看作是对TCP协议的增强。下图从概念上提供了mTLS在TCP/IP协议套件中的位置。
安全工程师、架构师和开发人员可以互换使用SSL、TLS和mTLS,这通常是因为它们的相似性。简单地说,mTLS是对TLS的增强,而TLS是对SSL的增强。
安全套接字层(SSL)的第一个版本是由网景(Netscape)公司在1994年开发的;最流行的版本是版本2和创建于1995年的版本3。它非常受欢迎,甚至被拍进了007系列电影中(下图是1997年上映的《明日帝国》)。
SSL的整体工作由三个子协议承载:
握手协议:用于验证Web客户端和Web服务器的身份,建立安全的通信通道。在握手过程中,将生成一个共享密钥,仅用于会话,用于加密通信期间的数据。记录协议:该协议使用新生成的共享密钥来维护客户端和服务器之间通信数据的机密性。警报协议:如果客户端或服务器检测到错误,警报协议将关闭SSL连接(数据传输将终止);破坏所有会话、共享密钥等。随着互联网应用的增多,对网络中数据的细粒度安全性要求也越来越高。因此,传输层安全性(TLS)是由IETF开发的。网景公司将SSL项目移交给IETF,传输层安全性(TLS)是SSL的高级版本;协议的代码思想和实现是相同的。
SSL和TLS协议之间的主要区别在于用于在TLS中加密数据的密码套件(或算法)是高级的。其次,对握手、记录和警报协议进行了修改和优化,以适应互联网的使用。
注:在SSL握手协议中,服务器通过发送证书对客户端进行身份验证是强制性的,但客户端身份验证是可选的,以确保线路的安全。但是在TLS中,只有对服务器和客户端进行身份验证的规定,而不是相反。几乎所有使用HTTPS作为协议访问的网站都将使用TLS证书将自己建立为真正的网站。如果用户访问Google.com并单击挂锁符号,它将显示TLS证书。
TLS主要用于以客户端为用户的Web应用程序。此外,确保数十亿客户端或用户的身份验证仅适用于某些Web应用程序。
但是,随着大型单片应用程序分解成许多通过互联网通信的微服务,对mTLS的需求突然增长。mTLS协议确保Web客户端和Web服务器在握手前都进行身份验证。(将在本文后面看到mTLS协议的工作模型)。
现代业务是使用Web应用程序完成的,其底层架构遵循混合云模型。微服务将分布在公共云/私有云、Kubernetes和on-prem VM上。各种微服务和组件之间的通信是在网络上进行的,这带来了黑客攻击或恶意攻击的重大风险。以下是一些可以通过使用mTLS协议完全避免的网络攻击场景。
中间人攻击(MITM):网络攻击者可以将自己置于客户端和服务器之间,在传输过程中拦截数据。使用mTLS时,网络攻击者无法进行身份验证,无法窃取数据。IP欺骗:另一种情况是,网络攻击者伪装成信任的人,向接收者注入恶意数据包。这也是通过mTLS中的端点身份验证来解决的,以确定网络数据包或数据是否来自人们信任的来源。数据包嗅探器:网络攻击者可以在无线发送器附近放置被动接收器,以获取传输的每个数据包的副本。当网络攻击者想要窃取卡号、银行应用程序用户名、密码、SSN等敏感信息时,这种攻击在银行和金融科技领域很普遍。由于数据包嗅探是非侵入性的,因此很难检测到。因此,保护数据的最佳方法是使用加密技术。mTLS使用复杂的加密算法来帮助加密数据,这些算法很难被数据包嗅探器破译。拒绝服务(DoS)攻击:网络攻击者的目的是使网络或Web服务器无法被合法的应用程序或用户使用。这是通过发送易受攻击的数据包,或者数据包泛滥,或者打开大量的TCP连接到主机(或Web服务器),从而使服务器最终崩溃来实现的。可以通过在适用的通信中调用mTLS协议来避免DoS和分布式DoS(高级DoS技术)。所有的恶意DoS攻击在进入握手阶段之前就会被丢弃。随着通过Web应用程序的业务使用的增加以及网络攻击威胁的同时增加,mTLS的用例每天都在增长。以下是基于与不同行业或领域(银行、金融科技和在线零售公司)的许多领导者讨论的经验的一些重要用例。
混合云和多云应用程序:每当组织使用混合数据中心(内部部署设施、公共云或私有云)时,数据就会离开受保护的边界并流出网络。在这种情况下,应该使用mTLS来保护数据。基于微服务的B2B软件:市场上的许多B2B软件都遵循微服务架构。每个服务将使用REST API与其他服务通信。即使所有的服务都托管在一个数据中心,网络也应该得到保护,以保护传输中的数据(以防防火墙被破坏)。在线零售和电子商务应用程序:通常情况下,电子商务和在线零售应用程序使用内容交付网络(CDN)从服务器获取应用程序并向用户展示。虽然在CDN中实现了TLS,以便在用户访问页面时对自己进行身份验证,但是应该有一种安全机制,通过mTLS来保护CDN和Web服务器之间的网络。银行应用程序:承载易受影响交易的应用程序,例如银行、金融交易应用程序、支付网关等,应采取极端预防措施,防止其数据被盗。每天都有数百万个在线交易通过各种银行和金融科技应用程序进行。如果网络中的数据不受保护,银行用户名、密码、借记卡/信用卡详细信息、CVV号码等敏感信息很容易被黑客入侵。使用mTLS可以对网络应用严格的身份验证和安全保密。行业法规和合规性:每个国家都有一些规则和标准来管理IT基础设施和保护数据。所有政策,例如FIPS、GDPR、PCI-DSS、HIPAA、ISO27001等,都概述了严格的安全措施,以保护静态数据和传输中的数据。对于网络中的严格认证,可以使用mTLS,企业可以遵循各种标准。在理解mTLS的工作机制之前,需要了解以下几个概念。
数字证书是由证书颁发机构(CA)颁发的小型计算机文件,用于对用户、应用程序或组织进行身份验证。数字证书包含证书持有者的姓名、证书序列号、有效期、公钥和证书颁发机构的签名等信息。
证书颁发机构(CA)是一个受信任的第三方,它验证用户身份并颁发包含申请者公钥和其他信息的加密数字证书。值得关注的证书颁发机构(CA)包括VeriSign、Entrust、LetsEncrypt、Safescript Limited等。
创建证书颁发机构层次结构是为了分配颁发证书的工作负载。可以存在从不同级别的不同证书颁发机构(CA)颁发证书的实体。在证书颁发机构(CA)的多级层次结构(如父级和子级)中,顶端有一个证书颁发机构(CA),称为Root CA参阅下图)。每个证书颁发机构(CA)还将拥有由父同证书颁发机构(CA)颁发的证书,Root CA将拥有自签名证书。
为了确保证书颁发机构(CA)向客户端/服务器颁发证书是可信的,安全协议建议实体将它们的数字证书和整个链发送到Root CA。
在为实体创建证书时,证书颁发机构(CA)将生成一个公钥和一个私钥——通常称为公钥对。公钥和私钥用于验证其身份并加密数据。公钥是公开的,但私钥是保密的。如果有兴趣了解生成公钥的算法,可以了解有关RSA、DSA、ECDSA和ed25519的更多信息。
它是证书的一个特殊类别,由国际电信联盟定义,它使用数字签名将应用程序的身份(主机名、组织名称等)绑定到公钥。它是所有安全协议SSL/TLS/mTLS中最常用的证书,用于保护Web应用程序。
如上所述,mTLS具有与SSL类似的子协议实现。两个应用程序使用mTLS协议相互通信有8个阶段(如下所述)。
1.使用hello建立安全功能:客户机尝试与服务器通信(也称为客户机hello)。客户端hello消息将包含特定参数的值,例如mTLS版本、会话id、密码套件、压缩算法等。服务器还将发送一个名为server hello的类似响应,其中包含客户端发送的相同参数的值。
2.服务器身份验证和密钥交换:在这一阶段,服务器将向客户端共享其数字证书(主要是微服务的X.509证书)和通向Root CA的整个链。它还需要客户端的数字证书。
3.客户端验证服务器的证书:客户端将使用数字证书中的公钥来验证服务器的真实性。
4.客户端身份验证和密钥交换:在验证完成之后,客户端向服务器发送数字证书进行验证。
5.服务器验证客户端证书:服务器验证客户端的真实性。
6.主密钥生成和握手完成:一旦双方的真实性建立,客户端和服务器将建立握手,并生成两个新密钥;共享的秘密信息仅为各方所知,并在会话中处于活动状态。
(1)主密钥:用于加密
(2)消息认证码(MAC):用于保证消息的完整性
7.开始加密通信和传输:信息交换将从使用主秘钥加密的所有消息或数据包开始。在这层面纱的背后,mTLS协议会将消息划分为称为片段的较小块,压缩每个片段,为每个块添加消息认证码(MAC),最后使用主密钥对其进行加密。
8.数据传输开始:最后,mTLS协议将消息块附加报头,并将其发送给TCP协议,将其发送到目的地或接收方。
9.会话结束:一旦通信完成,会话将关闭。如果在传输过程中检测到异常,mTLS协议将销毁所有密钥和秘密,并立即终止会话。
注:在上述阶段中,假设证书颁发机构(CA)已经向仍然有效的实体颁发了证书。实际上,关键任务应用程序的证书很快就会过期,并且需要经常进行证书轮换(将直接跳到Istio如何启用mTLS和证书轮换)。
Istio服务网格是一个基础设施层,它将网络和安全性抽象出应用层。它通过向每个应用程序注入Envoy代理(L4和L7 sidecar代理)并监听所有网络通信来实现这一点。
尽管Istio支持多种身份验证类型,但它最出名的是对托管在云平台、内部部署或Kubernetes基础设施上的应用程序实现mTLS。Envoy代理充当策略实施点(PEP);用户可以使用Istio提供的点对点(p2p)身份验证策略实现mTLS,并通过代理在工作负载级别强制执行它。
Istio中的p2p身份验证策略示例,用于将mTLS应用于Istio-nm命名空间中的demobank应用程序:
YAML apiVersion: security.istio.io/v1beta1 kind: PeerAuthentication metadata: name: "mTLS-peer-policy" namespace: "istio-nm" spec: selector: matchLabels: app: demobank mtls: mode: STRICT
Istio中mTLS认证的工作机制如下:
1.首先,到网格中任何应用程序的所有出站和入站流量都通过Envoy代理重新路由。
2.mTLS发生在客户端Envoy代理和服务器端Envoy代理之间。
3.客户端Envoy代理将尝试通过交换证书和证明其身份来连接服务器端Envoy代理。
4.一旦身份验证阶段成功完成,就会在客户端和服务端Envoy代理之间建立TCP连接,以执行加密通信。
需要注意的是,使用Istio的mTLS可以在所有级别上实现:应用程序、名称空间或网格范围。
Istio通过向附加到应用程序的Envoy代理颁发X.509证书来提供更强的身份。证书管理和轮换由与Envoy代理在同一容器中运行的Istio代理完成。Istio代理与Istio的控制平台Istiod对话,以有效地分发带有公钥的数字证书。以下是Istio中证书管理的详细阶段:
1.Istio代理生成公钥对(公钥和私钥),然后将公钥发送到Istio控制平台进行签名。这称为证书签名请求(CSR)。
2.Istiod有一个组件(早期的Galley)作为证书颁发机构(CA)。Istiod验证请求中的公钥、签名并向Istio代理颁发数字证书。
3.当需要mTLS连接时,Envoy代理使用Envoy秘密发现服务(SDS) API从Istio代理获取证书。
4.Istio代理观察特使使用的证书的过期。当证书到期时,代理向Istiod发起证书签名请求(CSR)。
微服务架构是当今的标准。应用程序的分布式特性为网络攻击者提供了更大的攻击面,因为这些应用程序通过网络相互通信。在这种情况下,安全性不能是事后才考虑的事项,因为它可能导致灾难性的数据泄露。使用Istio实现mTLS是确保云原生应用程序之间通信安全的有效方法。Splunk、Airbnb和Salesforce等许多行业领先的公司都使用开源的Istio来启用mTLS并增强其应用程序的安全性。
原文标题:What Is mTLS? How To Implement It With Istio,作者:Debasree Panda
关键词: