Instrucciones para instalar y configurar Apache + OpenSSL
Este documento intenta explicar como hacer la configuracion de Apache y ModSSL para obtener un site seguro, que tenga capacidad de manejar conexiones encriptadas, usando una clave que puede ser firmada por una autoridad privada (Verisign, Thawte, etc) o por una autoridad creada por nosotros mismos. Tambien tu clave puede ser firmada por algun servidor de algun amigo tuyo, que este cuya clave haya sido firmada por un servidor seguro, pero esto ultimo ya es un tema que no tocare en este documento
Para realiar esta instlacion, asumire que tienes instalados, configurados y 100% funcionales lo sisguientes paquetes.
Aqui veremos algunos elementos que deben estar presentes en la configuracion de Apache. En el archivo de configuracion de Apache (httpd.conf) debemos tener las siguientes lineas
<IfDefine SSL> LoadModule ssl_module extramodules/libssl.so </IfDefine>
<IfDefine SSL> AddModule mod_ssl.c </IfDefine>
Include /etc/apache/conf/addon-modules/mod_ssl.conf
Con esas lineas, tendrias ya configurado el archivo principal de Apache. Ahora, es importante notar que la linea Include, la cual contiene el path hacia el archivo de configuracion que contiene las directivas de Apache y ModSSL. Veamos ahora la configuracion del ModSSL la cual esta contenida en el archivo mod_ssl.conf
<IfModule mod_ssl.c> Listen 443 AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl SSLPassPhraseDialog builtin SSLSessionCache shm:logs/ssl_scache(512000) SSLSessionCacheTimeout 300 SSLMutex sem SSLRandomSeed startup builtin SSLRandomSeed connect builtin SSLLog logs/ssl_engine_log SSLLogLevel info B< SSLCertificateFile /path_to/server.crt> B< SSLCertificateKeyFile /path_to/server.key> SSLEngine On </IfModule>
Con esto deberia ser suficiente, aunque para activar el ModSSL para los VirtualHost, se debe agregar lo siguiente al httpd.conf. Respecto a las lineas en negrita, fijense que aqui estamos especificando la ruta en donde se encuentran los archivos que poseen la clave privada y la firma digital. Ya veremos en la proxima seccion como hacer para generar dichas claves, e incluso como firmarlas con nuestro propio servidor en el caso de que no poseamos un certificado de Verisgn , Thawte, etc
Include /etc/apache/conf/vhosts/ssl.default-vhost.conf
Ahora, la estrategia que usare en este documento consta de lo siguiente. Creare dos VirtualHosting, uno para un dominio virtualel cual no requiere de encriptacion (www.dominio.com), y el otro para un dominio virtual que si requiere de encriptacion (ssl.dominio.com). Comenzare configurando el dominio virtual que requiere de encriptacion (ssl.dominio.com) En el interior del archivo ssl.default-vhost.conf se debe tener algo asi
<IfModule mod_ssl.c> <VirtualHost _default_:443> DocumentRoot /var/www/htdocs ErrorLog logs/ssl-error_log TransferLog logs/ssl-access_log SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /path_to/server.crt
SSLCertificateKeyFile /path_to/server.key
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown CustomLog logs/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" RewriteEngine On RewriteOptions inherit </VirtualHost>
<VirtualHost 10.0.0.40:443> ServerName ssl.dominio.com DocumentRoot /var/www/sslsite DirectoryIndex index.html ServerPath /dominio SSLEngine on
SSLCertificateFile conf/ssl/server.crt
SSLCertificateKeyFile conf/ssl/server.key
ErrorLog /var/log/apache/ssl-error.log CustomLog logs/ssl-access.log combined env=!VLOG </VirtualHost> </IfModule> Las lineas en negrita merecen especial atencion, ya que en dichos archivos se encuentran los certificados firmados y las claves del servidor y del dominio virtual (fijense que las tenemos tambien adentro de <VirtualHost>. El archivo server.crt contiene XXXX mientras que el archivo server.key contiene el XXXXX de cada host virtual. Recuerde que cada VirtualHost debe posee una clave firmada y privada de manera particular, por lo que si tenemos 15 VirtualHosting que usen SSL, debemos tener 15 claves privadas y 15 firmas digitales. Es obvio lo explicado anteriormente ya que todas estas directivas se encuentran dentro de la directiva global <VirtualHost>
Ahora, para configurar el dominio virtual sin encriptacion, hacemos las configuraciones comunes de todo VirtualHosting, en el archivo Vhost.conf :
NameVirtualHost 10.0.0.40
<VirtualHost 10.0.0.40:80> ServerName www.dominio.com ServerPath /dominio DocumentRoot /var/www/dominio DirectoryIndex index.html ErrorLog /var/log/apache/error.log CustomLog /var/log/apache/access.log common </VirtualHost>
Notese que estamos usando VirtualHosting basado en nombres
Veamos como es el procedimiento para firmar una clave privada. Paso a paso haremos lo siguiente.
openssl req -new -out server.csr
En el momento en que se pregunte por ``Common Name'', debemos responder con el nombre del dominio al cual le deseamos generar la clave. El certificado pertenecera al nombre del dominio, y los browsers sabran como manejar esta situacion.
openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 365
Este comando firmara la clave por un periodo de 265 dias. Puedes aumentar el numero de dias sin ningun problema.
/usr/sbin/apache -D SSL
openssl s_client -connect ip_o_nombre_de_maquina:443
Esto debera responder algo similar a esto
CONNECTED(00000003) depth=0 /C=at/ST=Wien/L=Wien/O=APC interactive/OU=Lifecycle Management/CN=apcenter.apcinteractive.net/Email=bb@apcinteractive.net verify error:num=18:self signed certificate verify return:1 depth=0 /C=at/ST=Wien/L=Wien/O=APC interactive/OU=Lifecycle Management/CN=apcenter.apcinteractive.net/Email=bb@apcinteractive.net verify return:1 --- Certificate chain 0 s:/C=at/ST=Wien/L=Wien/O=APC interactive/OU=Lifecycle Management/CN=apcenter.apcinteractive.net/Email=bb@apcinteractive.net i:/C=at/ST=Wien/L=Wien/O=APC interactive/OU=Lifecycle Management/CN=apcenter.apcinteractive.net/Email=bb@apcinteractive.net --- Server certificate -----BEGIN CERTIFICATE----- MIIC0TCCAjoCAQAwDQYJKoZIhvcNAQEEBQAwgbAxCzAJBgNVBAYTAmF0MQ0wCwYDV [...] 9ucXUnk= -----END CERTIFICATE----- subject=/C=at/ST=Wien/L=Wien/O=APC interactive/OU=Lifecycle Management/CN=apcenter.apcinteractive.net/Email=bb@apcinteractive.net issuer=/C=at/ST=Wien/L=Wien/O=APC interactive/OU=Lifecycle Management/CN=apcenter.apcinteractive.net/Email=bb@apcinteractive.net --- 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: Master-Key: 00E9FA964253752294ECD69C18ADBA527B7170C112E2B3BCB25EA8F4FD847EC46E1FF0194EF8E16985B5E38BF6F12131 Key-Arg : None Start Time: 980696025 Timeout : 300 (sec) Verify return code: 0 (ok) ---
Por supuesto, tambien en tu browser puedes colocar lo siguiente
https://nomre_o_ip_server
Carlos Molina Garcia cmolina@net-uno.net