Nacosエンジンは、転送されるデータのセキュリティを保護するために、Transport Layer Security (TLS) をサポートしています。 TLSは、ネットワーク通信における送信データのセキュリティを確保するために設計された一般的な暗号化プロトコルです。 TLS機能が有効になると、Nacosクライアントとサーバー間で送信されるすべてのデータが暗号化され、送信中に機密情報が盗まれたり改ざんされたりするのを防ぎます。
前提条件
Microservices Engine (MSE) がアクティブ化されていること。 詳細については、「Activate MSE」をご参照ください。
バージョン 2.1.2.1 以降のNacosエンジンが作成されていること。 詳細については、「Nacos エンジンを作成する」をご参照ください。 エンジンバージョンが 2.1.2.1 より前の場合は、エンジンバージョンを 2.1.2.1 以降にアップグレードしてください。 エンジンバージョンのアップグレード方法については、「Upgrade a Nacos version」をご参照ください。
Java Development Kit (JDK) のバージョンが 8u252 以降であること。
説明8u252 より前のバージョンのJDKはTLSと互換性がありません。 そのため、そのようなJDKを 8u252 以降にアップグレードする必要があります。 JDKバージョンをアップグレードできない場合は、JDKにバンドルされていないNacosクライアントを使用できます。 詳細については、このトピックの「JDKにバンドルされていないNacosクライアントを使用するにはどうすればよいですか?」をご参照ください。
NacosクライアントがJDKにバンドルされていない場合は、OpenSSLをSSLプロバイダーとして使用できます。 この場合、
nacos.remote.client.rpc.tls.providerパラメーターを削除する必要があります。 // Remove the nacos.remote.client.rpc.tls.provider parameter.JDKにバンドルされていないNacosクライアントの場合、必要なサードパーティ製パッケージはシェーディングされていません。 そのため、パッケージの競合を解決する必要がある場合があります。
手順 1:Nacosパラメーターを変更する
MSEコンソール にログインし、上部のナビゲーションバーでリージョンを選択します。
左側のナビゲーションペインで、マイクロサービスの登録 > インスタンス を選択します。 インスタンスの名前をクリックします。
左側のナビゲーションペインで、[パラメーター設定] をクリックします。 表示されるページで、[編集] をクリックし、[tlsenabled] パラメーターを [はい] に設定して、[保存してインスタンスを再起動] をクリックします。
Nacosインスタンスを再起動すると、サーバーはTLS対応のNacosクライアントをサポートできるようになります。
手順 2:Nacosクライアントをアップグレードする
バージョン 2.2.3 以降のNacosクライアントはTLSをサポートしています。
Nacosクライアントのバージョンを 2.2.3 にアップグレードします。 サンプルコード:
<dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>2.2.3</version> </dependency>TLS関連パラメーターを設定してTLSを有効にします。 // Configure TLS-related parameters to enable TLS.以下の方法で、優先順位の高い順に
TLS関連パラメーターを設定できます。.propertiesファイル > JVMパラメーター > 環境変数。 ビジネス要件に基づいて方法を選択できます。.propertiesファイルを使用します。 NacosConfigServiceまたはNacosNamingServiceを作成するときに、.propertiesファイルでTLS関連パラメーターを指定します。
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のTLS関連パラメーターを設定できます。
JVMパラメーターを設定します。
-Dnacos.remote.client.rpc.tls.enable=true-Dnacos.remote.client.rpc.tls.trustAll=true-Dnacos.remote.client.rpc.tls.provider=JDK
この方法は、Java仮想マシン (JVM) プロセスレベルで使用されます。 JVMプロセスでは、
TLS関連のJVMパラメーターは、.propertiesファイルでTLS関連パラメーターが指定されていないNacosConfigServiceとNacosNamingServiceに有効です。
環境変数を設定します。
nacos_remote_client_rpc_tls_enable=truenacos_remote_client_rpc_tls_trustAll=truenacos_remote_client_rpc_tls_provider=JDK
この方法はサーバーレベルで使用されます。 JVMパラメーターまたは
.propertiesファイルで指定されていないTLS関連パラメーターが有効になります。
TLSが有効になっていることを確認します。
Nacosクライアントの起動ログを表示します。
Nacosクライアントが起動すると、
{user.home}/logs/nacos/ディレクトリの remote.log ファイルに設定パラメーターが一覧表示されます。 // Configuration parameters are listed in the remote.log file in the {user.home}/logs/nacos/ directory.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が有効になっていることを示します。 クライアントが正常に起動し、NacosConfigServiceが想定どおりにデータの読み取りと書き込みを行う場合、データ通信でTLSが有効になっています。tcpdumpコマンドを実行してパケットをキャプチャします。 // Run the tcpdump command to capture packets.tcpdumpコマンドを実行してパケットをキャプチャし、コマンドで出力ファイルが格納されるディレクトリを指定できます。 たとえば、次のtcpdumpコマンドを実行すると、キャプチャされたコンテンツは /tmp/ ディレクトリのtcptrace.capファイルに格納されます。 ファイル名とディレクトリはカスタマイズできます。 // For example, if you run the following tcpdump command, the captured content is stored in the tcptrace.cap file in the /tmp/ directory. You can customize the file name and directory.sudo tcpdump -i any -w /tmp/tcptrace.cap -p 9848Wiresharkなどのパケット分析ツールを使用して、上記のファイルを解析します。 キャプチャされたパケットがTCP/TLSパケットの場合、TLSは有効になっています。 // If captured packets are TCP/TLS packets, TLS is enabled.
FAQ
JDKにバンドルされていないNacosクライアントを使用するにはどうすればよいですか?
関連する依存関係を追加します。 依存関係の例: // Sample dependencies:
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>2.2.3</version>
<classifier>pure</classifier>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-common</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-api</artifactId>
<version>2.2.3</version>
</dependency>NacosエンジンでTLSが有効になっている後、 2.2.3 より前のバージョンのNacosクライアントはTLSをサポートしますか?
この場合、 2.2.3 より前のバージョンのNacosクライアントはTLSをサポートしていません。 Nacosクライアントのバージョンを 2.2.3 以降にアップグレードする必要があります。
TLS対応のNacosエンジンは、 2.2.3 より前のバージョンのNacosクライアントと互換性がありますか?
デフォルトでは、TLS対応のNacosエンジンは、 2.2.3 より前のバージョンのNacosクライアントと互換性があります。
MSE Nacosインスタンスは、一方向TLSまたはmTLSをサポートしていますか?
MSE Nacosインスタンスは一方向TLSをサポートしています。 クライアントはサーバーを認証しますが、サーバーはクライアントを認証しません。
クライアントがトラストオールモードを使用するのはなぜですか?
トラストオールモードは、クライアントがTLSを有効にするための簡単な方法を提供します。 より高いセキュリティ要件がある場合は、DingTalkグループ (ID: 43525005207) に参加してMSEテクニカルサポートエンジニアに連絡し、MSE公式CA証明書を追加して、証明書を信頼できるCAファイルとして指定するように依頼してください。 TLS関連パラメーターの形式:
.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);
どうすればよいですか?NotSslRecordException:SSL/TLSレコードではありませんNacosクライアントにログインしているのは誰ですか?
ログ情報は、サーバーから返されたパケットがTLS形式ではないことを示しています。 この問題は、サーバーでTLSが有効になっていないために発生します。 この問題に対処するには、サーバーでTLSを有効にします。 詳細については、このトピックの「手順 1:Nacosパラメーターを変更する」をご参照ください。