Securizando el acceso al servidor de administración

En  un post anterior hemos visto la configuración y despliegue de un servidor OpenLDAP en un servidor virtual dedicado y la instalación del paquete phpLDAPadmin desplegado en el servidor de administración del entorno lab. En este artículo me voy a centrar en cómo hacer seguro el acceso a ese servidor.

El acceso http al paquete phpLDAPadmin está habilitado pero voy a hacer que todos los accesos a las interfaces HTTP se realicen a través de https. Ahora que ya tengo mi propia autoridad certificadora, la parte de emisión de certificados está resuelta.

ldap2_1

El primer paso va a consistir en instalar el módulo ssl de apache y crear los directorios para claves y certificados.

ldap2_2

Vamos a crear una clave privada para el servidor y una solicitud de firma de certificado (CSR). Para evitar tener que introducir la contraseña de la clave cada vez que arranque apache, no voy a cifrar la clave privada.

ldap2_3

Una vez creada la CSR, la firmamos con la clave de la CA intermedia.

ldap2_4

ldap2_5

ldap2_6

Copiamos la cadena de certificados de la autoridad certificadora al directorio donde está el certificado y la clave privada:

ldap2_7

A continuación habilitamos la configuración por defecto del virtual host SSL, editando el fichero default-ssl.conf y ajustando los valores de los objetos de cifrado (clave, certificado y cadena de certificados) a los particulares del entorno.

ldap2_9

Rearrancamos el servicio apache y comprobamos que funciona HTTPS. Tras aceptar la excepción de seguridad (ya que se trata de un certificado autofirmado) podemos ver desde un cliente las características del certificado:

ldap2_10

Ahora me queda por hacer que los accesos a las interfaces de nagios y phpLDAPadmin sean a través de https. Voy a comenzar con phpLDAPadmin, en primer lugar, edito el fichero de configuración de phpLDAPadmin (/etc/phpladapadmin/apache.conf) para Apache y establezco el alias para el acceso al sitio web:

ldap2_11

Ahora voy a evitar que se pueda acceder a través de una conexión http forzando una redirección, para ello edito el fichero de configuración de apache (/etc/apache2/sites-enabled/000-default.conf) y añado la redirección permanente:

ldap2_12

Una vez que re-arranco el servidor Apache, cualquier solicitud se redirige a HTTPS.

ldap2_13

Creando una CA (autoridad certificadora)

La configuración del entorno lab va avanzando poco a poco y es el momento de empezar a pensar en la seguridad. El despliegue de servidores web va a requerir de certificados X.509 y, por supuesto, no voy a comprar ninguno. Así que, para atender el suministro de los distintos certificados, me voy a montar una CA, basada en OpenSSL, en el entorno lab. En concreto, en el servidor de administración que tengo desplegado.

El primer paso es crear el certificado raíz de la CA. Este certificado no lo voy a usar para firmar certificados sino para emitir certificados intermedios que sí emplearé para firmar.

1. Creación de la Estructura de Directorios

Para empezar voy a crear un árbol de directorios para manejar los ficheros de la CA. Este árbol de directorios va a estar basado en /root/ca:

ca1

2. Fichero de configuración de OpenSSL (openssl.conf)

A continuación voy a preparar el fichero de configuración para OpenSSL (/root/ca/openssl.conf). Las secciones y parámetros del fichero están descritos en la página de manual del comando ca (man ca). A continuación voy a ir haciendo una disección de las distintas partes del fichero:

  • La primera sección (ca) es obligatoria y, en este caso, la configuración instruye a OpenSSL a que tome los parámetros de configuración de la sección CA_default.

ca2

  • La siguiente sección (CA_default) define parámetros por defecto para la CA (directorios, nombres de ficheros, etc.). El directorio raíz para la CA es el que creamos al principio del proceso.

ca3

  • La siguiente sección (policy_strict) contiene las reglas que vamos a aplicar a la CA raíz. El certificado de la CA raíz sólo se va a usar para firmar certificados de CA’s intermedias.

ca4

  • Vamos a aplicar la política policy_loose para firmar certificados de cliente y servidor que pueden tener distintas procedencias:

ca5

  • La siguiente sección (req) contiene parámetros que se aplican en la creación de certificados o solicitudes de firma de certificados (CSRs).

ca6

  • La sección req_distinguished_name declara la información necesaria que deben incluir las solicitudes de firma de certificados. En esta sección se declaran, también, valores por defecto para esos parámetros.

ca7

  • La siguiente sección v3_ca contiene las extensiones que se van a aplicar en la generación del certificado de la CA raíz.

ca8

  • La sección v3_ca_intermediate contiene las extensiones a aplicar en la creación de los certificados de CA intermedias.

ca9

  • Las siguientes secciones, user_certs y server_certs, definen, respectivamente, las extensiones para la creación de certificados de autenticación de usuarios y servidores:

ca10

  • La extensión crl_ext se aplica en la creación de listas de revocación de certificados:

ca11

  • Finalmente, la extensión ocsp se emplea en la firma del certificado para el protocolo online de estado de certificados (OCSP):

ca12

3. Creación de la clave raíz (ca.key.pem)

El siguiente paso es crear la clave raíz y mantenerla bajo la más estricta seguridad. Voy a usar una clave de 4096 bits para el certificado raíz y los certificados de CA intermedia.

ca13

4. Creación del certificado raíz (ca.cert.pem)

Voy a usar la clave raíz generada en el paso anterior para crear el certificado raíz.

ca14

Verificamos el certificado generado:

ca15

ca16

5. Creación del par intermedio

Voy a crear, a continuación, un par intermedio (clave privada, certificado) para una CA intermedia. De este modo se protege la CA raíz ya que no se usa su clave para firmar certificados sino la clave de la CA intermedia. En caso de que la CA intermedia fuese comprometida, se revocarían todos los certificados firmados y se procedería a generar una nueva CA intermedia. El proceso es muy similar al realizado para la generación del par raíz (creación de estructura de directorios, creación de clave y creación de certificados) así que no voy a entrar en detalles excesivos.

ca17

Copiamos el fichero de configuración openssl.cnf del directorio padre al directorio actual y lo editamos modificando los cinco parámetros que aparecen marcados a continuación:

ca18

A continuación creamos la clave y el CSR para la CA intermedia:

ca19

y firmamos el CSR con la clave raíz de la CA …

ca20

Verificamos la cadena de confianza del certificado de la CA intermedia y creamos la cadena de certificados que permita validar los certificados emitidos por la CA intermedia:

ca21

En este punto, ya estamos listos para firmar certificados de servidor y de clientes.