CURSO ADMINISTRACIÓN APACHE WEB SERVER PRÁCTICA 2: Configuración del SSL en el Apache Web Server para Win32 Información general Este documento describe la instalación de la versión de Apache sobre Win32 con la extensión del módulo mod_ssl. Ficheros a bajar del servidor web del curso: Versión de Apache 1.3.19 (apache_1.3.29-win32-x86-no_src) Versión precompilada de mod_ssl (Apache_1.3.29-Mod_SSL_2.8.16-Openssl_0.9.7c-Win32.zip) Openssl para Win32 (Openssl-0.9.7c-Win32) Fichero de configuración de openssl 1. Instalación de Apache El archivo que contiene la instalación del Apache 1.3.19 se llama apache_1.3.19-win32-no_src.exe. Este archivo contiene la base del sistema Apache y ejemplos de archivos de configuración. Instalar Apache como ya se ha indicado en sesiones anteriores (se recomienda como directorio de instalación C:\Apache). Cambiar los siguientes parámetros del archivo de configuración de Apache en la sección 2 (Main Server Configuration) ([APACHE_HOME]\conf\httpd.conf). Los cambios que se proponen a continuación están disponibles en la página web. [Reemplazar todas las ocurrencias de www.mi-servidor.com con la IP del servidor si no disponemos de un nombre simbólico] Sustituir si es preciso Port 443 por # Port 80 Incluir las líneas: Listen 80 Listen 443 Configurar la línea ServerName IP, con el nombre simbólico o la IP de nuestro servidor. Si se desea, incluir la línea DocumentRoot [WWW_HOME] y el correspondiente <Directory [WWW_HOME]> con el directorio donde se desea hospedar la página principal del servidor. Página 1 de 6
Instalar el servicio Apache (sólo en NT) e inicia r el servidor. Para ello debemos activar la opción SSL con el siguiente comando: apache -D SSL -k config apache -k restart Debe verificarse que todo funcione bien antes de proceder a la instalación del SSL. Puede probarse la dirección http://mi-servidor.com:443/, correspondiente al puerto SSL. La información no será encriptada todavía pero si funciona significa que la configuración del puerto 443 funciona correctamente. 2. Obtención de OpenSSL y mod_ssl El archivo que contiene la instalación precompilada de mod_ssl se llama Apache_1.3.19_modssl_2.8.2_Win32.zip (debe descomprimirse en un nuevo directorio auxilia r). Versiones más actualizadas de este fichero pueden conseguirse en las direcciones http://www.modssl.org o http://hunter.campbus.com. Descargar y descomprimir el fichero openssl-0.9.7c-win32.c en el directorio ([APACHE_HOME]\opensslconf). Copiar los archivos ssleay32.dll and libeay32.dll del directorio Apache\openssl al directorio Windows\System en caso de Win9x o WINNT\System32 en caso de WinNT\2000\XP. 3. Creación de un certificado de prueba Para crear certificados puede usarse el programa openssl.exe. Previamente habrá que descargarse de la página web y copiar el fichero de configuración que se llama openssl.cnf en la carpeta en la que se encuentre el fichero openssl.exe (si es necesario, eliminar la extensión.txt). 1) Configurar el certificado openssl req -config openssl.cnf -new -out server.csr Este comando crea un certificado de petición de firma y una clave privada. Nos preguntará una clave para el fichero que crea, así como datos de país, provincia, ciudad, organización, departamento y e-mail. Cuando el programa pregunte por "Common name" deberá escribirse exactamente el nombre de dominio (p.e. www.miservidor.com). El certificado pertenece al nombre del servidor y los navegadores emiten un aviso de dis conformidad si el nombre no coincide. El resultado de este comando genera los ficheros privkey.pem y server.csr 2) Extraer la clave privada openssl rsa -in privkey.pem -out server.key Este comando extrae la contraseña de la clave privada. Nos solicitará la clave de acceso configurada anteriormente. Debe borrarse el archivo.rnd porque contiene información para la creación de la clave y podría usarse para ataques criptográficos contra la clave privada. Este comando genera el fichero server.key Página 2 de 6
3) Creación del certificado openssl x509 -in server.csr -out server.crt -req -signkey server.key - days 365 Este comando crea un certificado con firma propia que puede usarse para realizar pruebas (realmente debería usarse uno de validez oficial proveniente de una autoridad certificada). Con la opción -days 365 se indica que el certificado caduca al cabo de un año. Este comando crea el fichero server.crt 4) Generación de versión DER de certificado openssl x509 -in server.crt -out server.der.crt -outform DER Este comando crea una versión DER del certificado. El resultado es el fichero server.der.crt 5) Instalar certificados Crear los directorios: [APACHE_HOME]\conf\ssl.crt y copiar los archivos.crt en el mismo. [APACHE_HOME]\conf\ssl.key y copiar los archivos.key en el mismo. 4. Configuración de Apache y mod_ssl Copiar los archivos que ejecutables de la distribución del Apache-mod_ssl en el directorio de instalación original de Apache: Copiaremos en el directorio raíz de Apache los ficheros *.exe y *.dll Copiaremos el subdirectorio modules (ficheros *.so) de la distribución Apache-mod_ssl en el directorio de instalación original de Apache. (*.exe, *.dll, *.so) (detener primero el servidor Apache). Localizar las directivas LoadModule en el archivo http.conf y añadir lo siguiente al final de los existentes: LoadModule ssl_module modules/mod_ssl.so AddModule mod_ssl.c Página 3 de 6
Añadir lo siguiente al final del archivo http.conf: (estos parámetros se pueden descargar de la página web). AddType application/x-x509-ca-cert.crt AddType application/x-pkcs7-crl.crl <IfModule mod_ssl.c> SSLMutex sem SSLRandomSeed startup builtin SSLRandomSeed connect builtin SSLSessionCache none SSLLog logs/ssl.log SSLLogLevel info # Posteriormente puede cambiarse "info" a "warn" si todo sale bien </IfModule> <VirtualHost _default_:443> SSLEngine On SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL SSLCertificateFile conf/ssl/server.crt SSLCertificateKeyFile conf/ssl/server.key </VirtualHost> Si las versiones instaladas son distintas de las originales, deberá usarse regedit para cambiar la clave HKEY_LOCAL_MACHINE\SOFTWARE\Apache Group\Apache\X.Y.Z a la versión correcta (si el apache.exe no es la misma versión a la que previamente se instaló). Inicia r el servidor. Es posible que deban corregirse errores de los ficheros de configuración. En ese caso, Apache escribirá mensajes significativos en la pantalla y/o en los archivos error.log y SSL.log en el directorio Apache\logs. Si no se detecta el error, ajustar todos los LogLevels al máximo y revisar los mensajes de Apache en los ficheros log. Configurar el arranque del servicio apache con el comando: apache -D SSL -k config apache -k restart Página 4 de 6
5. Depuración de problemas de conexión Los problemas al conectarse con el servidor desde un navegador pueden tener muchas razones, varias de ellas responsabilidad del cliente (proxy, DNS, etc.). Así que, si persisten los problemas para conectarte con el SSL, puede probarse con otro navegador y/o revisar la configuración. También es posible utilizar OpenSSL para depurar el problema, como se indica a continuación. openssl s_client -connect nombre_de_servidor:443 gethostbyname failure # Error al resolver este DNS. Conéctate con la dirección IP. connect:errno=2 openssl s_client -connect nombre_de_servidor:443 connect: Connection refused connect:errno=111 # No hay servidor SSL en este puerto. Verifica las directivas Listen y Port. openssl s_client -connect nombre_de_servidor:443 # Todo bien. OpenSSL muestra la información que obtiene del servidor. CONNECTED(00000003) depth=0 /C=at/ST=Wien/L=Wien/O=APC interactive/ou=lifecycle verify error:num=18:self signed certificate verify return:1 depth=0 /C=at/ST=Wien/L=Wien/O=APC interactive/ou=lifecycle verify return:1 Certificate chain 0 s:/c=at/st=wien/l=wien/o=apc interactive/ou=lifecycle i:/c=at/st=wien/l=wien/o=apc interactive/ou=lifecycle Server certificate --BEGIN CERTIFICATE-- MIIC0TCCAjoCAQAwDQYJKoZIhvcNAQEEBQAwgbAxCzAJBgNVBAYTAmF0MQ0wCwYDV [...] 9ucXUnk= --END CERTIFICATE-- subject=/c=at/st=wien/l=wien/o=apc interactive/ou=lifecycle issuer=/c=at/st=wien/l=wien/o=apc interactive/ou=lifecycle No client certificate CA names sent SSL handshake has read 1281 bytes and written 320 bytes New, TLSv1/SSLv3, Cipher is EDH-RSA-DES-CBC3-SHA Server public key is 1024 bit SSL-Session: Protocol : TLSv1 Cipher : EDH-RSA-DES-CBC3-SHA Session-ID: 49ACE1CF484A67D2C476B923D52110A6FCA1A7CE53D76DF7F233DEBF2333D4FB Session-ID-ctx: Página 5 de 6
Master-Key: 00E9FA964253752294ECD69C18ADBA527B7170C112E2B3BCB25EA8F4FD847EC46E1FF0194EF 8E16985B5E38BF6F12131 Key-Arg : None Start Time: 980696025 Timeout : 300 (sec) Verify return code: 0 (ok) [Enter: get / http/1.1 and press RETURN twice] HTTP/1.1 200 OK Date: Sun, 28 Jan 2001 15:34:58 GMT Server: Apache/1.3.9 (Win32) mod_ssl/2.4.9 OpenSSL/0.9.4 Cache-Control: no-cache, no-store, must-revalidate, private Expires: 0 Pragma: no-cache X-Powered-By: PHP/4.0.4 Last-Modified: Sun, 28 Jan 2001 15:35:00 GMT Connection: close Content-Type: text/html # El servidor muestra su página principal Página 6 de 6