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
Aileencita
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
Muchas gracias Alieencita! 🙂