domingo, 22 de julio de 2012

Como crear y configurar un certificado SSL en WAMP para navegación segura por HTTPS




El día de hoy me vi en la necesidad de montar un entorno de pruebas para una aplicación de Facebook que me encuentro desarrollando. Debido que a partir del año pasado es necesario poseer un SSL para trabajar sobre Facebook me vi en la necesidad de configurar mi servidor de aplicaciones PHP (WAMP) con un certificado SSL. A continuación documentare el proceso que encontré googleando un poco pero que no esta disponible en español.

Descripción del servidor:

SO: Windows Server 2003
Servidor de aplicaciones: WAMP 2.2
PHP
MySQL

PASO 1: Crear el certificado SSL

Según la documentación de WAMP debemos entrar por linea de comando a la ruta wamp\bin\apache\apache2.2.8\bin (donde 2.2.8 corresponderá a la versión del apache que venia con tu  WAMP, en mi caso 2.2.22) y ejecutar las siguientes lineas de comando:


 openssl genrsa -des3 -out server.key 1024  

Al ejecutarse esta linea de comando te solicitara una contraseña la cual podrás elegir a tu preferencia.

Antes de continuar, quiero hacer un paréntesis ya que al intentar ejecutar el comando openssl obtenia un error en la dll ssleay32.dll "The ordinal 968 could not be located in dynamic link library LIBEAY32.dll" para solucionarlo instale el OpenSSL win32  light , y reemplace los archivos que menciono a continuación en el directorio bin del apache del WAMP

ssleay32.dll
libeay32.dll
openssl.exe


Bueno continuando con la creación del certificado ejecuto las siguientes lineas de comando desde el cmd de windows


 copy server.key server.key.org  
 openssl rsa -in server.key.org -out server.key  
 openssl req -new -x509 -nodes -sha1 -days 365 -key server.key -out server.crt -config C:\wamp\bin\apache\apache2.2.8\conf\openssl.cnf  

Recuerda que para la tercera linea de comando el directorio apache2.2.8 corresponderá a tu versión de apache instalada, una vez se haya ejecutado la 3ra linea de comando se te solicitaran alguna información tuya y de tu servidor.

PASO 2: Montaje en WAMP

Finalizada la creación del certificado aparecerán en el directorio bin (wamp\bin\apache\apache2.2.8\bin) de tu apache los archivos: server.key y server.crt  los cuales deberás copiar en el directorio de configuracion  del mismo (wamp\bin\apache\apache2.2.8\conf) en los directorios que deberás crear 


ssl.key (para server.key)
ssl.crt (para server.crt)

PASO 3: Configuración

Edición del httpd.conf file y php.ini

Para el caso del httpd.conf deberemos descomentar las lineas

 LoadModule ssl_module modules/mod_ssl.so   
 Include conf/extra/httpd_ssl.conf   

y agregar bajo la linea del Include

 <IfModule ssl_module></IfModule>   

Para el caso del php.ini (el cual hace referencia al que esta en la carpeta bin del apache wamp\bin\apache\apache2.2.8\bin) deberemos descomentar la linea: 

 extension=php_openssl.dll   

Como pudiste ver incluimos el directorio conf/extra/httpd_ssl.conf dentro de la configuración de nuestro apache a continuación definiremos algunos parámetros para el certificado creado.


 Quitar las comillas a "SSLMutex default"  
 Buscar la linea de <VirtualHost _default_:443> y cambiar la linea que dice DocumentRoot por:   
 "C:/wamp/www/" con comillas y cambiar el Error log de igual manera   
 Cambiar el SSLCertificateFile a "conf/ssl.crt/server.crt"   
 Cambiar el SSLCertificateKeyFile a "conf/ssl.key/server.key"   
 Cambiar <Directory "C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin"> a <Directory "C:/wamp/www/"> y agregar las siguientes lineas de codigo dentro del tag Directory  
 Options Indexes FollowSymLinks MultiViews   
 AllowOverride All   
 Order allow,deny   
 allow from all   

Verifica  que la linea CustomLog "logs/ssl_request_log"  este des comentada


PASO 4: Prueba

Para verificar nuestra configuración introducimos la siguiente linea de comando donde intrudujimos los comando del openssl:

 httpd -t   

Si hemos realizado todo correctamente nos aparecerá OK reiniciamos servicios del WAMP
y tenemos montado el SSL localmente para publicarlo en una dirección publica o dominio de servidor
modificamos la linea dentro del httpd_ssl.conf y reiniciamos servicios del servidor

 ServerName localhost:443' a 'ServerName www.tudominio.com:443'  



Espero les sirva de tanta ayuda como para mi!
Saludos


17 comentarios:

  1. Guauuu... que manual... bien!!! Aunque no se que es WAMP... pero bueno... creo que esta muy específico!!!

    ResponderEliminar
  2. Compa, es un servidor APACHE con PHP y MySQL
    como IIS con ASP.NET y SQL server

    ResponderEliminar
  3. me sirve de mucho lo estuve buscando mucho tiempo gracias y sigue adelante

    ResponderEliminar
  4. Excelente tu guía, por fin pude hacer esto, Gracias!!

    ResponderEliminar
  5. Si despues de configurar todo y aparacer el OK y reiniciarlo el wamp se queda en color naranja que es lo que puede estar mal??

    ResponderEliminar
  6. disculpa todo sale bn pero no me aparece el candadito de https, puedes ayudarme

    ResponderEliminar
  7. Si despues de configurar todo y aparacer el OK y reiniciarlo el wamp se queda en color naranja que es lo que puede estar mal??

    ResponderEliminar
  8. Respuestas
    1. El problema viene de los logs, si ha hacer httpd -t como dice la guía os responde Syntax OK, mirar el log de errores de Apache. Es probable que salga el error "Unable to load logs" o algo parecido.

      El problema es que no halla todos los archivos de log necesarios, simplemente hay que repasarlos todos.

      www.vender-online.org

      Eliminar
  9. Ya me temía que quedaba en naranja.... ¿Cómo puedes saber si funciona? De cualquier manera, me parece que esto es así: Hay 4 niveles de usuarios en TI: 1º- el usuario final que consume los productos de interface personal -facebook, twitter, widgets para celulares, etc.- que no sabe cómo se fabrican, pero mide los resultados.
    2º el desarrollador de esos productos, que se puede decir que es la 'capa minorista' en la oferta de estos productos.
    3º el host, cuya preocupación no es tanto desarrollar estos productos sino brindar conectividad, accesibilidad y seguridad a nivel de hardware y software en la red los 365 días del año las 24 hs. del día. Este segmento representa la capa mayorista del mercado de oferta de TI.
    4º los fabricantes de hardware y software a gran escala, como Microsoft, IBM, Oracle, etc. cuyo segmento es innovar y crear eficiencia en el uso del soft para las capas siguientes. En este caso, creo que generar una conexión SSL es PROBLEMA DEL HOST, es decir, del mayorista en donde vas a colocar tu aplicación. Podrías hablar directamente con tu proveedor y pedirle que se encargue de tu conexión SSL en entorno de prueba. Es más caro, pero a la larga es más eficiente. No sé. Se me ocurre...

    ResponderEliminar
  10. NO FUNCIONA, SE QUEDA EN NARANJA Y YA NO EJECUTA LAS PAGINAS QUE TENGO LOCALMENTE...

    ResponderEliminar
  11. Hay que mirar los errores.. y arreglarlos....


    D:\wamp\bin\apache\Apache2.4.4\bin>httpd -t
    httpd: Syntax error on line 518 of D:/wamp/bin/apache/Apache2.4.4/conf/httpd.conf: Expected before end of configuration

    D:\wamp\bin\apache\Apache2.4.4\bin>httpd -t
    httpd: Syntax error on line 518 of D:/wamp/bin/apache/Apache2.4.4/conf/httpd.conf: Expected before end of configuration

    D:\wamp\bin\apache\Apache2.4.4\bin>httpd -t
    AH00526: Syntax error on line 76 of D:/wamp/bin/apache/Apache2.4.4/conf/extra/httpd-ssl.conf:
    SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).

    D:\wamp\bin\apache\Apache2.4.4\bin>httpd -t
    AH00526: Syntax error on line 76 of D:/wamp/bin/apache/Apache2.4.4/conf/extra/httpd-ssl.conf:
    SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).

    D:\wamp\bin\apache\Apache2.4.4\bin>httpd -t
    AH00526: Syntax error on line 76 of D:/wamp/bin/apache/Apache2.4.4/conf/extra/httpd-ssl.conf:
    SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).

    D:\wamp\bin\apache\Apache2.4.4\bin>httpd -t
    AH00526: Syntax error on line 76 of D:/wamp/bin/apache/Apache2.4.4/conf/extra/httpd-ssl.conf:
    SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).

    D:\wamp\bin\apache\Apache2.4.4\bin>httpd -t
    AH00526: Syntax error on line 75 of D:/wamp/bin/apache/Apache2.4.4/conf/extra/httpd-ssl.conf:
    SSLSessionCache: 'dbm' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_dbm?).

    D:\wamp\bin\apache\Apache2.4.4\bin>httpd -t
    AH00526: Syntax error on line 76 of D:/wamp/bin/apache/Apache2.4.4/conf/extra/httpd-ssl.conf:
    SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).

    D:\wamp\bin\apache\Apache2.4.4\bin>httpd -t
    AH00526: Syntax error on line 76 of D:/wamp/bin/apache/Apache2.4.4/conf/extra/httpd-ssl.conf:
    SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).

    D:\wamp\bin\apache\Apache2.4.4\bin>httpd -t
    AH00526: Syntax error on line 76 of D:/wamp/bin/apache/Apache2.4.4/conf/extra/httpd-ssl.conf:
    SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).

    D:\wamp\bin\apache\Apache2.4.4\bin>httpd -t
    AH00526: Syntax error on line 76 of D:/wamp/bin/apache/Apache2.4.4/conf/extra/httpd-ssl.conf:
    SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).

    D:\wamp\bin\apache\Apache2.4.4\bin>httpd -t
    Syntax OK

    ResponderEliminar
  12. Soluvioné el color naranja cambiando el puerto de la linea Listen. Estaba en 80 y lo deje en 8080. ahí me funciono.

    ResponderEliminar
  13. Muy bien documentado :) te felicito.

    Pero tengo 2 problemas -_-
    Tras la instalación básica corregir errores del httpd -t funciona pero me salta el mensaje :
    - Esta conexión no está verificada

    Y cuando instalas el certificado aparece el mensaje de que el sitio es erróneo.

    El segundo problema, es que el puerto 433 no puedo utilizarlo y al cambiarlo a otro libre por ejemplo el 833 ... entonces ya https://localhost:833/ no funciona, tengo:
    Apache Version : 2.4.4
    PHP Version : 5.4.16

    Seguiré investigando.

    ResponderEliminar
  14. Hola , me parece genial tu guia muy sencilla y me funciono bien, pero cuando voy al navegador que pongo https://localhost/miproyecto, no me muestra ninguno de los proyecto en mi www

    ResponderEliminar
  15. La redacción deja mucho que desear y no se entiende claramente que hay que hacer ni en que archivo hay que editar que cosa, pero algo se entendió.

    Saludos.

    ResponderEliminar