Generalidades
Este artículo te guía a través del proceso de creación de un certificado Wildcard 'Let's Encrypt' en tu dominio alojado en DreamCompute. Con esta configuración, se configura un solo certificado SSL en tu dominio principal (example.com), pero todos los subdominios bajo (como blog.example.com) también podrán usar el certificado.
Configurar tu sitio e instancia
Este artículo asume que ya has hecho lo siguiente:
- Lanzado una instancia
- Agregaste tu sitio web principal a DreamCompute (es decir, example.com)
Este artículo asume que has creado tu sitio en el directorio /var/www y no en tu /home/username.
- Siguiendo los mismos pasos, agrega los subdominios que desees alojar en DreamCompute (es decir, blog.example.com)
Si has seguido esos pasos, tu sitio web y sus subdominios ya se resolverán desde la instancia de DreamCompute. Ahora puedes crear el certificado Wildcard para usar con todos esos dominios.
Habilitar mod_rewrite y ssl
Antes de continuar, asegúrate de que mod_rewrite y ssl estén habilitados en tu instancia. Puedes confirmar corriendo los siguientes comandos:
[user@instance]$ ls -1 /etc/apache2/mods-enabled | grep rewrite [user@instance]$ ls -1 /etc/apache2/mods-enabled | grep ssl
Si no aparece nada, habilítalo con los siguientes comandos:
[user@instance]$ sudo a2enmod rewrite [user@instance]$ sudo a2enmod ssl [user@instance]$ sudo systemctl reload apache2
Vuelve a verificar y verás que se enumeran reescribir y ssl.
[user@instance]$ ls -1 /etc/apache2/mods-enabled | grep rewrite rewrite.load [user@instance]$ ls -1 /etc/apache2/mods-enabled | grep ssl ssl.conf
ssl.load
Crear el certificado
Corre los siguientes comandos para crear tu certificado Wildcard.
- Inicia sesión en tu instancia.
- Corre los siguientes comandos para instalar un certificado Let's Encrypt.
Asegúrate de cambiar example.com a tu nombre de dominio real en el siguiente comando.
[user@instance]$ sudo apt install certbot python3-certbot-apache -y
[user@instance]# sudo certbot --manual -d "example.com" -d "*.example.com" --server https://acme-v02.api.letsencrypt.org/directory certonly - Cuando se te solicite, ingresa 'y' para continuar con la instalación.
- Se te pedirá que ingreses una dirección de correo. Ingresa cualquier dirección, pero una que tengas acceso directo para verificar.
- Ingresa 'A' para aceptar los términos de servicio.
- Elige si deseas compartir tu correo con Electronic Frontier Foundation.
- Finalmente se te hará la siguiente pregunta:
------------------------------------------------------------------------------- NOTE: The IP of this machine will be publicly logged as having requested this certificate. If you're running certbot in manual mode on a machine that is not your server, please ensure you're okay with that. Are you OK with your IP being logged? ------------------------------------------------------------------------------- (Y)es/(N)o: y
- Ingresa 'y' para continuar.
- El siguiente mensaje te informará de un nuevo registro TXT que debes agregar a tu dominio.
------------------------------------------------------------------------------- Please deploy a DNS TXT record under the name _acme-challenge.example.com with the following value: Tzx6GaeSJHe14C6t_M9wTBDe0s1stDMuq2Y15GLFZPE Before continuing, verify the record is deployed. -------------------------------------------------------------------------------
NO presiones la tecla Enter todavía. Primero debes configurar este registro en tu panel DreamHost.
La forma más sencilla de hacer esto es hacer clic en CTRL + C en tu teclado para abortar el proceso de terminal actual. A continuación, copia el registro TXT largo de tu terminal y pégalo en tu panel DreamHost.
- Navega a la página Administrar Sitios Web.
- Da clic en el botón Administrar para abrir la página Administrar Sitios Web, la cual te permite ajustar múltiples configuraciones de tu sitio.
- Si estás en la Vista de Malla, da clic en el botón Administrar en la parte inferior de la caja del sitio.
- Si estás en la Vista de Lista, da clic en el botón Administrar a la derecha de tu dominio.
- Da clic en la pestaña DNS en la parte superior.
- Haz clic en el botón Agregar Registro.
- Con la información anterior, crea un nuevo registro TXT de la siguiente manera:
- Name: — _acme-challenge
- Type: — TXT
- Value: — Ingresa el valor en el paso #9 de arriba. En este ejemplo sería: Tzx6GaeSJHe14C6t_M9wTBDe0s1stDMuq2Y15GLFZPE
- Un mensaje verde que dice "¡Éxito!", notificándote que se ha creado el registro. La instancia ahora requiere unos minutos para actualizar este registro. Espera al menos 15 minutos antes de continuar, o abre otro terminal y ejecuta el siguiente comando para confirmar que el registro se ha actualizado:
[user@instance]$ dig _acme-challenge.example.com +short txt
- De vuelta al indicador de tu terminal original, corre el comando de arriba nuevamente. Esta vez, se te indica que crees un archivo personalizado para 'Let's Encrypt'. Verás lo siguiente:
Create a file containing just this data: EZdd0CuoMENyxMP20TU9QSuX0VGeqSY7vYPPHMeM5_s.l3pHZcFiLUV6rJtRaFjP3BhEM7m1CPUimJifet--_SY And make it available on your web server at this URL: http://example.com/.well-known/acme-challenge/EZdd0CuoMENyxMP20TU9QSuX0VGeqSY7vYPPHMeM5_s Press Enter to Continue
- No hagas clic en la tecla 'Enter' todavía. Abre una segunda terminal. En esa nueva terminal, corre el siguiente comando para crear estos directorios:
[user@instance]$ sudo mkdir -p /var/www/example.com/.well-known/acme-challenge
- Crea el archivo usando nano.
[user@instance]$ sudo nano /var/www/example.com/.well-known/acme-challenge/EQdd0CuoMENyxMP20TU9QSuX0VGeqSY7vYPPHMeM5_s
- Agrega el código mencionado anteriormente y luego guarda el archivo.
- De vuelta en tu primer terminal, haz clic en la tecla 'Enter' en tu teclado para continuar. Verificará el archivo que acabas de agregar, luego nuevamente te indicará que crees el registro TXT. Como ya has creado este registro TXT, vuelva a hacer clic en 'Enter.
------------------------------------------------------------------------------- Please deploy a DNS TXT record under the name _acme-challenge.example.com with the following value: Tzx6GaeSJHe14C6t_M9wTBDe0s1stDMuq2Y15GLFZPE Before continuing, verify the record is deployed. ------------------------------------------------------------------------------- Click Enter to continue Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2018-07-14. To obtain a new or tweaked version of this certificate in the future, simply run certbot-auto again. To non-interactively renew *all* of your certificates, run "certbot-auto renew"
Configurar tu dominio para usar este certificado
Navega hasta el directorio /site-available.
[user@instance]$ cd /etc/apache2/sites-available
En este directorio hay un archivo llamado example.com.conf que ya creaste al configurar el dominio. Edita este archivo y agrega el siguiente código resaltado. Asegúrate de cambiar example.com a tu nombre de dominio real.
<VirtualHost *:80> ServerName example.com ServerAlias www.example.com ServerAdmin admin@example.com DocumentRoot /home/ubuntu/example.com <Directory /home/ubuntu/example.com> AllowOverride all Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/example.com-error.log CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined RewriteEngine on RewriteCond %{SERVER_NAME} =example.com [OR] RewriteCond %{SERVER_NAME} =www.example.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
Estas nuevas líneas redirigirán la versión http de tu sitio a https.
Luego, crea un nuevo archivo .conf para tu certificado Let's Encrypt. El nombre será example.com-le-ssl.conf. Asegúrate de cambiar example.com a tu nombre de dominio real.
[user@instance]$ sudo vim example.com-le-ssl.conf
En este archivo agrega el siguiente código.
Asegúrate de cambiar example.com a tu nombre de dominio real.
<IfModule mod_ssl.c> <VirtualHost *:443> ServerName example.com ServerAlias www.example.com ServerAdmin admin@example.com DocumentRoot /home/ubuntu/example.com <Directory /home/ubuntu/example.com> AllowOverride all Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/example.com-error.log CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem </VirtualHost> </IfModule>
Asegúrate de habilitar este nuevo archivo.
[user@instance]$ sudo a2ensite example.com-le-ssl Enabling site example.com-le-ssl
Finalmente, vuelve a cargar tu servicio Apache para que lea los cambios.
[user@instance]$ sudo systemctl reload apache2
Configura tus subdominios para usar este certificado
Crea archivos adicionales para cualquier subdominio para el que desees utilizar este mismo certificado. Por ejemplo, si deseas que el subdominio sub1.example.com también esté protegido por este certificado Wildcard, agrega los archivos denominados sub1.example.com.conf y sub1.example.com-le-ssl.conf al directorio /etc/apache2/sites-available como se muestra arriba.
Al editar el archivo sub1.example.com-le-ssl.conf, asegúrate de cambiar sub. a tu nombre real de subdominio, excepto por las últimas 2 líneas:
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Estos deben seguir apuntando al nombre de dominio principal.
<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin webmaster@localhost DocumentRoot /var/www/sub1.example.com ErrorLog ${APACHE_LOG_DIR}/sub1.example.com-ssl-error.log CustomLog ${APACHE_LOG_DIR}/sub1.example.com-ssl-access.log combined ServerAlias sub1.example.com
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem </VirtualHost> </IfModule>
Asegúrate de habilitar los dos archivos de configuración de tu subdominio:
Asegúrate de habilitar este nuevo archivo y default-ssl
[user@instance]$ sudo a2ensite sub1.example.com.conf [user@instance]$ sudo a2ensite sub1.example.com-le-ssl Enabling site example.com-le-ssl
Finalmente, vuelve a cargar Apache para que conozca las nuevas configuraciones.
[user@instance]$ sudo systemctl reload apache2