Está en la página 1de 11

Apache SSL/TLS

Vamos a configurar apache para trabajar con SSL, el protocolo SSL lo vamos a utilizar con el fin de garantizar las transacciones Web a travs de Internet. Desafortunadamente, el simple hecho de que se este usando SSL no significa necesariamente que la informacin enviada a travs de este protocolo es segura, ya que el uso de encriptacin dbil, como la no verificacin del nombre del servidor Web y las vulnerabilidades de Seguridad en los servidores Web o en las bibliotecas SSL, as como de otros atentados, podrn permitir a los intrusos acceso a la informacin sensible independientemente del hecho de que est siendo enviado a travs de SSL.

En el apndice A vamos a describir como funciona el protocolo SSL (Secure Sockets Layer) para entender el funcionamiento del mismo.
Dependiendo de la versin de Debian que estemos utilizando puede suceder que el modulo de SSL ya venga instalado por defecto cuando instalamos la versin de Apache 2 o haya que instalar las librera de libapachemod-ssl. Una vez que tenemos instalado SSL deberamos habilitarlo, para que el servidor empiece a escuchar en ese puerto, previamente tenemos que tener un certificado. Antes de seguir vamos a aclarar que los certificados auto-firmados producirn advertencias de seguridad cuando la pagina Web sea accedida a travs de un enlace HTTPS, por lo cual esto no es conveniente para un sitio WEB pblico, pero si es valido para las primeras pruebas de funcionamiento.

El proceso bsicamente va a consistir en generar un certificado e indicarle al servidor Apache que use ese certificado y que escuche en el puerto 443. Para ello debemos modificar el archivo /etc/apache2/port.conf donde el mismo es incluido en el archivo /etc/apache2/apache2.conf con este contenido.
NameVirtualHost *:80 Listen 80 <IfModule mod_ssl.c> # SSL name based virtual hosts are not yet supported, therefore no # NameVirtualHost statement here Listen 443 </IfModule>

Nuestro archivo clave va a ser /etc/apache2/sites-available/default-ssl, donde hay tres lneas especialmente importantes:
SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

Donde la primera le indica que SSL esta activo, la segunda indica donde se encuentra el archivo de certificado y la tercera donde se encuentra la clave del certificado Ahora debemos activar el modulo de ssl y habilitar el sitio default-ssl el cual lo hacemos con los siguientes comandos respectivamente.
# a2enmod ssl # a2ensite default-ssl

Una vez hecho estos cambios debemos reiniciar el servicio de Apache para que los cambios se activen. Ahora ya podramos conectarnos al servidor por HTTPS, pero sin embargo al estar usando este tipo de certificado, lo que encontraremos ser que el navegador nos da una o dos advertencias sobre el dominio. Una segura porque el certificado no esta firmado por una autoridad de confianza y tal vez otra porque el dominio, o IP que estamos usando para acceder al sitio no coincida con el que indica el certificado. La figura siguiente nos muestra lo que nos devolvera el navegador

Si queremos una conexin cifrada sin ms preocupaciones, tan slo debemos ignorar las advertencias de seguridad mencionadas anteriormente y ya habramos terminado. Pero si nos molesta ese mensaje o queremos hacerlo bien por que el equipo va ser usado en un sitio pblico, entonces debemos pedir un certificado a alguna autoridad certificante o generar un certificado SSL para nuestro servidor esto lo podemos ver en el Apendice B como se puede hacer un certificado. Configuracin recomendada para SSL En Apache 2 existen mas de 30 directivas que podemos usar para configurar el modulo de SSL, ya que la configuracion inicial que le dimos es muy basica, por lo que vamos a ver algunas de la directivas que tenemos que tener en cuenta. SSLEngine SSLRequireSSL Debe estar activado, de lo contrario el servidor no utilizara SSL/TLS Debe estar activado, de otra forma los usuarios pueden acceder al

contenido web a travs de peticiones HTTP regular, sin usar SSL / TLS, lo cual no es lo deseado. SSLProtocol Debe ser configurado para utilizar slo TLS SSL v1.0 y v3.0.con esto

podra deshabilitar SSL v2.0. SSLCipherSuite Para proporcionar criptografa fuerte, este parmetro debe configurarse para utilizar en ALTA (> 168 bits) y MEDIO (128 bits) El cifrado BAJA y NULL deben ser desactivado. Lo ltimo que se debera establecer la preferencia sobre SHA1 antes que MD5. Esto se debe a que SHA1 se considera ms seguro que MD5 despus de los descubrimientos de colisiones que ha sufrido MD5 SSLVerifyDepth Debe contener el nmero mximo de CA intermedia Por ejemplo, para

aceptar slo certificados autofirmados que debe establecerse en cero, de certificados de cliente que son firmados por CA raz - debera ser de 1. And so on. Y as sucesivamente. SSLRandomSeed SSLMutex Se utiliza para la generacin de nmeros aleatorios en OpenSSL

Semforo que se utiliza para la exclusin de las operaciones que han de

llevarse a cabo de manera sincronizada con los procesos internos del servidor Apache.

SSLCACertificateFileEste indica la ubicacion del archivo de la autoridad certificante , es usado para la autenticacion de los clientes.

SSLCertificateFile SSLCertificateKeyFile servidor

Esta directiva le indica al servidor donde estn los certificados Esta directiva le indica donde esta la clave privada para el

SSLVerifyClient cliente.

Le indicamos al servidor si le tiene que solicitar certificado al

Donde podemos mostrar como nos queda el archivo ssl.conf y el archivo de configuracion que habilita el host correspondiente a usar ssl., Cabe aclarar que al modificar el archivo ssl,conf este se aplicara para todos los sitios que tengamos definidos en el servidor. a) ssl.conf <IfModule mod_ssl.c> SSLRandomSeed startup builtin SSLRandomSeed startup file:/dev/urandom 512 SSLRandomSeed connect builtin SSLRandomSeed connect file:/dev/urandom 512 #Opciones de mayor seguridad SSLProtocol -ALL +SSLv3 +TLSv1 SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-EXP ## SSL Global Context AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl SSLPassPhraseDialog builtin SSLSessionCache shmcb:/var/run/apache2/ssl_scache(512000)

SSLSessionCacheTimeout 300

SSLMutex file:/var/run/apache2/ssl_mutex </IfModule>

b) Virtual Host <VirtualHost 10.1.10.5:443> <IfModule mod_ssl.c> SSLEngine on SSLCACertificateFile /etc/apache2/ssl.key/ca.sgp.gov.ar.pem SSLCertificateFile /etc/apache2/webmail.sgp.gov.ar.pem SSLCertificateKeyFile /etc/apache2/ssl.key/webmail.sgp.gov.ar.key <Files ~ "\.(cgi|shtml)$"> SSLOptions +StdEnvVars </Files> SSLVerifyClient none </IfModule> ServerName webmail.sgp.gov.ar ServerAdmin webmail@sgp.gov.ar DocumentRoot /usr/share/horde3 RewriteEngine on RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) RewriteRule .* - [F] Options Indexes FollowSymLinks ErrorLog /var/log/apache2/webmail-ssl.error.log CustomLog /var/log/apache2/webmail-ssl.access.log common </VirtualHost>

Ademas para proporcionar compatibilidad con versiones anteriores de Internet Explorer, que tiene fallos en la implementacion de SSL debe configurarse las siguientes opciones.
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0

Apendice B Generar certificados Nosotros vimos como configurar y probar el SSL / TLS, pero nuestro navegador web no era capaz de verificar la identidad del servidor web. Nosotros usamos un certificado de servidor Web que se haba creado slo para propsitos de prueba, y no contienen la informacin necesaria para fines de autenticacin real y las transacciones de comercio. Para que el navegador del usuario pueda autenticar el servidor web, es necesario crear un certificado vlido de servidor web, que deber contener: la clave pblica del servidor web Fechas de validez (de inicio y expiracin) Cifrado de algoritmo que soporta El DN , que debe contener nombre de dominio completo del servidor web conocido como el nombre comn (NC). Opcionalmente, tambin puede contener otros atributos, como el Pas (C), Estado (S), Localizacin (L), el nombre de la Organizacin (O), la Organizacin de la Unidad de nombre (OU), y ms. El numero de Serie del certificado. X.509v3 atributos que le dir a los navegadores web sobre el tipo y uso del certificado URI del punto de distribucin CRL (si existen) URI X.509v3 Certificado de la poltica (si existen) nombre y la firma de confianza de la Autoridad de Certificacin (CA)

Es importante sealar que el nombre comn (CN) debe ser un atributo de nombre de dominio completo (FQDN) en el servidor Web. En caso contrario, los navegadores web no ser capaz de verificar si el certificado pertenece al servidor web que lo ofrece. Un ejemplo de certificado de servidor Web (como un texto de representacin) se ha presentado a continuacin. con el comando openssl x509 -text -in /etc/apache2/certificados/pop3.sgp.gov.ar.pem y obtenemos Certificate: Data: Version: 3 (0x2) Serial Number: 18426 (0x47fa) Signature Algorithm: sha1WithRSA Issuer: C=AR, L=Ciudad de Buenos Aires, O=Jefatura de Gabinete de Ministros, OU=Subsecretar\xEDa de la Gesti\xF3n P\xFAblica, OU=No amparado por el Decreto 427/98 - IFD APN, OU=Pol\xEDtica de Certificaci\xF3n en http://ca.sgp.gov.ar, CN=AC de la Subsecretar\xEDa de la Gesti\xF3n P\xFAblica para Certificados de Correo Electr\xF3nico Validity

Not Before: May 30 17:13:16 2008 GMT Not After : May 30 17:13:16 2009 GMT Subject: C=AR, ST=Buenos Aires, L=Capital Federal, O=ONTI, OU=ONTI, CN=pop3.sgp.gov.ar/emailAddress=oper@sgp.gov.ar Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:ac:e2:d5:22:6b:dc:5b:ca:5a:ec:44:3f:ff:f2: 10:38:fe:23:70:68:9c:6b:86:eb:b9:66:67:bc:3f: 2a:de:a9:2a:cf:d0:a6:77:3d:69:54:31:a5:09:67: b3:45:c9:27:dc:c0:81:4b:42:c1:e2:65:89:53:23: 73:21:07:c5:01:55:c3:b5:6c:ad:87:ff:23:b7:f4: 1b:7d:a1:66:b3:68:ad:a0:32:20:4d:d7:e2:96:c1: c1:b6:80:10:26:4a:3e:c3:de:c8:67:9e:19:93:8e: 2b:17:4d:91:a6:72:2a:80:df:8f:f1:e0:d6:9f:e2: 83:ac:e8:b7:f7:c5:e7:f2:17:01:0a:d4:b3:cd:b8: c6:d1:dd:26:38:4e:82:86:45:1f:4b:05:c8:9e:39: 89:c9:1a:d9:81:50:c8:6c:fa:ab:2b:96:31:63:df: 27:93:89:a7:b6:b2:0f:a5:e0:c9:42:73:75:38:51: b3:c5:38:f0:0a:52:10:49:07:f1:f7:4a:dd:d5:19: 57:ce:a3:ed:74:8c:1e:2a:67:e2:6c:90:d9:83:9f: 6a:22:5d:1c:7a:43:22:c5:e9:76:a3:00:4c:5a:c7: 80:15:4d:a7:70:c4:14:cf:69:1b:94:c3:65:09:67: 13:9b:78:1d:b9:64:f4:5a:f6:ed:61:d8:a4:db:ed: a8:3b Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE, pathlen:0 Signature Algorithm: sha1WithRSA 42:ee:6d:0e:d2:46:32:96:97:33:13:36:52:e5:77:d1:f0:bf: 38:10:3a:4c:9e:46:5f:ea:02:8d:bc:86:4d:f3:09:f9:c5:5c: ba:3f:1a:f3:16:c2:7a:66:7e:00:54:0d:16:02:0b:1b:e2:c2: 2a:b0:90:a9:24:45:80:d3:a4:b8:05:08:1f:55:07:96:39:0c: b1:c8:45:2f:34:4f:26:5f:bf:c6:22:ab:6b:84:26:1a:ce:08: 98:34:f6:f4:66:71:b5:88:1d:73:84:54:c1:0b:11:d0:00:f3:

de:31:bc:7b:a0:3f:34:c7:a6:a9:94:ee:d7:76:b2:78:2b:db: 2e:1e:54:2a:74:4e:25:06:fb:8d:aa:6d:11:88:44:63:e5:4d: 39:3b:e5:c3:46:68:24:e8:2f:8c:4b:62:bb:2d:a2:e2:c7:d0: aa:f6:26:52:5a:41:a4:4e:c5:3b:e4:8a:bd:f3:47:68:48:43: 49:b4:e7:8c:78:48:0f:a5:b8:3b:f0:ad:de:d9:a5:e4:8f:64: aa:f0:1d:f7:11:8d:1d:8d:6e:38:76:1c:6e:c7:8e:ad:fa:0b: ab:3e:8b:29:f7:92:17:04:6c:9b:90:05:3c:42:9f:e1:21:74: e4:cd:13:24:30:ea:51:0f:b3:45:84:8c:f9:2a:a9:00:c2:dd: d0:2d:13:9d -----BEGIN CERTIFICATE----MIIEeTCCA2WgAwIBAgICR/owCQYFKw4DAh0FADCCAVkxCzAJBgNVBAYTAkFSMR8w HQYDVQQHExZDaXVkYWQgZGUgQnVlbm9zIEFpcmVzMSowKAYDVQQKEyFKZWZhdHVy YSBkZSBHYWJpbmV0ZSBkZSBNaW5pc3Ryb3MxLDAqBgNVBAsTI1N1YnNlY3JldGFy 7WEgZGUgbGEgR2VzdGnzbiBQ+mJsaWNhMTQwMgYDVQQLEytObyBhbXBhcmFkbyBw b3IgZWwgRGVjcmV0byA0MjcvOTggLSBJRkQgQVBOMTowOAYDVQQLEzFQb2ztdGlj YSBkZSBDZXJ0aWZpY2FjafNuIGVuIGh0dHA6Ly9jYS5zZ3AuZ292LmFyMV0wWwYD VQQDE1RBQyBkZSBsYSBTdWJzZWNyZXRhcu1hIGRlIGxhIEdlc3Rp824gUPpibGlj YSBwYXJhIENlcnRpZmljYWRvcyBkZSBDb3JyZW8gRWxlY3Ry825pY28wHhcNMDgw NTMwMTcxMzE2WhcNMDkwNTMwMTcxMzE2WjCBljELMAkGA1UEBhMCQVIxFTATBgNV BAgTDEJ1ZW5vcyBBaXJlczEYMBYGA1UEBxMPQ2FwaXRhbCBGZWRlcmFsMQ0wCwYD VQQKEwRPTlRJMQ0wCwYDVQQLEwRPTlRJMRgwFgYDVQQDEw9wb3AzLnNncC5nb3Yu YXIxHjAcBgkqhkiG9w0BCQEWD29wZXJAc2dwLmdvdi5hcjCCASIwDQYJKoZIhvcN AQEBBQADggEPADCCAQoCggEBAKzi1SJr3FvKWuxEP//yEDj+I3BonGuG67lmZ7w/ Kt6pKs/Qpnc9aVQxpQlns0XJJ9zAgUtCweJliVMjcyEHxQFVw7VsrYf/I7f0G32h ZrNoraAyIE3X4pbBwbaAECZKPsPeyGeeGZOOKxdNkaZyKoDfj/Hg1p/ig6zot/fF 5/IXAQrUs824xtHdJjhOgoZFH0sFyJ45icka2YFQyGz6qyuWMWPfJ5OJp7ayD6Xg yUJzdThRs8U48ApSEEkH8fdK3dUZV86j7XSMHipn4myQ2YOfaiJdHHpDIsXpdqMA TFrHgBVNp3DEFM9pG5TDZQlnE5t4Hblk9Fr27WHYpNvtqDsCAwEAAaMTMBEwDwYD VR0TBAgwBgEBAAIBADAJBgUrDgMCHQUAA4IBAQBC7m0O0kYylpczEzZS5XfR8L84 EDpMnkZf6gKNvIZN8wn5xVy6PxrzFsJ6Zn4AVA0WAgsb4sIqsJCpJEWA06S4BQgf VQeWOQyxyEUvNE8mX7/GIqtrhCYazgiYNPb0ZnG1iB1zhFTBCxHQAPPeMbx7oD80 x6aplO7XdrJ4K9suHlQqdE4lBvuNqm0RiERj5U05O+XDRmgk6C+MS2K7LaLix9Cq 9iZSWkGkTsU75Iq980doSENJtOeMeEgPpbg78K3e2aXkj2Sq8B33EY0djW44dhxu x46t+gurPosp95IXBGybkAU8Qp/hIXTkzRMkMOpRD7NFhIz5KqkAwt3QLROd -----END CERTIFICATE-----

El dilema contrasea
Antes de la creacin de certificados, es importante entender las implicaciones de una frase de contrasea para el certificado. Deberia el servidor web tener una clave privada encriptada o no ? Hay muchas opiniones, pero se recomienda que uno no protege el servidor web utilizando la clave privada de contrasea. No es slo un inconveniente, pero tambin da un falso sentido de seguridad. Por qu? . Considere los siguientes puntos. 1. Uno de ellos es que necesitariamos acceder a la contrasea despus de cada reinicio del servidor web, lo que puede ser bastante molesto si el sistema necesita ser reiniciado a menudo (por ejemplo, debido a una actualizacin del kernel, un fallo de electricidad, cambio de configuracin, o actualizacion de paquetes de seguridad). 2. Si un intruso logra obtener la clave privada del servidor Web, esto significa que el servidor Web est comprometido y el intruso habra tenido acceso al servidor web del sistema operativo en el nivel raz.. Si este es el caso, el intruso podra obtener la contrasea mediante la instalacin de un keylogger, y ante cualquier caso de reinicio del sistema para entrar el atacante se haria de la contrasea. Alternativamente, un intruso podra volcar la memoria del Apache y encontrar la clave privada del servidor web ya que la misma se almacena como texto en la memoria. Por lo tanto, la nica ventaja de la encriptacin de servidor web de la llave privada es solo para los hackers Kiddies, pero no contra los profesionales que sean capaces de comprometer el servidor.

Creacin de la web certificado de servidor


En general, existen tres tipos de certificados que podemos usar: 1. Un certificado autofirmado. 2. Un certificado firmado por CA de confianza (el ms recomendado). 3. Un certificado firmado por una CA creado por nosotros. La siguiente seccin describe en detalle los mtodos de creacin de la mencionada certificados. El resultado final de cualquier mtodo utilizado ser slo dos archivos: server.key - la clave privada del servidor web server.crt - el certificado codificado mediante PEM, que incluye la web del servidor de claves pblicas

Mtodo1:Auto-certificado firmado
Este mtodo slo se recomienda para la continuacin de nuestras pruebas, o para su utilizacin en las pequeas, ambientes cerrados (como en el hogar o en pequeas Intranets). A fin de que la navegadores web para poder autenticar el servidor web, auto-firmado los certificados deben estar instalados en cada navegador web que necesita acceder al servidor web. Esto puede ser muy inconveniente. The web server's private/public key pair and the self-signed PEM-encoded certificate now can be created as follows: La web del servidor de los sectores pblico y privado par de claves y la autofirmado certificado codificado PEM-ahora se pueden crear de la siguiente manera: openssl req -new -x509 -days 365 -sha1 -newkey rsa:1024 -nodes -keyout client.key -out cliente.crt -subj '/O=Secure/OU=SecureLabs/CN=www.secure'