Esta página não se aplica ao ClickHouse Cloud. O procedimento descrito aqui é automatizado nos serviços do ClickHouse Cloud.
A implementação de TLS é complexa, e há muitas opções a considerar para garantir uma implantação totalmente segura e robusta. Este é um tutorial básico com exemplos de configuração básica de TLS. Consulte sua equipe de PKI/segurança para gerar os certificados corretos para a sua organização.Consulte este tutorial básico sobre o uso de certificados para ter uma visão geral introdutória.
1
Criar uma Implantação do ClickHouse
Este guia foi escrito com base no Ubuntu 20.04 e no ClickHouse instalado nos hosts a seguir por meio do pacote DEB (viaapt). O domínio é marsnet.local:Consulte o Quick Start para mais detalhes sobre como instalar o ClickHouse.
2
Criar certificados TLS
O uso de certificados autoassinados é apenas para fins de demonstração e não deve ser feito em produção. As solicitações de certificado devem ser criadas para serem assinadas pela organização e validadas usando a cadeia da CA que será configurada nas settings. No entanto, estas etapas podem ser usadas para configurar e testar as settings e, depois, substituídas pelos certificados reais que serão usados.
-
Gere uma chave que será usada para a nova CA:
-
Gere um novo certificado de CA autoassinado. O comando a seguir criará um novo certificado que será usado para assinar outros certificados usando a chave da CA:
Faça backup da chave e do certificado da CA em um local seguro fora do cluster. Depois de gerar os certificados dos nós, a chave deverá ser excluída dos nós do cluster.
-
Verifique o conteúdo do novo certificado da CA:
-
Crie uma solicitação de certificado (CSR) e gere uma chave para cada nó:
-
Usando o CSR e a CA, crie novos pares de certificados e chaves:
-
Verifique nos certificados o subject e o issuer:
-
Verifique se os novos certificados são validados em relação ao certificado da CA:
3
Crie e configure um diretório para armazenar certificados e chaves.
Isso deve ser feito em cada nó. Use os certificados e as chaves apropriados em cada host.
-
Crie uma pasta em um diretório acessível ao ClickHouse em cada nó. Recomendamos usar o diretório de configuração padrão (por exemplo,
/etc/clickhouse-server): -
Copie o certificado da CA, o certificado do nó e a chave correspondente a cada nó para o novo diretório
certs. -
Atualize o proprietário e as permissões para permitir que o ClickHouse leia os certificados:
4
Configure o ambiente com clusters básicos usando o ClickHouse Keeper
Para este ambiente de implantação, as seguintes configurações do ClickHouse Keeper são utilizadas em cada nó. Cada servidor terá seu próprio<server_id>. (Por exemplo, <server_id>1</server_id> para o nó chnode1, e assim por diante.)A porta recomendada para o ClickHouse Keeper é
9281. No entanto, a porta é configurável e pode ser alterada caso já esteja em uso por outro aplicativo no ambiente.Para uma explicação completa de todas as opções, visite https://clickhouse.com/docs/operations/clickhouse-keeper/- Adicione o seguinte dentro da tag
<clickhouse>noconfig.xmldo servidor ClickHouse
Para ambientes de produção, recomenda-se usar um arquivo de configuração
.xml separado no diretório config.d.
Para mais informações, acesse https://clickhouse.com/docs/operations/configuration-files/Quando o ClickHouse Keeper é incorporado ao servidor ClickHouse (como mostrado acima), o Keeper usa a configuração do OpenSSL do servidor, definida na seção OpenSSL de Configurar interfaces TLS nos nós do ClickHouse. Se você executar o ClickHouse Keeper como um processo standalone, deverá adicionar uma seção
<openSSL> ao arquivo de configuração do Keeper com o mesmo certificado da CA e as mesmas configurações de certificado/chave do nó. Consulte Configurar OpenSSL para ClickHouse Keeper standalone abaixo para mais detalhes.-
Descomente e atualize as configurações do Keeper em todos os nós e defina a opção
<secure>como 1: -
Atualize e adicione as seguintes configurações de cluster em
chnode1echnode2.chnode3será usado para o quorum do ClickHouse Keeper.
Para esta configuração, apenas um cluster de exemplo está configurado. Os clusters de teste de exemplo devem ser removidos, comentados ou, se houver um cluster existente sendo testado, a porta deverá ser atualizada e a opção
<secure> deverá ser adicionada. <user e <password> devem ser definidos se o usuário default tiver sido inicialmente configurado com uma senha durante a instalação ou no arquivo users.xml.-
Defina os valores das macros para conseguir criar uma tabela ReplicatedMergeTree para testes. Em
chnode1:Nochnode2:
5
Configurar interfaces TLS nos nós do ClickHouse
As configurações abaixo são definidas noconfig.xml do servidor ClickHouse-
Defina o nome de exibição da implantação (opcional):
-
Configure o ClickHouse para escutar em portas externas:
-
Configure a porta
httpse desabilite a portahttpem cada nó: -
Configure a porta TCP segura nativa do ClickHouse e desabilite a porta não segura padrão em cada nó:
-
Configure a porta
interserver httpse desabilite a porta não segura padrão em cada nó: - Configure o OpenSSL com certificados e caminhos
Cada nome de arquivo e caminho deve ser atualizado para corresponder ao nó em que está sendo configurado.
Por exemplo, atualize a entrada
<certificateFile> para chnode2.crt ao configurar no host chnode2.-
Configure o TLS para gRPC em todos os nós:
Para mais informações, acesse https://clickhouse.com/docs/interfaces/grpc/
-
Configure o clickhouse client em pelo menos um dos nós para usar TLS nas conexões, no respectivo arquivo
config.xml(por padrão, em/etc/clickhouse-client/): -
Desative as portas de emulação padrão para MySQL e PostgreSQL:
6
Testes
-
Inicie todos os nós, um de cada vez:
-
Verifique se as portas seguras estão ativas e em escuta; o resultado deve ser semelhante a este exemplo em cada nó:
-
Verifique a saúde do ClickHouse Keeper
Os comandos típicos de 4 letras (4lW) não funcionam com
echosem TLS; veja como usar esses comandos comopenssl.- Inicie uma sessão interativa com
openssl
- Inicie uma sessão interativa com
-
Execute os comandos 4LW na sessão do OpenSSL
-
Inicie o cliente do ClickHouse usando a flag
--securee a porta TLS: -
Faça login na UI do Play pela interface
httpsemhttps://chnode1.marsnet.local:8443/play.
o navegador mostrará um certificado não confiável, já que está sendo acessado a partir de uma estação de trabalho e os certificados não estão nos repositórios de CA raiz da máquina cliente.
Ao usar certificados emitidos por uma autoridade pública ou por uma CA corporativa, ele deverá aparecer como confiável.
-
Crie uma tabela replicada:
-
Adicione duas linhas em
chnode1: -
Verifique a replicação exibindo as linhas em
chnode2:
Configure o OpenSSL para o ClickHouse Keeper autônomo
tcp_port_secure) nem para a replicação Raft entre os nós do Keeper.
Adicione a seguinte seção <openSSL> ao arquivo de configuração do ClickHouse Keeper autônomo em cada nó:
Cada nome de arquivo deve ser atualizado para corresponder ao nó em que está sendo configurado.
Por exemplo, atualize a entrada
<certificateFile> para chnode2.crt ao configurar o host chnode2.<server> é usada para conexões de cliente de entrada na porta segura do Keeper (tcp_port_secure). A seção <client> é usada para conexões de saída entre nós do Keeper durante a replicação Raft.
Os caminhos dos certificados acima usam
/etc/clickhouse-keeper/certs/, que é o caminho típico para instalações autônomas do Keeper. Se você instalou o Keeper em um caminho diferente, ajuste conforme necessário. Os certificados em si são os mesmos criados na etapa 2.Modos de verificação do OpenSSL e manipuladores de certificado
<openSSL> oferece várias opções para <verificationMode> e <invalidCertificateHandler>, que controlam como o ClickHouse valida certificados TLS. Essas configurações se aplicam ao clickhouse-server, clickhouse-client e ao ClickHouse Keeper autônomo.
Modos de verificação
<verificationMode> na seção <server> ou <client> de <openSSL>:
Manipuladores de certificados inválidos
<invalidCertificateHandler> na seção <server> ou <client> de <openSSL>. Esse manipulador determina o que acontece quando a verificação do certificado falha. No lado do servidor, ele controla a resposta a certificados de cliente inválidos. No lado do cliente, ele controla a resposta a certificados de servidor inválidos.
Exemplo: desativando a verificação de certificados
verificationMode como none e use AcceptCertificateHandler.
No clickhouse-client, você também pode usar a flag de CLI --accept-invalid-certificate, que aplica ambas as configurações automaticamente.
clickhouse-client (/etc/clickhouse-client/config.xml):
config.xml ou um arquivo em config.d/). A seção <server> ainda exige os caminhos para o certificado e a chave, porque o servidor precisa apresentar seu próprio certificado aos clientes, mesmo quando não está verificando os certificados deles: