Skip to main content

Certificado Let’s Encrypt para servidor sin servidor web (ElasticSearch)

Introducción

Trabajar con software que requiere o debería requerir el trabajo mediante protocolo seguro HTTPS, como es el caso de ElasticSearch 8.X y superiores, hace imprescindible el utilizar certificados SSL.

Caso ElasticSearch sin servidor web

Las nueva version 8.X vienen configurada por defecto con la seguridad activada, y desactivarla puede ser un dolor de cabeza además de una irresponsabilidad.

Como es un servicio que ya no necesita de un proxy como nginx para usar kibana, o porque ni siquiera hemos instalado kibana, necesitamos crear un certificado basado en host sin servidor web.

Bueno, pues certbot ya dispone de una método automatizado para obtener el certificado del hostname, sin tener servidor web. Solo con que la ip resuelva en nuestra máquina podremos hacerlo.

Cerbot

Debemos elegir la opcion Other y seguir sus instrucciones

Instalador de Cerbot

Elegiremos la opción 1 Spin up a temporary webserver

[email protected]:~# 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): elk.mydomain.ovh
Renewing an existing certificate for elk.mydomain.ovh

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/elk.mydomain.ovh/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/elk.mydomain.ovh/privkey.pem
This certificate expires on 2022-10-02.
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Ubicación de los certificados y sus permisos

Let’s Encrypt ubica sus ficheros en /etc/letsencrypt/live/mydomain.tld/ y teniendo como propietario root. Esto los hace no leibles por Elasticseacrh o Kibana.

Ademas va generando sobre numeros consecutivos las distintas versiones y usando un sistema de enlaces simbolicos

Esto nos obliga a darle una vuelta algo complicada si queremos usar los certificados de Let’s Encrypt ya que las renovaciones deberemos tenerlas controladas.

A veces merece la pena la compra de un certificado de bajo coste y tener al menos un año de vida como admin de sistemas.

Copiar y cambiar propietario y permisos de los certificados

Elasticsearch

2 es el número de versión actual del certificado y sus ficheros.

cp /etc/letsencrypt/archive/elk.mydomain.ovh/*2.* /etc/elasticsearch/certs/
chmod 660 /etc/elasticsearch/certs/*
chown root:elasticsearch /etc/elasticsearch/certs/*
Kibana
mkdir /etc/kibana/certs
cp /etc/letsencrypt/archive/elk.mydomain.ovh/*2.* /etc/kibana/certs/
chmod 660 /etc/kibana/certs/*
chown root:elasticsearch /etc/kibana/certs/*

Editar los ficheros de configuracion

Después de editarlos deberemos hacer un restart de ambos demonios.

Elasticsearch

En mi caso es una configuracion en preproducción sin cluster. Ojo a esto.

Editamos /etc/elasticsearch/elasticsearch.yml teniendo en cuenta que estamos apuntando al certificado correcto.

xpack.security.enabled: true
xpack.security.enrollment.enabled: true
xpack.security.http.ssl:
 enabled: true
 keystore.path: certs/http.p12
xpack.http.ssl.key: certs/privkey2.pem
xpack.http.ssl.certificate: certs/fullchain2.pem
xpack.security.transport.ssl:
 enabled: true
 verification_mode: certificate
 keystore.path: certs/transport.p12
 truststore.path: certs/transport.p12
Kibana

Editamos /etc/kibana/kibana.yml

server.ssl.enabled: true
server.ssl.certificate: /etc/kibana/certs/fullchain2.pem
server.ssl.key: /etc/kibana/certs/privkey2.pem

Enlaces

Aviso

Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris

Si necesitas soporte profesional puedes contratar con Castris soporte profesional.