Búsqueda de sitios web

Servidor FreeIPA seguro con el certificado SSL Let's Encrypt


FreeIPA es una poderosa solución de código abierto creada para proporcionar una forma centralizada de administrar la autenticación, los almacenes de identidades, las políticas y las políticas de autorización en un dominio basado en Linux. Tenemos varios artículos que tratan sobre la instalación de FreeIPA Server en distintas distribuciones de Linux. En esta guía, analizaremos cómo puede proteger la interfaz web del servidor FreeIPA utilizando certificados SSL gratuitos Let's Encrypt.

Como requisito previo, necesitará una instalación funcional de FreeIPA Server en su sistema. Puede consultar nuestras guías en los enlaces a continuación:

  • Instale el servidor FreeIPA en Rocky Linux 8/CentOS 8
  • Instale el servidor FreeIPA en CentOS 7
  • Instalar y configurar el servidor FreeIPA en Rocky Linux 8

Una vez instalado el servidor FreeIPA, confirme que está funcionando obteniendo el ticket de Kerberos como usuario administrador:

$ sudo kinit admin
Password for [email :

$ sudo klist
Ticket cache: KCM:0
Default principal: admin@COMPUTINGFORGEEKS.COM

Valid starting       Expires              Service principal
08/02/202317:42:38  08/03/2023 17:42:31  krbtgt/COMPUTINGFORGEEKS.COM@COMPUTINGFORGEEKS.COM

Instalar el repositorio EPEL y Certbot

En los sistemas basados en RHEL, los paquetes Certbot están disponibles en el repositorio EPEL. Certbot está destinado a ser utilizado para obtener certificados Let's Encrypt y, luego, continuar renovando los certificados HTTPS del sitio.

Instale epel-release usando el siguiente comando:

$ sudo yum install epel-release
Dependencies resolved.
======================================================================================================================================================================================================
 Package                                            Architecture                                 Version                                           Repository                                    Size
======================================================================================================================================================================================================
Installing:
 epel-release                                       noarch                                       8-13.el8                                          extras                                        23 k

Transaction Summary
======================================================================================================================================================================================================
Install  1 Package

Total download size: 23 k
Installed size: 35 k
Is this ok [y/N]: y

Instale certbot a partir de entonces con el siguiente comando:

$ sudo yum install certbot python3-certbot-apache
....
Transaction Summary
======================================================================================================================================================================================================
Install  36 Packages

Total download size: 5.7 M
Installed size: 20 M
Is this ok [y/N]: y

Confirme que la instalación de la herramienta certbot fue exitosa:

$ certbot --version
certbot x.y.z

Servidor FreeIPA seguro con el certificado SSL Let's Encrypt

Solicitaremos certificados SSL de Let's Encrypt en lugar de utilizar los certificados autofirmados del servidor.

Haga una copia de seguridad de los certificados y claves privadas actuales del servidor FreeIPA antes de continuar:

sudo cp -r /var/lib/ipa/certs{,.bak}
sudo cp -r /var/lib/ipa/private{,.bak}

Instale el editor de archivos git, vim o nano

sudo yum -y install vim nano

Método 1: Asegure el servidor FreeIPA con Let's Encrypt usando el método manual

Siga los pasos a continuación.

Descargue e instale los certificados CA Let's Encrypt

Crear directorio de certificados:

sudo su -
mkdir freeipa-certs
cd freeipa-certs

Descargue los certificados de CA Let's Encrypt:

CERTS=("isrgrootx1.pem" "isrg-root-x2.pem" "lets-encrypt-r3.pem" "lets-encrypt-e1.pem" "lets-encrypt-r4.pem" "lets-encrypt-e2.pem")
for CERT in "${CERTS[@]}"
do
  curl -o $CERT "https://letsencrypt.org/certs/$CERT"
done

Instale los certificados de CA Let's Encrypt en el almacén de certificados FreeIPA:

CERTS=("isrgrootx1.pem" "isrg-root-x2.pem" "lets-encrypt-r3.pem" "lets-encrypt-e1.pem" "lets-encrypt-r4.pem" "lets-encrypt-e2.pem")
for CERT in "${CERTS[@]}"
do
  ipa-cacert-manage install $CERT
done

Salida de comando esperada:

Installing CA certificate, please wait
Verified CN=ISRG Root X1,O=Internet Security Research Group,C=US
CA certificate successfully installed
The ipa-cacert-manage command was successful
Installing CA certificate, please wait
Verified CN=ISRG Root X2,O=Internet Security Research Group,C=US
CA certificate successfully installed
The ipa-cacert-manage command was successful
Installing CA certificate, please wait
Verified CN=R3,O=Let's Encrypt,C=US
CA certificate successfully installed
The ipa-cacert-manage command was successful
Installing CA certificate, please wait
Verified CN=E1,O=Let's Encrypt,C=US
CA certificate successfully installed
The ipa-cacert-manage command was successful
Installing CA certificate, please wait
Verified CN=R4,O=Let's Encrypt,C=US
CA certificate successfully installed
The ipa-cacert-manage command was successful
Installing CA certificate, please wait
Verified CN=E2,O=Let's Encrypt,C=US
CA certificate successfully installed
The ipa-cacert-manage command was successful

Actualice las bases de datos de certificados IPA locales con certificados del servidor:

$ sudo ipa-certupdate
Systemwide CA database updated.
Systemwide CA database updated.
The ipa-certupdate command was successful

Obtenga certificados Let's Encrypt

Detenga el servicio httpd para liberar el puerto 80 requerido para obtener certificados.

sudo systemctl stop httpd

Luego ejecute Certbot para obtener los certificados Let's Encrypt:

EMAIL="your-email-address"
DOMAIN="idm.example.com"
sudo certbot certonly --standalone --preferred-challenges http --agree-tos -n -d $DOMAIN -m $EMAIL

Asegúrese de que el comando para la generación del certificado sea exitoso:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Requesting a certificate for idm.example.com
Performing the following challenges:
http-01 challenge for idm.example.com
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/idm.example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/idm.example.com/privkey.pem
   Your certificate will expire on 2023-10-27. To obtain a new or
   tweaked version of this certificate in the future, simply run
   certbot again. To non-interactively renew *all* of your
   certificates, run "certbot renew"
 - 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

Sus certificados deben almacenarse en el directorio /etc/letsencrypt/live/idm.example.com:

$ ls /etc/letsencrypt/live/idm.example.com
cert.pem  chain.pem  fullchain.pem  privkey.pem  README

Inicie el servidor httpd después de confirmar que se generaron los certificados requeridos:

sudo systemctl restart httpd

Agregue certificados SSL Let's Encrypt para usarlos en la interfaz de usuario web de FreeIPA:

DOMAIN="idm.example.com" # Set correct IdM hostname
sudo ipa-server-certinstall -w -d /etc/letsencrypt/live/$DOMAIN/privkey.pem /etc/letsencrypt/live/$DOMAIN/cert.pem --pin=''

Salida de ejecución del comando:

Directory Manager password:

Please restart ipa services after installing certificate (ipactl restart)
The ipa-server-certinstall command was successful

Reiniciar los servicios FreeIPA

$ sudo ipactl restart
Restarting Directory Service
Restarting krb5kdc Service
Restarting kadmin Service
Restarting httpd Service
Restarting ipa-custodia Service
Restarting pki-tomcatd Service
Restarting ipa-otpd Service
ipa: INFO: The ipactl command was successful

La confirmación del certificado SSL utilizado actualmente se puede realizar desde el terminal o el navegador web.

Usando OpenSSL:

$ openssl s_client -showcerts -verify 5 -connect $(hostname -f):443
verify depth is 5
CONNECTED(00000003)
depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = R3
verify return:1
depth=0 CN = idm.example.com
verify return:1
---
Certificate chain
 0 s:CN = idm.example.com
   i:C = US, O = Let's Encrypt, CN = R3
-----BEGIN CERTIFICATE-----


Desde la consola web:

Método 2: Asegure el servidor FreeIPA con Let's Encrypt usando un script bash

Si prefiere la instalación automática de certificados Let's Encrypt, clone el código de script de administración oficial de FreeIPA Let's Encrypt desde github:

$ git clone https://github.com/freeipa/freeipa-letsencrypt.git
Cloning into 'freeipa-letsencrypt'...
remote: Enumerating objects: 71, done.
remote: Counting objects: 100% (23/23), done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 71 (delta 6), reused 13 (delta 4), pack-reused 48
Unpacking objects: 100% (71/71), 18.71 KiB | 299.00 KiB/s, done.

Cambie al directorio creado:

cd freeipa-letsencrypt

Edite el script renew-le.sh y establezca la variable EMAIL:

$ vim renew-le.sh
EMAIL="input-your-email-address"

Dentro del script setup-le.sh, el FQDN del servidor FreeIPA está configurado con el nombre de host del servidor:

FQDN=$(hostname -f)

Asegúrese de que el siguiente comando devuelva el nombre de host como FQDN:

$ hostname -f
idm.example.com

Ejecute el script setup-le.sh para preparar la máquina:

sudo bash setup-le.sh

El script realizará las siguientes acciones:

  • Instale los certificados de CA Let's Encrypt en el almacén de certificados FreeIPA
  • Solicitar nuevo certificado para la interfaz web FreeIPA

Ejemplo de salida de ejecución de comando:

...
Installing CA certificate, please wait
Verified CN=R4,O=Let's Encrypt,C=US
CA certificate successfully installed
The ipa-cacert-manage command was successful
--2023-07-29 14:46:06--  https://letsencrypt.org/certs/lets-encrypt-e2.pem
Resolving letsencrypt.org (letsencrypt.org)... 34.194.149.67, 68.183.23.220, 2a05:d014:275:cb01:8909:43f0:2069:7b77, ...
Connecting to letsencrypt.org (letsencrypt.org)|34.194.149.67|:443... connected.
GnuTLS: Resource temporarily unavailable, try again.
GnuTLS: Resource temporarily unavailable, try again.
GnuTLS: Resource temporarily unavailable, try again.
HTTP request sent, awaiting response... 200 OK
Length: 1021 [application/x-pem-file]
Saving to: ‘/etc/ssl/idm.example.com/lets-encrypt-e2.pem’

/etc/ssl/idm.example.com/lets- 100%[================================================================================>]    1021  --.-KB/s    in 0s

2023-07-29 14:46:06 (13.3 MB/s) - ‘/etc/ssl/idm.example.com/lets-encrypt-e2.pem’ saved [1021/1021]

Installing CA certificate, please wait
Verified CN=E2,O=Let's Encrypt,C=US
CA certificate successfully installed
The ipa-cacert-manage command was successful

Reinicie el servicio httpd:

sudo systemctl restart httpd

Confirme que la ejecución del comando ipa-certupdate es exitosa:

$ sudo ipa-certupdate
Systemwide CA database updated.
Systemwide CA database updated.
The ipa-certupdate command was successful

Modificación del archivo de configuración del servidor web Apache para configurar el certificado y la clave SSL (No recomendado)

Si solo está interesado en utilizar Let's Encrypt SSL en las páginas del navegador, puede modificar manualmente el archivo ssl.conf y establecer las siguientes directivas:

$ sudo vim /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/letsencrypt/live/idm.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/idm.example.com/privkey.pem

Reinicie el servicio httpd:

sudo systemctl restart httpd

Compruebe que el estado se esté ejecutando:

$ systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/httpd.service.d
           └─ipa.conf
   Active: active (running) since Thu 2023-07-29 23:00:51 EAT; 17s ago
     Docs: man:httpd.service(8)
  Process: 39925 ExecStartPre=/usr/libexec/ipa/ipa-httpd-kdcproxy (code=exited, status=0/SUCCESS)
 Main PID: 39928 (httpd)
   Status: "Running, listening on: port 443, port 80"
    Tasks: 265 (limit: 101105)
   Memory: 332.4M
   CGroup: /system.slice/httpd.service
           ├─39928 /usr/sbin/httpd -DFOREGROUND
           ├─39929 /usr/sbin/httpd -DFOREGROUND
           ├─39930 (wsgi:kdcproxy) -DFOREGROUND
           ├─39931 (wsgi:kdcproxy) -DFOREGROUND
           ├─39932 (wsgi:ipa)      -DFOREGROUND
           ├─39933 (wsgi:ipa)      -DFOREGROUND
           ├─39934 (wsgi:ipa)      -DFOREGROUND
           ├─39935 (wsgi:ipa)      -DFOREGROUND
           ├─39936 /usr/sbin/httpd -DFOREGROUND
           ├─39937 /usr/sbin/httpd -DFOREGROUND
           └─39938 /usr/sbin/httpd -DFOREGROUND

Jul 29 23:00:51 idm.example.com systemd[1]: Starting The Apache HTTP Server...
Jul 29 23:00:51 idm.example.com ipa-httpd-kdcproxy[39925]: ipa: INFO: KDC proxy enabled
Jul 29 23:00:51 idm.example.com ipa-httpd-kdcproxy[39925]: ipa-httpd-kdcproxy: INFO     KDC proxy enabled
Jul 29 23:00:51 idm.example.com systemd[1]: Started The Apache HTTP Server.
Jul 29 23:00:52 idm.example.com httpd[39928]: Server configured, listening on: port 443, port 80

Renovación del certificado FreeIPA Let's Encrypt

Siempre que se renueven los certificados SSL, ejecute los siguientes comandos para actualizarlos en FreeIPA:

DOMAIN="idm.example.com" # Set correct IdM hostname
sudo ipa-server-certinstall -w -d /etc/letsencrypt/live/$DOMAIN/privkey.pem /etc/letsencrypt/live/$DOMAIN/cert.pem --pin=''

Ingrese la contraseña del Administrador de directorios según sea necesario:

Directory Manager password:
The ipa-server-certinstall command was successful

Luego proceda a reiniciar los servicios FreeIPA después de instalar el certificado:

sudo ipactl restart

Entonces debería tener un uso funcional de Let's Encrypt SSL en la configuración de su servidor FreeIPA. Las advertencias de SSL en su navegación al acceder al panel web de FreeIPA deberían desaparecer. Nos encantaría crear más contenido sobre la administración del servidor FreeIPA y la integración con servicios de terceros. ¡Manténgase conectado para recibir actualizaciones!

Más guías sobre FreeIPA:

  • Cambiar la vida útil máxima de caducidad de la contraseña del usuario de FreeIPA> 90 días
  • Ejecute el servidor FreeIPA en contenedores Docker/Podman
  • Administrar usuarios y grupos en FreeIPA usando CLI
  • Cómo configurar la autenticación LDAP de Jenkins FreeIPA
  • Configurar la autenticación LDAP de GitLab FreeIPA