» » Configurar certificados SSL sobre Apache2 (HTTPS)

Configurar certificados SSL sobre Apache2 (HTTPS)

Publicado en: Tecnología | 2

Este documento nos guía en los pasos necesarios para configurar un equipo con Mac OS X 10.7 con las herramientas de desarrollo XCode instaladas, pero se aplica igual a versiones inferiores de OS X. De igual forma, este paso a paso está aplicado a la versión cliente de OS X, puede utilizarse para la versión Server.

El procedimiento recoge como crear certificados locales de SSL, las llaves del certificado y la configuración de Apache2 para que nos garantice un acceso cifrado a un Virtual Host de nuestra máquina.

  • Crear los directorios donde generar la estructura SSL necesaria
  • Generar un fichero clave de host (host key)
  • Generar un fichero de solicitud de certificado (request file)
  • Crear el certificado SSL
  • Crear el directorio raíz para el VirtualHost con SSL

Para configurar Apache2, debemos:

  • Editar el fichero httpd.conf para habilitar SSL y VirtualHost
  • Editar el fichero httpd-ssl.conf
  • Editar el fichero httpd-vhosts.conf para añadir nuestro VirtualHost
  • Arrancar o reiniciar Apache

Crear el directorio base que contendrá la estructura de ficheros necesarios para crear el certificado SSL. Desde Terminal, ejecutamos:

# sudo mkdir /etc/apache2/ssl
# cd /etc/apache2/ssl/

Generar un fichero clave de host (host key)

# sudo ssh-keygen -f server.key

Podemos dejar la contraseña que nos pide en blanco pulsando ENTER

Generar el fichero de solicitud de certificado (request file)

Podemos dar los datos de nuestra organización según nos vaya preguntando, o dejarlos en blanco si nos los conocemos o no queremos ponerlos:

# sudo openssl req -new -key server.key -out request.csr

You are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:
Email Address []:
Please enter the following 'extra' attributes to be sent with your certificate request
A challenge password []:
An optional company name []:

Crear un certificado SSL

# sudo openssl x509 -req -days 365 -in request.csr -signkey server.key -out server.crt
Signature ok
subject=/C=/ST=/L=/O=/OU=/emailAddress=
Getting Private key

Configuración de Apache

Backup del httpd.conf

Antes de nada, deberíamos hacer una copia de cada fichero que modifiquemos, por si hay que dar marcha atrás y deshacer lo hecho.

# sudo cp /etc/apache2/httpd.conf /etc/apache2/httpd.conf_backupSinSSL

Editar el fichero httpd.conf para habilitar las opciones de SSL y Virtual Host

# sudo vi /etc/apache2/httpd.conf

En el fichero base de la configuración de Apache de la versión de Mac OS X 10.7.x que no es Server, viene preparado tanto para una versión Server como la cliente de OS X. En mi caso, he preferido comentar la parte que distingue de la versión Server, comentando las líneas dentro de las etiquetas <IfDefine para MACOSXSERVER> y </IfDefine> para solo dejar las etiquetadas como !MACOSXSERVER, a las que además he comentado para  asegurarme que tanto si arranco el servicio por launchd o por Compartir Web de Preferencias de Sistema, las variables que me interesan estarán activas de igual modo. Para esto, comento solo las líneas:
#<IfDefine !MACOSXSERVER>
#</IfDefine>
pero dejando sin comentar las variables a cargar que contengan.

Adicionalmente, debemos editar el fichero de la siguiente manera.

Buscar:
Listen 80
Añadir después en una línea nueva:
Listen 443

(si al reiniciar Apache obtenemos el error:
[crit] (22)Invalid argument: make_sock: for address [::]:443, apr_socket_opt_set: (IPV6_V6ONLY)
podemos cambiarlo por:
Listen 0.0.0.0:443
y listo)

Buscar:
#LoadModule ssl_module libexec/apache2/mod_ssl.so
Descomentar línea, queda:
LoadModule ssl_module libexec/apache2/mod_ssl.so
Buscar:
#Include /private/etc/apache2/extra/httpd-ssl.conf
Descomntar, queda:
Include /private/etc/apache2/extra/httpd-ssl.conf
Buscar:
#Include /private/etc/apache2/extra/httpd-vhosts.conf
Descomentar, queda:
Include /private/etc/apache2/extra/httpd-vhosts.conf

Guardar y cerrar

Editar el fichero httpd-ssl.conf

# sudo vi /etc/apache2/extra/httpd-ssl.conf
Buscar:
SSLCertificateFile "/private/etc/apache2/server.crt"
Reemplazar por:
SSLCertificateFile "/etc/apache2/ssl/server.crt"
Buscar:
SSLCertificateKeyFile "/private/etc/apache2/server.key"
Reemplazar por:
SSLCertificateKeyFile "/etc/apache2/ssl/server.key"
Comprobar que estas líneas están comentadas:
#SSLCACertificatePath "/private/etc/apache2/ssl.crt"
#SSLCARevocationPath "/private/etc/apache2/ssl.crl"

Guardar y cerrar

Crear un Virtual Host con acceso SSL

Creamos el directorio raíz del Virtual Host

# sudo mkdir /Library/WebServer/serverssl

La ruta del directorio puede ser la que nos interese.

Editar el fichero de configuración para crear el Virtual Host

# sudo vi /etc/apache2/extra/httpd-vhosts.conf
Buscar:
NameVirtualHost *:80
Comentar esta línea:
#NameVirtualHost *:80
Y añadir otra línea debajo de esta con:
NameVirtualHost *:443

Comentar los VirtualHost que no se vayan a usar.

Al final del fichero, añadimos la configuración a nuestro VirtualHost con SSL:

<VirtualHost *:443>
ServerName midominio.local
DocumentRoot /Library/WebServer/serverssl
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
<Directory "/Library/WebServer/serverssl">
  Options +Indexes FollowSymLinks
  AllowOverride All
  Order allow,deny
  Allow from All
</Directory>
</VirtualHost>

Guardar y cerrar

Reiniciar Apache

Una vez configurado, podemos reiniciar Apache con el comando:

#sudo apachectl graceful

y revisar el log por si hay algún fallo, que estará en la ruta /var/log/apache2/error_log

SaludoX

 

 

2 Comentarios

  1. Aileencita
    | Responder

    Error generando Certificado por Clave (Passphrase) en Blanco (CentOs)

    Yo tuve un super problema porque al intentar generar el certificado dejé el passphrase en blanco. Luego no podía generar el certificado nuevamente!!! En caso de que presenten este error aquí les dejo la solución.

    Chequeen la ruta $dir que se encuentra en el archivo openssl.cnf
    en mi caso es $nano /etc/pki/tls/openssl.cnf y el $dir es dir=/etc/pki/CA

    Ingresen al /etc/pki/CA y ubiquen el directorio /private

    Allí reposa el intento de creación de clave. Borrar cakey.pem

    $rm cakey.pem

    Ahora intentar nuevamente generar el certificado en la ruta que les corresponde según su distribución $/etc/pki/tls/misc/CA -newca

    Y listo!!! Podrán generar el certificado desde cero. 😀

    Suerte y espero que sea de ayuda este post!

    • nico
      | Responder

      Muchas gracias Alieencita! 🙂

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.