Nacos は TLS をサポートしており、クライアントとサーバー間で転送されるデータを暗号化することで、機密情報の盗聴や改ざんを防止します。
前提条件
-
、または MSE を有効化する。
-
バージョン 2.1.2.1 以降の Nacos エンジンが作成済みであること。Nacos エンジンを作成する。以前のバージョンをアップグレードする場合は、「Nacos エンジンのバージョンをアップグレードする」をご参照ください。
-
Java Development Kit (JDK) のバージョンが 8u252 以降であること。
説明8u252 より前の JDK バージョンには TLS の互換性の問題があります。8u252 以降にアップグレードするか、代わりに pure nacos-client を使用してください。詳細については、「pure nacos-client をインポートするにはどうすればよいですか?」をご参照ください。
-
pure nacos-client は SSL プロバイダーとして OpenSSL を使用できますが、
nacos.remote.client.rpc.tls.providerパラメーターを削除する必要があります。 -
Pure Nacos のバージョンは依存するセカンドパーティパッケージをシェードしません。パッケージの競合を解決する必要がある場合があります。
-
ステップ 1:Nacos パラメータ設定の変更
[MSE コンソール] にログインし、上部のナビゲーションバーでリージョンを選択します。
左側のナビゲーションウィンドウで、マイクロサービスの登録 > インスタンス を選択します。インスタンスの名前をクリックします。
-
左側のナビゲーションペインで、[パラメーター設定] をクリックします。[編集] をクリックし、[TLSEnabled] パラメーターを [はい] に設定してから、[保存してインスタンスを再起動] をクリックします。
再起動後、サーバーは Nacos クライアントからの TLS 接続を受け付けます。
ステップ 2:nacos-client のアップグレード
TLS を使用するには、nacos-client 2.2.1 以降が必要です。
-
nacos-client をバージョン 2.2.1 以降にアップグレードします。
<dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>2.2.1</version> </dependency> -
TLS 機能を有効にするために、
tlsパラメーターを設定します。次のいずれかの方法で
tlsパラメーターを設定します。優先順位:プロパティファイル > JVM パラメーター > 環境変数。-
プロパティファイルでパラメーターを設定します。NacosConfigService または NacosNamingService インスタンスの構築時に渡します。
-
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 プロセスレベルで適用され、プロパティファイルでの上書きがないすべての NacosConfigService および NacosNamingService インスタンスに適用されます。
-
-
環境変数を設定します。
-
nacos_remote_client_rpc_tls_enable=true -
nacos_remote_client_rpc_tls_trustAll=true -
nacos_remote_client_rpc_tls_provider=JDK
この方法はサーバーレベルで適用され、JVM またはプロパティファイルでの上書きがないすべてのインスタンスに適用されます。
-
-
-
TLS 暗号化が有効になっていることを確認します。
-
起動ログを確認します。
nacos-client は起動時に TLS 設定を
{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 が有効であることを確認できます。クライアントが起動し、設定の読み書きが通常どおり行える場合、暗号化は機能しています。 -
tcpdumpコマンドでデータパケットをキャプチャします。tcpdumpを実行してパケットをキャプチャします。次の例では、出力を/tmp/tcptrace.capに保存します。必要に応じてパスを調整してください。sudo tcpdump -i any -w /tmp/tcptrace.cap port 9848Wireshark などのツールでファイルを開きます。プロトコルに TCP & TLS と表示される場合、暗号化は有効です。
-
よくある質問
pure 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 バージョンはサポートされますか?
いいえ。TLS 暗号化を有効にするには、nacos-client を 2.2.1 以降にアップグレードする必要があります。
サーバー側エンジンで TLS を有効にした場合、古い nacos-client バージョンとの互換性の問題はありますか?
DPI エンジンは、TLS 非対応の古いクライアントによる通常のアクセスをサポートするため、デフォルトで互換モードで起動します。
MSE Nacos は片方向認証または相互認証をサポートしていますか?
MSE Nacos は片方向認証のみをサポートします。クライアントはサーバーを検証しますが、サーバーはクライアントを検証しません。
クライアントが trustAll モードを使用するのはなぜですか?
trustAll モードは TLS のセットアップを簡素化します。より厳格なセキュリティが必要な場合は、MSE テクニカルサポート (DingTalk グループ ID:43525005207) に連絡して公式の MSE CA 証明書を入手し、信頼する CA ファイルとして指定してください:
-
プロパティファイル:
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}
パラメーターの優先順位:プロパティファイル > JVM パラメーター > 環境変数。
プロパティファイルで設定した TLS パラメーターが有効にならない場合はどうすればよいですか?
TLS のプロパティ値は文字列である必要があります。ブール値を渡さないでください。
-
正しい形式:
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 を有効にしてください。詳細については、「ステップ 1:Nacos パラメータ設定の変更」をご参照ください。