Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Cómo habilitar SSL con Let's Encrypt en un solo servidor de ClickHouse

Pasos a seguir

Los siguientes pasos pueden usarse para habilitar SSL en un único servidor de ClickHouse mediante Let's Encrypt, una autoridad de certificación (CA) gratuita, automatizada y abierta, diseñada para facilitar que cualquier persona proteja sus sitios web con HTTPS. Al automatizar el proceso de emisión y renovación de certificados, Let's Encrypt garantiza que los sitios web sigan siendo seguros sin necesidad de intervención manual.

  1. Verifique que tenga un registro DNS A o AAAA que apunte a su servidor. Esto puede hacerse con la herramienta de Linux dig. Por ejemplo, la respuesta para product-test-server.clickhouse-dev.com al usar el servidor DNS de Cloudflare 1.1.1.1:

dig @1.1.1.1 product-test-server.clickhouse-dev.com

; <<>> DiG 9.18.28-0ubuntu0.22.04.1-Ubuntu <<>> @1.1.1.1 product-test-server.clickhouse-dev.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22315
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;product-test-server.clickhouse-dev.com.    IN A

;; ANSWER SECTION:
product-test-server.clickhouse-dev.com. 300 IN A 34.248.59.9

;; Query time: 52 msec
;; SERVER: 1.1.1.1#53(1.1.1.1) (UDP)
;; WHEN: Thu Dec 12 09:37:33 UTC 2024
;; MSG SIZE  rcvd: 83

Observa la sección siguiente, que confirma la presencia de un registro A.

;; ANSWER SECTION:
product-test-server.clickhouse-dev.com. 300 IN A 34.248.59.9
  1. Abre el puerto 80 en tu servidor. Este puerto se utilizará para la renovación automática de certificados mediante el protocolo ACME con certbot. En AWS, esto se puede lograr modificando el grupo de seguridad asociado a la instancia.

Configuración del grupo de seguridad de AWS que muestra el puerto 80 abierto
  1. Instala certbot, por ejemplo, con apt

sudo apt install certbot
  1. Obtenga un certificado SSL

sudo certbot certonly
Saving debug log to /var/log/letsencrypt/letsencrypt.log

How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Spin up a temporary webserver (standalone)
2: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
Please enter the domain name(s) you would like on your certificate (comma and/or
space separated) (Enter 'c' to cancel): product-test-server.clickhouse-dev.com
Requesting a certificate for product-test-server.clickhouse-dev.com

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/product-test-server.clickhouse-dev.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/product-test-server.clickhouse-dev.com/privkey.pem
This certificate expires on 2025-03-12.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le

Introduce el nombre de dominio completo de tu servidor, por ejemplo product-test-server.clickhouse-dev.com, cuando se te solicite.

  1. Copia los certificados al directorio de ClickHouse.

echo '* * * * * root cp -u /etc/letsencrypt/live/product-test-server.clickhouse-dev.com/*.pem /etc/clickhouse-server/ && chown clickhouse:clickhouse /etc/clickhouse-server/*.pem && chmod 400 /etc/clickhouse-server/*.pem' | sudo tee /etc/cron.d/copy-certificates

Este comando configura una tarea cron para automatizar la gestión de los certificados SSL de Let's Encrypt para un servidor ClickHouse. Se ejecuta cada minuto como usuario root y copia los archivos .pem del directorio de Let's Encrypt al directorio de configuración del servidor ClickHouse, pero solo si se han actualizado. Después de copiarlos, el script cambia la propiedad de los archivos al usuario y grupo clickhouse, lo que garantiza que el servidor tenga el acceso necesario. También establece permisos seguros de solo lectura (chmod 400) en los archivos copiados para mantener una seguridad estricta de los archivos. Esto garantiza que el servidor ClickHouse siempre tenga acceso a los certificados SSL más recientes sin necesidad de intervención manual, manteniendo la seguridad y minimizando la sobrecarga operativa.

  1. Configure el uso de estos certificados en clickhouse-server.

echo "https_port: 8443
tcp_port_secure: 9440
openSSL:
 server:
 certificateFile: '/etc/clickhouse-server/fullchain.pem'
 privateKeyFile: '/etc/clickhouse-server/privkey.pem'
 disableProtocols: 'sslv2,sslv3,tlsv1,tlsv1_1'" | sudo tee /etc/clickhouse-server/config.d/ssl.yaml
  1. Reinicie el servidor de ClickHouse

sudo clickhouse restart
  1. Valide que ClickHouse pueda comunicarse por SSL

curl https://product-test-server.clickhouse-dev.com:8443/

Ok.

Para que este último paso funcione, es posible que tengas que asegurarte de que el puerto 8443 sea accesible; por ejemplo, incluyéndolo en tu grupo de seguridad de AWS. Como alternativa, si solo quieres acceder a ClickHouse desde el servidor, modifica tu archivo hosts; es decir:

echo "127.0.0.1 product-test-server.clickhouse-dev.com" | sudo tee -a /etc/hosts

Lo siguiente también debería funcionar si se conecta desde la máquina local en la que se está ejecutando ClickHouse. Para conectarse a través de product-test-server.clickhouse-dev.com, abra el puerto 9440 en su:

clickhouse client --secure --user default --password <password>
Navigation