mTLS Java

什麼是mTLS(mutual TLS)或是相互 TLS?

邱雍翔 Alvin Chiu 2024/04/29 18:48:27
2322

mTLS,全名相互驗證傳輸層安全性(mutual Transport Layer Security),是一種網路驗證方法。透過檢查網路連線雙方是否具有正確的私密金鑰,mTLS 確保了所有連線端點的身分合法性。此外,TLS 憑證中的資訊也可提供額外的驗證。 在 Zero Trust 安全框架中,mTLS 常用於驗證組織內的使用者、裝置和伺服器,可有效防止 API 的安全風險。

 

mTLS 如何運作?

在 TLS 中,Server Side 具有 TLS 憑證和公、私密金鑰對,而用戶端則沒有。典型的 TLS 運作方式如下:

  1. 用戶端連接到伺服器

  2. 伺服器提供其 TLS 憑證

  3. 用戶端驗證伺服器的憑證

  4. 用戶端和伺服器透過加密的 TLS 連線交換資訊

how tls works

不過,在 mTLS 中,用戶端和伺服器都有一個憑證,並且雙方都使用其公鑰/私鑰對進行驗證。與 TLS 相比, mTLS 中還有額外的步驟來驗證雙方 (增加的步驟以粗體標示):

  1. 用戶端連接到伺服器

  2. 伺服器提供其 TLS 憑證

  3. 用戶端驗證伺服器的憑證

  4. 用戶端提供其 TLS 憑證

  5. 伺服器驗證用戶端的憑證

  6. 伺服器授予存取權限

  7. 用戶端和伺服器透過加密的 TLS 連線交換資訊

how mtls works

實作 mTLS 的組織會擔任自己的憑證授權單位,這和標準的 TLS 有很大的區別。標準的 TLS,憑證授權單位是一個外部的組織,他們負責確認憑證擁有者是否合法地擁有相關的網域。而使用 mTLS 時,必須有一個根憑證 (root CA),才能使組織成為自己的憑證授權單位。

為了使用這個方法,授權用戶端和伺服器使用的憑證必須與根憑證相對應。這個根憑證是由組織自己建立的,也就是自我簽署的。需要注意的是,這個方法不適用於單向 TLS,因為必須由外部憑證授權單位簽發這些憑證。

 

為什麼使用 mTLS?

mTLS 有助於保障用戶端和伺服器之間的流量在兩個方向上都是安全和可信的,提供了額外的安全層給登入組織網路或應用程式的使用者。此外,它還可以驗證不遵循登入過程的用戶端裝置,例如物聯網(IoT)裝置。mTLS 可以預防各種攻擊,包括中間人攻擊、詐騙攻擊、認證填充、暴力攻擊、網路釣魚攻擊和惡意 API 請求。使用 mTLS 可以可靠地預防這些攻擊,保護組織的網路和應用程式。

 

為什麼網站使用了 TLS 卻沒有在整個網際網路上使用 mTLS?

就日常使用而言,單向驗證已足夠提供保護。在公用網路上,TLS 的目標是:

  1. 確保人們不造訪詐騙網站

  2. 保持私人資料通過各種網路的安全和加密

  3. 確保傳輸資料不被更改。僅驗證伺服器身分的單向 TLS 已可實現這些目標。

此外,將 TLS 憑證分發到所有終端使用者裝置將非常困難。產生、管理和驗證數十億個憑證,幾乎是不可能的任務。

但在較小的規模上,mTLS 對單個組織非常有用,尤其是當這些組織採用 Zero Trust 方法來確保網路安全時。由於 Zero Trust 方法預設不信任任何使用者、裝置或請求,因此組織必須在每次嘗試存取網路時對每個使用者、裝置和請求進行驗證。mTLS 透過驗證使用者和驗證裝置來幫助實現這一目標。

 

下一篇將以 Spring Boot 建立一支示範 API 並做 mTLS 設定示範。

參考來源:

1. 網路安全的基本知識 - wjohn1483.github.io

2. What Is mTLS? (tetrate.io)

邱雍翔 Alvin Chiu