Buscar

Linux: SSL PFX de IIS a Apache

En infraestructuras donde disponemos de varios servidores web con SSL con múltiples sites, una de las estrategias que puede utilizar el administrador de sistemas es utilizar un certificado wildcard o SAN (Subject Alternative Names).

Tanto los certificados wildcard como SAN, nos permitirán aplicar SSL a múltiples sites y a múltiples servidores web con un solo certificado.

En el siguiente ejemplo veremos como transferir un certificado SSL desde un Windows Server con IIS a un Linux con Apache.

El escenario es el siguiente:

Diagrama escenario


Descripción del escenario:

- Servidor Windows Server: Sites configurados en IIS (Internet Information Services): www.sysadmit1.com y www.sysadmit2.com

- Servidor Linux: Sites configurados en Apache: www.sysadmit3.com y www.sysadmit4.com

El servidor Windows, dispone de un certificado SAN con los siguientes FQDN: www.sysadmit1.com, www.sysadmit2.com, www.sysadmit3.com y www.sysadmit4.com

Queremos:

- Pasar el certificado SAN del servidor Windows con IIS al servidor Linux con Apache.

- Configurar los sites:  www.sysadmit3.com y www.sysadmit4.com para que funcionen con SSL con el certificado SAN.

Veamos los pasos a seguir:

Paso1: Exportamos el certificado a PFX desde Windows Server


mmc > "Archivo" > "Agregar o quitar complemento" > Seleccionamos "Certificados" > botón "Agregar" y seleccionamos: "Cuenta de equipo".

Proceso de exportación del cert desde la MMC

Desde la consola de administración de certificados, seleccionamos el certificado a exportar:

Certificados (equipo local) > Personal > Certificados.

Seleccionamos el certificado a exportar, botón derecho, "Todas las tareas" > "Exportar".

Proceso de exportación del cert desde la MMC

Realizamos el proceso de exportación:

Para ello realizaremos cuatro pasos:

1) Marcaremos la opción de "Exportar clave privada"
2) Seleccionamos: "Intercambio de información personal: PKCS #12 (.PFX)" y marcamos: "Incluir todos los certificados en la ruta de certificación" y "Exportar todas las propiedades extendidas".
3) Introducimos una contraseña
4) Indicamos una ruta donde ubicar el fichero PFX.

Proceso de exportación del cert desde la MMC

Paso2: Copiamos el fichero PFX a un equipo Linux con openSSL.


Paso3: Ejecutamos desde Linux: de .PFX a .PEM:


openssl pkcs12 -in Cert.PFX -nodes > certificado.pem

Vista ejecución (Introducimos la contraseña del PFX):

[root@LINUX1]# ls -lF
total 8
-rw-r--r-- 1 root root 7705 Dec 29 16:20 Cert.PFX
[root@LINUX1]# openssl pkcs12 -in Cert.PFX -nodes > certificado.pem
Enter Import Password:
MAC verified OK

Paso4: Abrimos el fichero .PEM y a partir de su contenido, crearemos ficheros separados:

 

Generación ficheros

Utilizando "copiar-pegar" del fichero certificado.pem, generamos los ficheros: private.key, cert.pem y ca.pem

Al ver el fichero .PEM, encontramos:

Bloque1 (Fichero1):

-----BEGIN PRIVATE KEY-----

****Clave privada****, le diremos: private.key

-----END PRIVATE KEY-----

Bloque2 (Fichero2):

-----BEGIN CERTIFICATE-----

****Certificado****, le diremos: cert.pem

-----END CERTIFICATE-----

Bloque3 (Fichero3):

-----BEGIN CERTIFICATE-----

****Certificado CA****, le diremos: ca.pem

-----END CERTIFICATE-----

* Nos podemos encontrar con varios certificados de la CA, en caso afirmativo deberemos adjuntar dentro del fichero ca.pem, ambos certificados.

Paso5: Correspondencias de cada fichero a configuración de Apache:


SSLCertificateKeyFile -> ****Clave privada**** -> private.key
SSLCertificateFile -> ****Certificado**** -> cert.pem
SSLCertificateChainFile -> ****Certificado CA**** -> ca.pem

Paso6: Configuración de Apache:


- Nos aseguramos que el modulo mod_ssl de Apache esté instalado:

yum install mod_ssl -y

- Creamos directorio de certs:

mkdir /etc/ssl/localcerts/

- Situamos los ficheros: private.key, cert.pem y ca.pem en el directorio /etc/ssl/localcerts/

Fichero de configuración de Apache (sobre CentOS/RHEL):

/etc/httpd/conf/httpd.conf

Interior del fichero de configuración:

NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:80>
    DocumentRoot /var/www/html/www.sysadmit2.com
    ServerName www.sysadmit2.com
    ServerAlias www.sysadmit2.com
</VirtualHost>

<VirtualHost *:443>
    SSLEngine On
    DocumentRoot /var/www/html/www.sysadmit2.com
    ServerName www.sysadmit2.com
    ServerAlias www.sysadmit2.com
    SSLCertificateKeyFile /etc/ssl/localcerts/private.key
    SSLCertificateFile /etc/ssl/localcerts/cert.pem
    SSLCertificateChainFile /etc/ssl/localcerts/ca.pem
    SSLVerifyDepth 5
    SSLVerifyClient none
</VirtualHost>


<VirtualHost *:80>
    DocumentRoot /var/www/html/www.sysadmit3.com
    ServerName www.sysadmit3.com
    ServerAlias www.sysadmit3.com
</VirtualHost>

<VirtualHost *:443>
    SSLEngine On
    DocumentRoot /var/www/html/www.sysadmit3.com
    ServerName www.sysadmit3.com
    ServerAlias www.sysadmit3.com
    SSLCertificateKeyFile /etc/ssl/localcerts/private.key
    SSLCertificateFile /etc/ssl/localcerts/cert.pem
    SSLCertificateChainFile /etc/ssl/localcerts/ca.pem
    SSLVerifyDepth 5
    SSLVerifyClient none
</VirtualHost>


Explicación parámetros:

- Con NameVirtualHost y VirtualHost, definimos los dos sites enlazados al puerto 80 y al 443.

- Con SSLEngine On, habilitamos el SSL en el site.

- Con SSLCertificateKeyFile, SSLCertificateFile y SSLCertificateChainFile, definimos la ubicación de la clave privada, certificado y certificado CA.

- Con SSLVerifyDepth 5, indica que el certificado puede tener hasta 5 entidades de certificación intermedias.

- Con SSLVerifyClient none, indicamos que no se utilice autenticación SSL desde el lado cliente.

- Con ServerName y ServerAlias definimos el FQDN (fully qualified domain name) de cada site.

- Con DocumentRoot, definimos la ruta de los ficheros HTML, php, etc... de cada site.

1 comentario:

  1. Mil gracias de nuevo Xavier, de nuevo me has salvado la vida con tu tutorial.

    ResponderEliminar