全部產品
Search
文件中心

Microservices Engine:Nacos TLS傳輸加密

更新時間:Dec 27, 2024

Nacos支援使用TLS(Transport Layer Security)來保護傳輸資料的安全性。TLS是一種常用的加密協議,能確保在網路通訊中傳輸的資料安全。開啟TLS功能後,Nacos用戶端和服務端之間的所有資料都將被加密,以防止敏感資訊在傳輸過程中被竊取或篡改。

前提條件

  • 開通MSE

  • 建立Nacos引擎且執行個體版本大於2.1.2.1。如果執行個體版本低於2.1.2.1,請將引擎版本升級至2.1.2.1及以上。具體操作,請參見升級引擎版本

  • JDK 8版本為u252及以上。

    說明

    jdk8 u252版本以下的JDK與TLS存在相容性問題,因此該版本以下的請升級JDK版本。如果無法升級JDK版本,請使用純淨版本nacos-client。具體操作,請參見如何引入純淨版nacos-client?

    • 純淨版nacos-client可使用OPENSSL作為SSL Provider,但需要將nacos.remote.client.rpc.tls.provider參數移除。

    • 純淨版本Nacos沒有對依賴二方包進行Shade,因此可能需要額外解決包衝突問題。

步驟一:修改Nacos參數設定

  1. 登入MSE註冊配置中心管理主控台,並在頂部功能表列選擇地區。

  2. 在左側導覽列,選擇注册配置中心 > 实例列表。單擊目標執行個體名稱。

  3. 在左側導覽列,單擊參數設定。單擊編輯,將TLSEnabled參數設定為,然後單擊儲存並重啟執行個體

    重啟後服務端便可支援TLS的Nacos用戶端。

步驟二:用戶端nacos-client升級

說明

nacos-client從2.2.1版本開始支援TLS傳輸鏈路加密。

  1. 升級至nacos-client 2.2.1版本。相關代碼如下所示。

    <dependency>
        <groupId>com.alibaba.nacos</groupId>
        <artifactId>nacos-client</artifactId>
        <version>2.2.1</version>
    </dependency>
  2. 設定tls參數,開啟TLS功能。

    tls參數有三種設定方式,優先順序為properties檔案 > JVM參數 > 環境變數。您可根據實際情況選擇參數設定方式。

    • 設定properties檔案。構建NacosConfigService和NacosNamingService時在properties檔案中傳遞參數。

      • properties.put("nacos.remote.client.rpc.tls.enable","true");

      • properties.put("nacos.remote.client.rpc.tls.trustAll","true");

      • properties.put("nacos.remote.client.rpc.tls.provider","JDK");

      該模式優先順序高於JVM參數和環境變數,可以控制在NacosConfigService和NacosNamingService執行個體維度。

    • 設定JVM參數。

      • -Dnacos.remote.client.rpc.tls.enable=true

      • -Dnacos.remote.client.rpc.tls.trustAll=true

      • -Dnacos.remote.client.rpc.tls.provider=JDK

      該模式的生效範圍控制在JVM進程維度,進程內沒有在properties屬性中指定tls參數的NacosConfigService和NacosNamingService均會生效。

    • 設定環境變數。

      • nacos_remote_client_rpc_tls_enable=true

      • nacos_remote_client_rpc_tls_trustAll=true

      • nacos_remote_client_rpc_tls_provider=JDK

      該模式的生效範圍控制在伺服器維度,所有沒有在JVM參數和properties屬性中指定tls參數的均會生效。

  3. 確認TLS加密生效。

    1. 查看開機記錄。

      nacos-client在啟動過程中會在{user.home}/logs/nacos/remote.log中列印啟動時的配置參數。

      2023-04-06 09:56:56.539 INFO [com.alibaba.nacos.client.Worker:c.a.n.c.r.c.g.GrpcClient] grpc client connection server:mse-xxx.nacos-ans.mse.aliyuncs.com ip,serverPort:9848,grpcTslConfig:{"sslProvider":"","enableTls":true,"mutualAuthEnable":false,"trustAll":true}

      "enableTls":true表示開啟TLS功能。如果用戶端正常啟動並且佈建服務讀寫正常,則表示資料通訊已經加密。

    2. 通過tcpdump命令抓取資料包。

      可以通過tcpdump命令抓取資料包並指定輸出檔案的路徑。tcpdump命令如下所示,內容會產生到/tmp/tcptrace.cap檔案中,檔案名稱和路徑支援自訂。

      sudo tcpdump -i any -w /tmp/tcptrace.cap -p 9848

      通過報文分析工具(例如Wireshark)解析上述檔案,如果報文中的參數格式為TCP&TLS,則表示已經加密。

常見問題

如何引入純淨版nacos-client?

相關代碼如下所示。

<dependency>
    <groupId>com.alibaba.nacos</groupId>
    <artifactId>nacos-client</artifactId>
    <version>2.2.1</version>
    <classifier>pure</classifier>
</dependency>
<dependency>
    <groupId>com.alibaba.nacos</groupId>
    <artifactId>nacos-common</artifactId>
    <version>2.2.1</version>
</dependency>
<dependency>
    <groupId>com.alibaba.nacos</groupId>
    <artifactId>nacos-api</artifactId>
    <version>2.2.1</version>
</dependency>

服務端引擎開啟TLS時,對於舊版本nacos-client是否支援加密?

nacos-client版本也需要同步升級才會進行資料轉送加密。

服務端引擎開啟TLS時,對於舊版本nacos-client是否有相容性問題?

引擎側預設以相容模式啟動,可以支援舊版本非TLS用戶端正常訪問。

當前MSE Nacos支援的認證模式是單向認證還是雙向認證?

當前MSE Nacos支援的是單向認證模式,用戶端認證服務端,服務端不會認證用戶端。

用戶端為什麼使用trustAll模式?

使用trustAll可以降低用戶端接入TLS的複雜度。如果對安全性有更高要求,可以諮詢MSE官方答疑(釘群:43525005207),引入MSE的官方CA認證並且指定其為信任的CA檔案。參數指定方式如下:

  • properties檔案:nacos.remote.client.rpc.tls.trustCollectionChainPath=file:{filePath}

  • JVM參數:-Dnacos.remote.client.rpc.tls.trustCollectionChainPath=file:{filePath}

  • 環境變數:nacos_remote_client_rpc_tls_trustCollectionChainPath=file:{filePath}

說明

參數優先順序:properties檔案 > JVM > 環境變數。

通過properties屬性檔案注入TLS參數為什麼沒有生效?

通過properties設定TLS參數時,屬性值類型需為String類型,請勿傳入boolean類型的值。

  • 正確的方式:properties.put("nacos.remote.client.rpc.tls.enable","true");

  • 錯誤的方式:properties.put("nacos.remote.client.rpc.tls.enable",true);

nacos-client日誌中,出現日誌NotSslRecordException: not an SSL/TLS record如何處理?

該日誌表示服務端返回的報文不是TLS格式,出現該異常情況是因為服務端沒有開啟TLS功能,需要開啟服務端TLS功能。具體操作,請參見修改Nacos參數設定