Esta página no se aplica a ClickHouse Cloud. El procedimiento que se documenta aquí está automatizado en los servicios de ClickHouse Cloud.
La implementación de TLS es compleja y hay muchas opciones que se deben tener en cuenta para garantizar una implementación totalmente segura y robusta. Este es un tutorial básico con ejemplos de configuración básica de TLS. Consulte con su equipo de PKI/seguridad para generar los certificados adecuados para su organización.Revise este tutorial básico sobre el uso de certificados para obtener una introducción general.
Crear una implementación de ClickHouse
Esta guía se redactó con Ubuntu 20.04 y con ClickHouse instalado en los siguientes hosts mediante el paquete DEB (con apt). El dominio esmarsnet.local:| Host | Dirección IP |
|---|---|
chnode1 | 192.168.1.221 |
chnode2 | 192.168.1.222 |
chnode3 | 192.168.1.223 |
Consulta la Quick Start para obtener más información sobre cómo instalar ClickHouse.
Crear certificados TLS
El uso de certificados autofirmados es solo con fines de demostración y no debería usarse en producción. Las solicitudes de certificados deben crearse para que las firme la organización y validarse mediante la cadena de la CA que se configurará en la configuración. No obstante, estos pasos pueden usarse para configurar y probar la configuración, y luego reemplazarse por los certificados reales que se vayan a utilizar.
-
Genere una clave que se utilizará para la nueva CA:
-
Genere un nuevo certificado de CA autofirmado. Lo siguiente creará un nuevo certificado que se utilizará para firmar otros certificados con la clave de la CA:
Haga una copia de seguridad de la clave y del certificado de CA en una ubicación segura fuera del clúster. Después de generar los certificados de los nodos, la clave debe eliminarse de los nodos del clúster.
-
Verifique el contenido del nuevo certificado de CA:
-
Cree una solicitud de certificado (CSR) y genere una clave para cada nodo:
-
Con la CSR y la CA, cree nuevos pares de certificado y clave:
-
Verifique en los certificados los campos subject e issuer:
-
Compruebe que los nuevos certificados se validan con el certificado de la CA:
Cree y configure un directorio para almacenar certificados y claves.
Esto debe hacerse en cada nodo. Use los certificados y las claves apropiados en cada host.
-
Cree una carpeta en un directorio accesible para ClickHouse en cada nodo. Recomendamos usar el directorio de configuración predeterminado (por ejemplo,
/etc/clickhouse-server): -
Copie el certificado de la CA, el certificado del nodo y la clave correspondientes a cada nodo en el nuevo directorio
certs. -
Actualice el propietario y los permisos para que ClickHouse pueda leer los certificados:
Configurar el entorno con clústeres básicos mediante ClickHouse Keeper
Para este entorno de implementación, se utilizan las siguientes configuraciones de ClickHouse Keeper en cada nodo. Cada servidor tendrá su propio<server_id>. (Por ejemplo, <server_id>1</server_id> para el nodo chnode1, y así sucesivamente.)El puerto recomendado para ClickHouse Keeper es
9281. Sin embargo, el puerto es configurable y puede establecerse otro si este ya está en uso por otra aplicación en el entorno.Para obtener una explicación completa de todas las opciones, visita https://clickhouse.com/docs/operations/clickhouse-keeper/- Añada lo siguiente dentro de la etiqueta
<clickhouse>delconfig.xmldel servidor ClickHouse
Para entornos de producción, se recomienda utilizar un archivo de configuración
.xml independiente en el directorio config.d.
Para más información, visite https://clickhouse.com/docs/operations/configuration-files/Cuando ClickHouse Keeper está integrado en ClickHouse server (como se muestra arriba), Keeper usa la configuración de OpenSSL del servidor definida en la sección OpenSSL de Configurar interfaces TLS en nodos de ClickHouse. Si ejecuta ClickHouse Keeper como un proceso independiente, debe añadir una sección
<openSSL> al archivo de configuración de Keeper con el mismo certificado de la CA y la misma configuración del certificado y la clave del nodo. Consulte Configurar OpenSSL para ClickHouse Keeper independiente a continuación para obtener más información.-
Descomente y actualice la configuración de Keeper en todos los nodos, y establezca el indicador
<secure>en 1: -
Actualice y añada la siguiente configuración del clúster en
chnode1ychnode2.chnode3se usará para el quórum de ClickHouse Keeper.
Para esta configuración, solo hay configurado un clúster de ejemplo. Los clústeres de prueba de ejemplo deben eliminarse, comentarse o, si existe un clúster en pruebas, se debe actualizar el puerto y añadir la opción
<secure>. Deben establecerse <user y <password> si el usuario default se configuró inicialmente con una contraseña durante la instalación o en el archivo users.xml.-
Defina los valores de las macros para poder crear una tabla ReplicatedMergeTree de prueba. En
chnode1:Enchnode2:
Configurar interfaces TLS en nodos de ClickHouse
Los ajustes que aparecen a continuación se configuran en elconfig.xml del servidor ClickHouse-
Establezca el nombre para mostrar de la implementación (opcional):
-
Configure ClickHouse para que escuche en puertos externos:
-
Configure el puerto
httpsy deshabilite el puertohttpen cada nodo: -
Configure el puerto TCP seguro nativo de ClickHouse y deshabilite el puerto no seguro predeterminado en cada nodo:
-
Configure el puerto
interserver httpsy deshabilite el puerto no seguro predeterminado en cada nodo: - Configure OpenSSL con certificados y rutas
Cada nombre de archivo y ruta debe actualizarse para que coincida con el nodo en el que se está realizando la configuración.
Por ejemplo, actualice la entrada
<certificateFile> para que sea chnode2.crt al configurar el host chnode2.-
Configura TLS para gRPC en cada nodo:
Para obtener más información, visita https://clickhouse.com/docs/interfaces/grpc/
-
Configura ClickHouse client en al menos uno de los nodos para que use TLS en las conexiones en su propio archivo
config.xml(de forma predeterminada, en/etc/clickhouse-client/): -
Deshabilita los puertos de emulación predeterminados para MySQL y PostgreSQL:
Pruebas
-
Inicie todos los nodos, uno por uno:
-
Verifique que los puertos seguros estén activos y en escucha; debería verse similar a este ejemplo en cada nodo:
Puerto de ClickHouse Descripción 8443 interfaz HTTPS 9010 puerto HTTPS entre servidores 9281 puerto seguro de ClickHouse Keeper 9440 protocolo TCP Native seguro 9444 puerto Raft de ClickHouse Keeper -
Verifique el estado de ClickHouse Keeper
Los comandos típicos de 4 letter word (4lW) no funcionarán con
echosin TLS; a continuación se explica cómo usar estos comandos conopenssl.- Inicie una sesión interactiva con
openssl
- Inicie una sesión interactiva con
-
En la sesión de OpenSSL, envíe los comandos 4LW
-
Inicie el cliente de ClickHouse con la opción
--securey el puerto TLS: -
Inicie sesión en la UI de Play mediante la interfaz
httpsenhttps://chnode1.marsnet.local:8443/play.
el navegador mostrará un certificado no confiable, ya que se accede a él desde una estación de trabajo y los certificados no están en los almacenes de CA raíz de la máquina cliente.
Al usar certificados emitidos por una autoridad pública o una CA empresarial, debería aparecer como de confianza.
-
Cree una tabla replicada:
-
Añade un par de filas en
chnode1: -
Verifique la replicación consultando las filas en
chnode2:
Configurar OpenSSL para ClickHouse Keeper en modo independiente
tcp_port_secure) ni para la replicación Raft entre nodos de Keeper.
Agregue la siguiente sección <openSSL> al archivo de configuración de ClickHouse Keeper en modo independiente en cada nodo:
Cada nombre de archivo debe actualizarse para que coincida con el nodo en el que se está realizando la configuración.
Por ejemplo, actualice la entrada
<certificateFile> para que sea chnode2.crt al configurar el host chnode2.<server> se utiliza para las conexiones entrantes de los clientes en el puerto seguro de Keeper (tcp_port_secure). La sección <client> se utiliza para las conexiones salientes entre nodos de Keeper durante la replicación de Raft.
Las rutas de los certificados indicadas arriba usan
/etc/clickhouse-keeper/certs/, que es la ruta típica para instalaciones de Keeper en modo independiente. Si instaló Keeper en una ruta distinta, ajústela según corresponda. Los certificados en sí son los mismos que se crearon en el paso 2.Modos de verificación de OpenSSL y manejadores de certificados
<openSSL> admite varias opciones para <verificationMode> y <invalidCertificateHandler> que controlan cómo ClickHouse valida los certificados TLS. Estos ajustes se aplican a clickhouse-server, clickhouse-client y ClickHouse Keeper en modo independiente.
Modos de verificación
<verificationMode> en la sección <server> o <client> de <openSSL>:
| Modo | Descripción |
|---|---|
none | Sin verificación de certificados. La conexión está cifrada, pero no se comprueba la identidad del peer. Úselo solo para pruebas. |
relaxed | Verifica el certificado del peer si se presenta, pero no falla si no se proporciona ninguno. |
once | En el lado del servidor, verifica el certificado del cliente solo durante el handshake inicial y omite la renegociación. En el lado del cliente, se comporta igual que relaxed. |
strict | Requiere y verifica por completo el certificado del peer. La conexión falla si el certificado no está presente, ha caducado o no está firmado por una CA de confianza. Recomendado para producción. |
Manejadores de certificados no válidos
<invalidCertificateHandler> en la sección <server> o <client> de <openSSL>. Este manejador determina qué ocurre cuando falla la verificación del certificado. En el lado del servidor, controla la respuesta ante certificados de cliente no válidos. En el lado del cliente, controla la respuesta ante certificados de servidor no válidos.
| Manejador | Descripción |
|---|---|
RejectCertificateHandler | Rechaza la conexión si el certificado no es válido. Esta es la configuración predeterminada y recomendada. |
AcceptCertificateHandler | Acepta la conexión incluso si el certificado no es válido. Úsalo solo para pruebas. |
Ejemplo: desactivar la verificación de certificados
verificationMode en none y use AcceptCertificateHandler.
En clickhouse-client, también puede usar la opción de CLI --accept-invalid-certificate, que aplica ambos ajustes automáticamente.
clickhouse-client (/etc/clickhouse-client/config.xml):
config.xml o un archivo en config.d/). La sección <server> aún requiere las rutas al certificado y a la clave privada, porque el servidor debe presentar su propio certificado a los clientes, incluso cuando no verifica el de estos: