文档

Nacos TLS传输加密

更新时间:

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参数设置

  • 本页导读 (1)
文档反馈