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.
Material relacionado
- Cómo crear Virtual Hosts con Apache para Linux y Mac
- Hostnames automáticos con el plugin Vagrant Hostupdater en Homestead
- Instalación y configuración de Homestead 3 en Mac o Linux
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