banner Dummy SSL para desarrollo con Homestead

Eventualmente nos hemos visto en la necesidad de trabajar con sitios web que cuentan con certificados SSL, posiblemente durante el desarrollo se requiera simular el uso de este tipo de certificados de forma local, esto puede ser una tarea complicada y tediosa en algunos casos, pero si trabajas con Homestead, puedes hacer uso de esta solución realmente sencilla para crear un certificado SSL «falso» que puedes utilizar en tu máquina virtual.

Se trata de un pequeño script que crea un certificado SSL y lo configura para cada hostname en el que desees activarlo:

#!/usr/bin/env bash

# Hostnames.
sites_hosts=( www.example.dev )

# Config for SSL.
SSL_DIR="/etc/nginx/ssl"
PASSPHRASE="secret"
SUBJ="
C=BE
ST=SomeState
O=SomeCompany
localityName=SomeCity
commonName=*.$DOMAIN
organizationalUnitName=HQ
[email protected]
"

echo "--- Making SSL Directory ---"
sudo mkdir -p "$SSL_DIR"

for i in "${sites_hosts[@]}"
do
    echo "--- Copying $i SSL crt and key ---"

    DOMAIN=$i

    sudo openssl genrsa -out "$SSL_DIR/$DOMAIN.key" 1024 >/dev/null 2>&1
    sudo openssl req -new -subj "$(echo -n "$SUBJ" | tr "\n" "/")" -key "$SSL_DIR/$DOMAIN.key" -out "$SSL_DIR/$DOMAIN.csr" -passin pass:$PASSPHRASE >/dev/null 2>&1
    sudo openssl x509 -req -days 365 -in "$SSL_DIR/$DOMAIN.csr" -signkey "$SSL_DIR/$DOMAIN.key" -out "$SSL_DIR/$DOMAIN.crt" >/dev/null 2>&1

    # Comment out this line if you prefer ssl on a per
    # server basis, rather for all sites on the vm.
    # If commented out you can access hosts on http
    # port 8000, and https port 44300. If uncommented,
    # you can ONLY access hosts via https on port 44300.
    #echo "--- Turning SSL on in nginx.conf. ---"
    #sed -i "/sendfile on;/a \\        ssl on;" /etc/nginx/nginx.conf

    echo "--- Inserting SSL directives into site's server file. ---"
    sed -i "/listen 80;/a \\\n    listen 443 ssl;\n    ssl_certificate /etc/nginx/ssl/$i.crt;\n    ssl_certificate_key /etc/nginx/ssl/$i.key;\n\n" /etc/nginx/sites-available/$i

done
echo "--- Restarting Serivces ---"
service nginx restart
service php5-fpm restart

Para agregar el certificado a cada hostname debes especificarlos cambiando esta línea:

sites_hosts=( www.example.dev )

Por defecto el script está configurado para manejar el SSL en el puerto 44300, lo que quiere decir que solo podrás acceder con https utilizando la url https://www.example.dev:44300.

Para cambiar esto y permitir usar el SSL en el puerto 8000 puedes descomentar esta línea:

#sed -i "/sendfile on;/a \\        ssl on;" /etc/nginx/nginx.conf

Este script debe ir en el archivo ~/.homestead/after.sh

Una vez editado el archivo deber reiniciar la máquina virtual usando:

$ vagrant reload

$ vagrant provision

Listo, con esto ya puedes acceder a tus proyectos usando SSL de forma local.

Este script fue publicado por @ivanvermeyen en este thread https://laracasts.com/discuss/channels/tips/tip-how-to-enable-ssl-in-homestead-20 . Todo el agradecimiento al autor.

Suscríbete a nuestro boletín

Te enviaremos publicaciones con consejos útiles y múltiples recursos para que sigas aprendiendo.

Material relacionado

Únete a nuestra comunidad en Discord y comparte con los usuarios y autores de Styde, 100% gratis.

Únete hoy

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Escribe HTML y CSS más rápido con Emmet Lección siguiente Instalación de Laravel Valet en Linux