什么是mTLS?如何使用Istio實現它
譯文譯者 | 李睿
審校 | 重樓
本文是關于mTLS以及如何使用Istio服務網格實現它的詳細指南。以下將討論以下主題:
- 了解TCP/IP套件的mTLS協議
- SLL vs TLS vs mTLS
- 為什么mTLS很重要?
- mTLS的用例
- 證書頒發機構,公鑰,X.509證書:必須知道的mTLS概念
- mTLS是如何工作的?
- 如何使用Istio服務網格啟用mTLS
- Istio中mTLS的證書管理
什么是mTLS?
相互傳輸層安全(mTLS)是一種加密協議,旨在驗證雙方的身份并保護他們在網絡中的通信。mTLS協議是TLS協議的擴展,其中雙方(Web客戶端和Web服務器)都經過身份驗證。mTLS的主要目標是實現以下目標:
- 真實性:確保雙方都是真實且經過驗證的
- 保密性:確保傳輸中的數據安全
- 完整性:確保發送數據的正確性
mTLS協議:TCP/IP協議組的一部分
mTLS協議位于應用程序層和傳輸層之間,僅對消息(或數據包)進行加密。它可以看作是對TCP協議的增強。下圖從概念上提供了mTLS在TCP/IP協議套件中的位置。
SSL、TLS和mTLS:哪個是新的?
安全工程師、架構師和開發人員可以互換使用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協議的工作模型)。
為什么mTLS比以往更重要?
現代業務是使用Web應用程序完成的,其底層架構遵循混合云模型。微服務將分布在公共云/私有云、Kubernetes和on-prem VM上。各種微服務和組件之間的通信是在網絡上進行的,這帶來了黑客攻擊或惡意攻擊的重大風險。以下是一些可以通過使用mTLS協議完全避免的網絡攻擊場景。
- 中間人攻擊(MITM):網絡攻擊者可以將自己置于客戶端和服務器之間,在傳輸過程中攔截數據。使用mTLS時,網絡攻擊者無法進行身份驗證,無法竊取數據。
- IP欺騙:另一種情況是,網絡攻擊者偽裝成信任的人,向接收者注入惡意數據包。這也是通過mTLS中的端點身份驗證來解決的,以確定網絡數據包或數據是否來自人們信任的來源。
- 數據包嗅探器:網絡攻擊者可以在無線發送器附近放置被動接收器,以獲取傳輸的每個數據包的副本。當網絡攻擊者想要竊取卡號、銀行應用程序用戶名、密碼、SSN等敏感信息時,這種攻擊在銀行和金融科技領域很普遍。由于數據包嗅探是非侵入性的,因此很難檢測到。因此,保護數據的最佳方法是使用加密技術。mTLS使用復雜的加密算法來幫助加密數據,這些算法很難被數據包嗅探器破譯。
- 拒絕服務(DoS)攻擊:網絡攻擊者的目的是使網絡或Web服務器無法被合法的應用程序或用戶使用。這是通過發送易受攻擊的數據包,或者數據包泛濫
- ,或者打開大量的TCP連接到主機(或Web服務器),從而使服務器最終崩潰來實現的。可以通過在適用的通信中調用mTLS協議來避免DoS和分布式DoS(高級DoS技術)。所有的惡意DoS攻擊在進入握手階段之前就會被丟棄。
mTLS在行業中的用例
隨著通過Web應用程序的業務使用的增加以及網絡攻擊威脅的同時增加,mTLS的用例每天都在增長。以下是基于與不同行業或領域(銀行、金融科技和在線零售公司)的許多領導者討論的經驗的一些重要用例。
- 混合云和多云應用程序:每當組織使用混合數據中心(內部部署設施、公共云或私有云)時,數據就會離開受保護的邊界并流出網絡。在這種情況下,應該使用mTLS來保護數據。
- 基于微服務的B2B軟件:市場上的許多B2B軟件都遵循微服務架構。每個服務將使用REST API與其他服務通信。即使所有的服務都托管在一個數據中心,網絡也應該得到保護,以保護傳輸中的數據(以防防火墻被破壞)。
- 在線零售和電子商務應用程序:通常情況下,電子商務和在線零售應用程序使用內容交付網絡(CDN)從服務器獲取應用程序并向用戶展示。雖然在CDN中實現了TLS,以便在用戶訪問頁面時對自己進行身份驗證,但是應該有一種安全機制,通過mTLS來保護CDN和Web服務器之間的網絡。
- 銀行應用程序:承載易受影響交易的應用程序,例如銀行、金融交易應用程序、支付網關等,應采取極端預防措施,防止其數據被盜。每天都有數百萬個在線交易通過各種銀行和金融科技應用程序進行。如果網絡中的數據不受保護,銀行用戶名、密碼、借記卡/信用卡詳細信息、CVV號碼等敏感信息很容易被黑客入侵。使用mTLS可以對網絡應用嚴格的身份驗證和安全保密。
- 行業法規和合規性:每個國家都有一些規則和標準來管理IT基礎設施和保護數據。所有政策,例如FIPS、GDPR、PCI-DSS、HIPAA、ISO27001等,都概述了嚴格的安全措施,以保護靜態數據和傳輸中的數據。對于網絡中的嚴格認證,可以使用mTLS,企業可以遵循各種標準。
在理解mTLS的工作機制之前,需要了解以下幾個概念。
證書和公鑰/私鑰:必須知道的mTLS概念
證書
數字證書是由證書頒發機構(CA)頒發的小型計算機文件,用于對用戶、應用程序或組織進行身份驗證。數字證書包含證書持有者的姓名、證書序列號、有效期、公鑰和證書頒發機構的簽名等信息。
證書頒發機構(CA)
證書頒發機構(CA)是一個受信任的第三方,它驗證用戶身份并頒發包含申請者公鑰和其他信息的加密數字證書。值得關注的證書頒發機構(CA)包括VeriSign、Entrust、LetsEncrypt、Safescript Limited等。
Root CA證書鏈
創建證書頒發機構層次結構是為了分配頒發證書的工作負載。可以存在從不同級別的不同證書頒發機構(CA)頒發證書的實體。在證書頒發機構(CA)的多級層次結構(如父級和子級)中,頂端有一個證書頒發機構(CA),稱為Root CA參閱下圖)。每個證書頒發機構(CA)還將擁有由父同證書頒發機構(CA)頒發的證書,Root CA將擁有自簽名證書。
為了確保證書頒發機構(CA)向客戶端/服務器頒發證書是可信的,安全協議建議實體將它們的數字證書和整個鏈發送到Root CA。
公鑰和私鑰對
在為實體創建證書時,證書頒發機構(CA)將生成一個公鑰和一個私鑰——通常稱為公鑰對。公鑰和私鑰用于驗證其身份并加密數據。公鑰是公開的,但私鑰是保密的。如果有興趣了解生成公鑰的算法,可以了解有關RSA、DSA、ECDSA和ed25519的更多信息。
X.509證書
它是證書的一個特殊類別,由國際電信聯盟定義,它使用數字簽名將應用程序的身份(主機名、組織名稱等)綁定到公鑰。它是所有安全協議SSL/TLS/mTLS中最常用的證書,用于保護Web應用程序。
mTLS是如何工作的?
如上所述,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服務網格啟用mTLS和證書輪換
Istio服務網格是一個基礎設施層,它將網絡和安全性抽象出應用層。它通過向每個應用程序注入Envoy代理(L4和L7 sidecar代理)并監聽所有網絡通信來實現這一點。
mTLS在Istio中的實現
盡管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 Service Mesh中的證書管理和輪換
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實現網絡安全
微服務架構是當今的標準。應用程序的分布式特性為網絡攻擊者提供了更大的攻擊面,因為這些應用程序通過網絡相互通信。在這種情況下,安全性不能是事后才考慮的事項,因為它可能導致災難性的數據泄露。使用Istio實現mTLS是確保云原生應用程序之間通信安全的有效方法。Splunk、Airbnb和Salesforce等許多行業領先的公司都使用開源的Istio來啟用mTLS并增強其應用程序的安全性。
原文標題:What Is mTLS? How To Implement It With Istio,作者:Debasree Panda