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:
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".
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".
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.
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
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:
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):
Fichero de configuración de Apache (sobre CentOS/RHEL):
/etc/httpd/conf/httpd.conf
Interior del fichero de configuración:
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.
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.
Mil gracias de nuevo Xavier, de nuevo me has salvado la vida con tu tutorial.
ResponderEliminar