譯者 | 李睿
審校 | 重樓
(資料圖片)
本文是關(guān)于mTLS以及如何使用Istio服務(wù)網(wǎng)格實現(xiàn)它的詳細(xì)指南。以下將討論以下主題:
了解TCP/IP套件的mTLS協(xié)議SLL vs TLS vs mTLS為什么mTLS很重要?mTLS的用例證書頒發(fā)機構(gòu),公鑰,X.509證書:必須知道的mTLS概念mTLS是如何工作的?如何使用Istio服務(wù)網(wǎng)格啟用mTLSIstio中mTLS的證書管理什么是mTLS?相互傳輸層安全(mTLS)是一種加密協(xié)議,旨在驗證雙方的身份并保護他們在網(wǎng)絡(luò)中的通信。mTLS協(xié)議是TLS協(xié)議的擴展,其中雙方(Web客戶端和Web服務(wù)器)都經(jīng)過身份驗證。mTLS的主要目標(biāo)是實現(xiàn)以下目標(biāo):
真實性:確保雙方都是真實且經(jīng)過驗證的保密性:確保傳輸中的數(shù)據(jù)安全完整性:確保發(fā)送數(shù)據(jù)的正確性mTLS協(xié)議:TCP/IP協(xié)議組的一部分mTLS協(xié)議位于應(yīng)用程序?qū)雍蛡鬏攲又g,僅對消息(或數(shù)據(jù)包)進行加密。它可以看作是對TCP協(xié)議的增強。下圖從概念上提供了mTLS在TCP/IP協(xié)議套件中的位置。
SSL、TLS和mTLS:哪個是新的?安全工程師、架構(gòu)師和開發(fā)人員可以互換使用SSL、TLS和mTLS,這通常是因為它們的相似性。簡單地說,mTLS是對TLS的增強,而TLS是對SSL的增強。
安全套接字層(SSL)的第一個版本是由網(wǎng)景(Netscape)公司在1994年開發(fā)的;最流行的版本是版本2和創(chuàng)建于1995年的版本3。它非常受歡迎,甚至被拍進了007系列電影中(下圖是1997年上映的《明日帝國》)。
SSL的整體工作由三個子協(xié)議承載:
握手協(xié)議:用于驗證Web客戶端和Web服務(wù)器的身份,建立安全的通信通道。在握手過程中,將生成一個共享密鑰,僅用于會話,用于加密通信期間的數(shù)據(jù)。記錄協(xié)議:該協(xié)議使用新生成的共享密鑰來維護客戶端和服務(wù)器之間通信數(shù)據(jù)的機密性。警報協(xié)議:如果客戶端或服務(wù)器檢測到錯誤,警報協(xié)議將關(guān)閉SSL連接(數(shù)據(jù)傳輸將終止);破壞所有會話、共享密鑰等。隨著互聯(lián)網(wǎng)應(yīng)用的增多,對網(wǎng)絡(luò)中數(shù)據(jù)的細(xì)粒度安全性要求也越來越高。因此,傳輸層安全性(TLS)是由IETF開發(fā)的。網(wǎng)景公司將SSL項目移交給IETF,傳輸層安全性(TLS)是SSL的高級版本;協(xié)議的代碼思想和實現(xiàn)是相同的。
SSL和TLS協(xié)議之間的主要區(qū)別在于用于在TLS中加密數(shù)據(jù)的密碼套件(或算法)是高級的。其次,對握手、記錄和警報協(xié)議進行了修改和優(yōu)化,以適應(yīng)互聯(lián)網(wǎng)的使用。
注:在SSL握手協(xié)議中,服務(wù)器通過發(fā)送證書對客戶端進行身份驗證是強制性的,但客戶端身份驗證是可選的,以確保線路的安全。但是在TLS中,只有對服務(wù)器和客戶端進行身份驗證的規(guī)定,而不是相反。幾乎所有使用HTTPS作為協(xié)議訪問的網(wǎng)站都將使用TLS證書將自己建立為真正的網(wǎng)站。如果用戶訪問Google.com并單擊掛鎖符號,它將顯示TLS證書。
TLS主要用于以客戶端為用戶的Web應(yīng)用程序。此外,確保數(shù)十億客戶端或用戶的身份驗證僅適用于某些Web應(yīng)用程序。
但是,隨著大型單片應(yīng)用程序分解成許多通過互聯(lián)網(wǎng)通信的微服務(wù),對mTLS的需求突然增長。mTLS協(xié)議確保Web客戶端和Web服務(wù)器在握手前都進行身份驗證。(將在本文后面看到mTLS協(xié)議的工作模型)。
為什么mTLS比以往更重要?現(xiàn)代業(yè)務(wù)是使用Web應(yīng)用程序完成的,其底層架構(gòu)遵循混合云模型。微服務(wù)將分布在公共云/私有云、Kubernetes和on-prem VM上。各種微服務(wù)和組件之間的通信是在網(wǎng)絡(luò)上進行的,這帶來了黑客攻擊或惡意攻擊的重大風(fēng)險。以下是一些可以通過使用mTLS協(xié)議完全避免的網(wǎng)絡(luò)攻擊場景。
中間人攻擊(MITM):網(wǎng)絡(luò)攻擊者可以將自己置于客戶端和服務(wù)器之間,在傳輸過程中攔截數(shù)據(jù)。使用mTLS時,網(wǎng)絡(luò)攻擊者無法進行身份驗證,無法竊取數(shù)據(jù)。IP欺騙:另一種情況是,網(wǎng)絡(luò)攻擊者偽裝成信任的人,向接收者注入惡意數(shù)據(jù)包。這也是通過mTLS中的端點身份驗證來解決的,以確定網(wǎng)絡(luò)數(shù)據(jù)包或數(shù)據(jù)是否來自人們信任的來源。數(shù)據(jù)包嗅探器:網(wǎng)絡(luò)攻擊者可以在無線發(fā)送器附近放置被動接收器,以獲取傳輸?shù)拿總€數(shù)據(jù)包的副本。當(dāng)網(wǎng)絡(luò)攻擊者想要竊取卡號、銀行應(yīng)用程序用戶名、密碼、SSN等敏感信息時,這種攻擊在銀行和金融科技領(lǐng)域很普遍。由于數(shù)據(jù)包嗅探是非侵入性的,因此很難檢測到。因此,保護數(shù)據(jù)的最佳方法是使用加密技術(shù)。mTLS使用復(fù)雜的加密算法來幫助加密數(shù)據(jù),這些算法很難被數(shù)據(jù)包嗅探器破譯。拒絕服務(wù)(DoS)攻擊:網(wǎng)絡(luò)攻擊者的目的是使網(wǎng)絡(luò)或Web服務(wù)器無法被合法的應(yīng)用程序或用戶使用。這是通過發(fā)送易受攻擊的數(shù)據(jù)包,或者數(shù)據(jù)包泛濫,或者打開大量的TCP連接到主機(或Web服務(wù)器),從而使服務(wù)器最終崩潰來實現(xiàn)的。可以通過在適用的通信中調(diào)用mTLS協(xié)議來避免DoS和分布式DoS(高級DoS技術(shù))。所有的惡意DoS攻擊在進入握手階段之前就會被丟棄。mTLS在行業(yè)中的用例隨著通過Web應(yīng)用程序的業(yè)務(wù)使用的增加以及網(wǎng)絡(luò)攻擊威脅的同時增加,mTLS的用例每天都在增長。以下是基于與不同行業(yè)或領(lǐng)域(銀行、金融科技和在線零售公司)的許多領(lǐng)導(dǎo)者討論的經(jīng)驗的一些重要用例。
混合云和多云應(yīng)用程序:每當(dāng)組織使用混合數(shù)據(jù)中心(內(nèi)部部署設(shè)施、公共云或私有云)時,數(shù)據(jù)就會離開受保護的邊界并流出網(wǎng)絡(luò)。在這種情況下,應(yīng)該使用mTLS來保護數(shù)據(jù)?;谖⒎?wù)的B2B軟件:市場上的許多B2B軟件都遵循微服務(wù)架構(gòu)。每個服務(wù)將使用REST API與其他服務(wù)通信。即使所有的服務(wù)都托管在一個數(shù)據(jù)中心,網(wǎng)絡(luò)也應(yīng)該得到保護,以保護傳輸中的數(shù)據(jù)(以防防火墻被破壞)。在線零售和電子商務(wù)應(yīng)用程序:通常情況下,電子商務(wù)和在線零售應(yīng)用程序使用內(nèi)容交付網(wǎng)絡(luò)(CDN)從服務(wù)器獲取應(yīng)用程序并向用戶展示。雖然在CDN中實現(xiàn)了TLS,以便在用戶訪問頁面時對自己進行身份驗證,但是應(yīng)該有一種安全機制,通過mTLS來保護CDN和Web服務(wù)器之間的網(wǎng)絡(luò)。銀行應(yīng)用程序:承載易受影響交易的應(yīng)用程序,例如銀行、金融交易應(yīng)用程序、支付網(wǎng)關(guān)等,應(yīng)采取極端預(yù)防措施,防止其數(shù)據(jù)被盜。每天都有數(shù)百萬個在線交易通過各種銀行和金融科技應(yīng)用程序進行。如果網(wǎng)絡(luò)中的數(shù)據(jù)不受保護,銀行用戶名、密碼、借記卡/信用卡詳細(xì)信息、CVV號碼等敏感信息很容易被黑客入侵。使用mTLS可以對網(wǎng)絡(luò)應(yīng)用嚴(yán)格的身份驗證和安全保密。行業(yè)法規(guī)和合規(guī)性:每個國家都有一些規(guī)則和標(biāo)準(zhǔn)來管理IT基礎(chǔ)設(shè)施和保護數(shù)據(jù)。所有政策,例如FIPS、GDPR、PCI-DSS、HIPAA、ISO27001等,都概述了嚴(yán)格的安全措施,以保護靜態(tài)數(shù)據(jù)和傳輸中的數(shù)據(jù)。對于網(wǎng)絡(luò)中的嚴(yán)格認(rèn)證,可以使用mTLS,企業(yè)可以遵循各種標(biāo)準(zhǔn)。在理解mTLS的工作機制之前,需要了解以下幾個概念。
證書和公鑰/私鑰:必須知道的mTLS概念證書數(shù)字證書是由證書頒發(fā)機構(gòu)(CA)頒發(fā)的小型計算機文件,用于對用戶、應(yīng)用程序或組織進行身份驗證。數(shù)字證書包含證書持有者的姓名、證書序列號、有效期、公鑰和證書頒發(fā)機構(gòu)的簽名等信息。
證書頒發(fā)機構(gòu)(CA)證書頒發(fā)機構(gòu)(CA)是一個受信任的第三方,它驗證用戶身份并頒發(fā)包含申請者公鑰和其他信息的加密數(shù)字證書。值得關(guān)注的證書頒發(fā)機構(gòu)(CA)包括VeriSign、Entrust、LetsEncrypt、Safescript Limited等。
Root CA證書鏈創(chuàng)建證書頒發(fā)機構(gòu)層次結(jié)構(gòu)是為了分配頒發(fā)證書的工作負(fù)載??梢源嬖趶牟煌墑e的不同證書頒發(fā)機構(gòu)(CA)頒發(fā)證書的實體。在證書頒發(fā)機構(gòu)(CA)的多級層次結(jié)構(gòu)(如父級和子級)中,頂端有一個證書頒發(fā)機構(gòu)(CA),稱為Root CA參閱下圖)。每個證書頒發(fā)機構(gòu)(CA)還將擁有由父同證書頒發(fā)機構(gòu)(CA)頒發(fā)的證書,Root CA將擁有自簽名證書。
為了確保證書頒發(fā)機構(gòu)(CA)向客戶端/服務(wù)器頒發(fā)證書是可信的,安全協(xié)議建議實體將它們的數(shù)字證書和整個鏈發(fā)送到Root CA。
公鑰和私鑰對在為實體創(chuàng)建證書時,證書頒發(fā)機構(gòu)(CA)將生成一個公鑰和一個私鑰——通常稱為公鑰對。公鑰和私鑰用于驗證其身份并加密數(shù)據(jù)。公鑰是公開的,但私鑰是保密的。如果有興趣了解生成公鑰的算法,可以了解有關(guān)RSA、DSA、ECDSA和ed25519的更多信息。
X.509證書它是證書的一個特殊類別,由國際電信聯(lián)盟定義,它使用數(shù)字簽名將應(yīng)用程序的身份(主機名、組織名稱等)綁定到公鑰。它是所有安全協(xié)議SSL/TLS/mTLS中最常用的證書,用于保護Web應(yīng)用程序。
mTLS是如何工作的?如上所述,mTLS具有與SSL類似的子協(xié)議實現(xiàn)。兩個應(yīng)用程序使用mTLS協(xié)議相互通信有8個階段(如下所述)。
1.使用hello建立安全功能:客戶機嘗試與服務(wù)器通信(也稱為客戶機hello)。客戶端hello消息將包含特定參數(shù)的值,例如mTLS版本、會話id、密碼套件、壓縮算法等。服務(wù)器還將發(fā)送一個名為server hello的類似響應(yīng),其中包含客戶端發(fā)送的相同參數(shù)的值。
2.服務(wù)器身份驗證和密鑰交換:在這一階段,服務(wù)器將向客戶端共享其數(shù)字證書(主要是微服務(wù)的X.509證書)和通向Root CA的整個鏈。它還需要客戶端的數(shù)字證書。
3.客戶端驗證服務(wù)器的證書:客戶端將使用數(shù)字證書中的公鑰來驗證服務(wù)器的真實性。
4.客戶端身份驗證和密鑰交換:在驗證完成之后,客戶端向服務(wù)器發(fā)送數(shù)字證書進行驗證。
5.服務(wù)器驗證客戶端證書:服務(wù)器驗證客戶端的真實性。
6.主密鑰生成和握手完成:一旦雙方的真實性建立,客戶端和服務(wù)器將建立握手,并生成兩個新密鑰;共享的秘密信息僅為各方所知,并在會話中處于活動狀態(tài)。
(1)主密鑰:用于加密
(2)消息認(rèn)證碼(MAC):用于保證消息的完整性
7.開始加密通信和傳輸:信息交換將從使用主秘鑰加密的所有消息或數(shù)據(jù)包開始。在這層面紗的背后,mTLS協(xié)議會將消息劃分為稱為片段的較小塊,壓縮每個片段,為每個塊添加消息認(rèn)證碼(MAC),最后使用主密鑰對其進行加密。
8.數(shù)據(jù)傳輸開始:最后,mTLS協(xié)議將消息塊附加報頭,并將其發(fā)送給TCP協(xié)議,將其發(fā)送到目的地或接收方。
9.會話結(jié)束:一旦通信完成,會話將關(guān)閉。如果在傳輸過程中檢測到異常,mTLS協(xié)議將銷毀所有密鑰和秘密,并立即終止會話。
注:在上述階段中,假設(shè)證書頒發(fā)機構(gòu)(CA)已經(jīng)向仍然有效的實體頒發(fā)了證書。實際上,關(guān)鍵任務(wù)應(yīng)用程序的證書很快就會過期,并且需要經(jīng)常進行證書輪換(將直接跳到Istio如何啟用mTLS和證書輪換)。
如何使用Istio服務(wù)網(wǎng)格啟用mTLS和證書輪換Istio服務(wù)網(wǎng)格是一個基礎(chǔ)設(shè)施層,它將網(wǎng)絡(luò)和安全性抽象出應(yīng)用層。它通過向每個應(yīng)用程序注入Envoy代理(L4和L7 sidecar代理)并監(jiān)聽所有網(wǎng)絡(luò)通信來實現(xiàn)這一點。
mTLS在Istio中的實現(xiàn)盡管Istio支持多種身份驗證類型,但它最出名的是對托管在云平臺、內(nèi)部部署或Kubernetes基礎(chǔ)設(shè)施上的應(yīng)用程序?qū)崿F(xiàn)mTLS。Envoy代理充當(dāng)策略實施點(PEP);用戶可以使用Istio提供的點對點(p2p)身份驗證策略實現(xiàn)mTLS,并通過代理在工作負(fù)載級別強制執(zhí)行它。
Istio中的p2p身份驗證策略示例,用于將mTLS應(yīng)用于Istio-nm命名空間中的demobank應(yīng)用程序:
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認(rèn)證的工作機制如下:
1.首先,到網(wǎng)格中任何應(yīng)用程序的所有出站和入站流量都通過Envoy代理重新路由。
2.mTLS發(fā)生在客戶端Envoy代理和服務(wù)器端Envoy代理之間。
3.客戶端Envoy代理將嘗試通過交換證書和證明其身份來連接服務(wù)器端Envoy代理。
4.一旦身份驗證階段成功完成,就會在客戶端和服務(wù)端Envoy代理之間建立TCP連接,以執(zhí)行加密通信。
需要注意的是,使用Istio的mTLS可以在所有級別上實現(xiàn):應(yīng)用程序、名稱空間或網(wǎng)格范圍。
Istio Service Mesh中的證書管理和輪換Istio通過向附加到應(yīng)用程序的Envoy代理頒發(fā)X.509證書來提供更強的身份。證書管理和輪換由與Envoy代理在同一容器中運行的Istio代理完成。Istio代理與Istio的控制平臺Istiod對話,以有效地分發(fā)帶有公鑰的數(shù)字證書。以下是Istio中證書管理的詳細(xì)階段:
1.Istio代理生成公鑰對(公鑰和私鑰),然后將公鑰發(fā)送到Istio控制平臺進行簽名。這稱為證書簽名請求(CSR)。
2.Istiod有一個組件(早期的Galley)作為證書頒發(fā)機構(gòu)(CA)。Istiod驗證請求中的公鑰、簽名并向Istio代理頒發(fā)數(shù)字證書。
3.當(dāng)需要mTLS連接時,Envoy代理使用Envoy秘密發(fā)現(xiàn)服務(wù)(SDS) API從Istio代理獲取證書。
4.Istio代理觀察特使使用的證書的過期。當(dāng)證書到期時,代理向Istiod發(fā)起證書簽名請求(CSR)。
使用開源Istio實現(xiàn)網(wǎng)絡(luò)安全微服務(wù)架構(gòu)是當(dāng)今的標(biāo)準(zhǔn)。應(yīng)用程序的分布式特性為網(wǎng)絡(luò)攻擊者提供了更大的攻擊面,因為這些應(yīng)用程序通過網(wǎng)絡(luò)相互通信。在這種情況下,安全性不能是事后才考慮的事項,因為它可能導(dǎo)致災(zāi)難性的數(shù)據(jù)泄露。使用Istio實現(xiàn)mTLS是確保云原生應(yīng)用程序之間通信安全的有效方法。Splunk、Airbnb和Salesforce等許多行業(yè)領(lǐng)先的公司都使用開源的Istio來啟用mTLS并增強其應(yīng)用程序的安全性。
原文標(biāo)題:What Is mTLS? How To Implement It With Istio,作者:Debasree Panda
標(biāo)簽: