Conexión HTTPS en localhost

Gran parte de los desarrollos web (dependiendo del tamaño) tienen áreas a las que solo se accede a través de conexiones seguras HTTPS. Para tener una conexión HTTPS en un servidor se requiere una serie de habilidades adquiridas a lo largo del tiempo... o un poco de investigación. Optando por lo segundo, dicha investigación nos llevará al proceso para configurar un certificado de seguridad en el que será nuestro servidor de live o producción, como gustemos llamarle.

La pregunta que trato de responder al escribir esto es "¿es posible tener una conexión HTTPS desde nuestro ambiente de desarrollo?". No he investigado bastante, pero la respuesta parece ser que sí, al menos en un ambiento de desarrollo LAMP (la "L" es de Linux; pero para precisar más, mi distribución está basada en Debian).

La gente de Apache nos da la respuesta dentro del archivo /usr/share/doc/apache2.2-common/README.Debian.gz. En este archivo, aproximadamente a partir de la línea 168 están las instrucciones para habilitar el módulo SSL y la posterior creación del certificado necesario llamado snakeoil. Entonces, manos a la obra.

Para habilitar el SSL (como súper usuario):

  • a2ensite default-ssl
  • a2enmod ssl

Después, para crear el certificado:

  • make-ssl-cert generate-default-snakeoil --force-overwrite

Con esto podemos ir al archivo /etc/apache2/sites-available/default-ssl, el cual ya debe de existir, si no entonces algo falta. Aquí hay que asegurarnos de descomentar las siguientes líneas:

  • SSLEngine on
  • SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
  • SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

Con todo lo anterior hecho lo que queda es reiniciar el Apache. Si todo fue bien no debería haber problema para abrir https://localhost. Pero, ¿qué pasa si estoy desarrollando en un virtual host?

Como sabemos, los virtual hosts son una configuración extra, ya sea en el archivo de configuración de Apache o en archivos adicionales, esto nos obliga a agregar las directivas especificas en estas configuraciones porque de lo contrario lo que veremos al ingresar a https://mivirtualhost/ será la página de "It Works!" de Apache.

Entonces, en la configuración del virtual host se copia la configuración que ya existe (o sea, todo lo que está dentro de las etiquetas <VirtualHost /> incluyéndolas), al final del archivo abrir la etiqueta <IfModule mod_ssl.c> y dentro pegar la configuración copiada. Al final hay que cerrar con </IfModule>. Realizado lo anterior, procedemos a hacer los cambios necesarios para usar el HTTPS, todos dentro de la configuración recién copiada/pegada dentro de <IfModule />:

  • A la etiqueta <VirtualHost *:80> hay que cambiarle el número de puerto de 80 a 443.
  • Dentro del nuevo <VirtualHost *:443> se agregan las mismas líneas que se descomentaron en el archivo /etc/apache2/sites-available/default-ssl:
    • SSLEngine on
    • SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
    • SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

Para finalizar hay que reiniciar Apache. Si todo fue bien deberíamos ver en https://mivirtualhost/ nuestro proyecto o página de prueba con su respectivo candado en la URL.

Un detalle interesante es que podemos generar más certificados para su uso exclusivo en cada virtual host. Para crearlo se utiliza la siguiente instrucción (obvio, como súper usuario):

  • make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /ruta/del/nuevo/certificado.crt

Esto lanzará un asistente en el cual se piden los siguientes 2 datos:

  • Nombre del equipo. Por default es "localhost"
  • Nombres adicionales para el uso del certificado. Aquí podemos poner nuestro virtual host, sin embargo el ejemplo que nos muestra el asistente no es correcto. Lo correcto es agregar el prefijo "DNS:" al nombre de nuestro virtual host, por lo que debemos escribir algo como DNS:mivirtualhost
Y así se crea el certificado. Nuestro recién creado archivo certificado.crt (o cualquiera que haya sido el nombre) ya contiene el certificado y la key, y gracias a esta situación en la configuración SSL de nuestro virtual host solo será necesario usar la directiva SSLCertificateFile y prescindir de SSLCertificateKeyFile. Hecha la modificación se reinicia el Apache.

Y así es cómo funciona.

Comentarios

  1. 반찬가게 비위생 논란, 깻잎 반찬서 담배꽁초 나와...“납품 받은 중국산? 원산...[영상] ‘안보 정책 플랫폼’ 한국국방안보연구소, 비전 선포식 개최이수건설 카지노 계열 공사장 안전펜스 붕괴 여성 덮쳐..."극심한 통증, 마약성 패치...[영상] bhc 모 지점, 유통기한 지난 식자재 적발 '영업정지'.... 채널제주 모든 콘텐츠(영상,기사, 사진)는 저작권법의 보호를 받은바, 무단 전재와 복사, 배포 등을 금합니다.

    ResponderBorrar

Publicar un comentario