O Nacos oferece suporte a TLS para criptografar dados transmitidos entre clientes e servidores, evitando a interceptação ou adulteração de informações sensíveis.
Pré-requisitos
ou Ative o MSE.
Crie um mecanismo Nacos versão 2.1.2.1 ou posterior. Criar um mecanismo Nacos. Para atualizar uma versão anterior, consulte Atualizar a versão de um mecanismo Nacos.
-
A versão do Java Development Kit (JDK) deve ser 8u252 ou posterior.
NotaVersões do JDK anteriores à 8u252 apresentam problemas de compatibilidade com TLS. Atualize para a versão 8u252 ou posterior ou utilize um nacos-client puro. Como importar um nacos-client puro?.
Um nacos-client puro pode usar OpenSSL como provedor SSL, mas é necessário remover o parâmetro
nacos.remote.client.rpc.tls.provider.As versões puras do Nacos não aplicam shade em pacotes secundários dependentes. Talvez seja preciso resolver conflitos de pacotes.
Etapa 1: Modifique as configurações de parâmetros do Nacos
Faça login no console do MSE e selecione uma região na barra de navegação superior.
No painel de navegação à esquerda, escolha Microservices Registry > Instances. Clique em nome da instância.
-
No painel de navegação à esquerda, clique em Parameter Settings. Clique em Edit, defina o parâmetro TLSEnabled como Yes e clique em Save and Restart Instance.
Após a reinicialização, o servidor aceita conexões TLS de clientes Nacos.
Etapa 2: Atualizar o nacos-client
O uso de TLS exige o nacos-client 2.2.1 ou posterior.
-
Atualize o nacos-client para a versão 2.2.1 ou posterior.
<dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>2.2.1</version> </dependency> -
Defina os parâmetros
tlspara ativar o recurso TLS.Configure os parâmetros
tlsusando um dos métodos abaixo. Prioridade: arquivo de propriedades > parâmetros JVM > variáveis de ambiente.-
Defina os parâmetros em um arquivo de propriedades e passe-os ao criar instâncias de NacosConfigService ou 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");
Este método tem precedência sobre parâmetros JVM e variáveis de ambiente, aplicando-se no nível da instância NacosConfigService e NacosNamingService.
-
Configure parâmetros JVM.
-Dnacos.remote.client.rpc.tls.enable=true-Dnacos.remote.client.rpc.tls.trustAll=true-Dnacos.remote.client.rpc.tls.provider=JDK
Esta abordagem atua no nível do processo JVM para todas as instâncias de NacosConfigService e NacosNamingService sem substituições via arquivo de propriedades.
-
Utilize variáveis de ambiente.
nacos_remote_client_rpc_tls_enable=truenacos_remote_client_rpc_tls_trustAll=truenacos_remote_client_rpc_tls_provider=JDK
Essa configuração aplica-se no nível do servidor a todas as instâncias sem substituições por JVM ou arquivo de propriedades.
-
-
Verifique se a criptografia TLS está ativada.
-
Visualize os logs de inicialização.
Durante a inicialização, o nacos-client registra a configuração TLS em
{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}O campo
"enableTls":trueconfirma que o TLS está ativo. Se o cliente iniciar e ler/gravar configurações normalmente, a criptografia funciona corretamente. -
Capture pacotes de dados com o comando
tcpdump.Execute o
tcpdumppara capturar pacotes. O exemplo a seguir salva a saída em/tmp/tcptrace.cap. Ajuste o caminho conforme necessário.sudo tcpdump -i any -w /tmp/tcptrace.cap -p 9848Abra o arquivo no Wireshark ou ferramenta similar. Se o protocolo exibido for TCP&TLS, a criptografia está ativa.
-
Perguntas frequentes
Como importar um nacos-client puro?
Adicione as seguintes dependências:
<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>
Se o TLS estiver ativado no mecanismo do servidor, versões mais antigas do nacos-client são suportadas para criptografia?
Não. É necessário atualizar o nacos-client para a versão 2.2.1 ou posterior para habilitar a criptografia TLS.
Se o TLS estiver ativado no mecanismo do servidor, existem problemas de compatibilidade com versões mais antigas do nacos-client?
O mecanismo DPI inicia no modo de compatibilidade por padrão para permitir o acesso normal de clientes mais antigos sem TLS.
O MSE Nacos suporta autenticação unidirecional ou mútua?
O MSE Nacos suporta apenas autenticação unidirecional: o cliente verifica o servidor, mas o servidor não verifica o cliente.
Por que os clientes usam o modo trustAll?
O modo trustAll simplifica a configuração do TLS. Para maior rigor na segurança, entre em contato com o suporte técnico do MSE (ID do grupo DingTalk: 43525005207) para obter o certificado CA oficial do MSE e especifique-o como arquivo CA confiável:
Arquivo de propriedades:
nacos.remote.client.rpc.tls.trustCollectionChainPath=file:{filePath}Parâmetro JVM:
-Dnacos.remote.client.rpc.tls.trustCollectionChainPath=file:{filePath}Variável de ambiente:
nacos_remote_client_rpc_tls_trustCollectionChainPath=file:{filePath}
Prioridade dos parâmetros: arquivo de propriedades > parâmetros JVM > variáveis de ambiente.
Por que os parâmetros TLS injetados via arquivo de propriedades não têm efeito?
Os valores das propriedades TLS devem ser strings. Não passe valores booleanos.
Formato correto:
properties.put("nacos.remote.client.rpc.tls.enable","true");Formato incorreto:
properties.put("nacos.remote.client.rpc.tls.enable",true);
O que fazer se o log NotSslRecordException: not an SSL/TLS record aparecer nos logs do nacos-client?
O servidor retornou uma resposta não-TLS porque o TLS não está ativado nele. Ative o TLS no servidor para resolver esse problema. Etapa 1: Modifique as configurações de parâmetros do Nacos.