Agregar un certificado SSL Wildcard a un dominio DreamCompute

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:

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.

  1. Inicia sesión en tu instancia.
  2. 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
  3. Cuando se te solicite, ingresa 'y' para continuar con la instalación.
  4. Se te pedirá que ingreses una dirección de correo. Ingresa cualquier dirección, pero una que tengas acceso directo para verificar.
  5. Ingresa 'A' para aceptar los términos de servicio.
  6. Elige si deseas compartir tu correo con Electronic Frontier Foundation.
  7. 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
  8. Ingresa 'y' para continuar.
  9. 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.

  10. Inicia sesión en tu panel de DreamHost y navega hasta la página Administrar Sitios Web
  11. Da click en el enlace DNS debajo de tu dominio.
  12. Haz clic en el botón Agregar Registro.
  13. Con la información anterior, crea un nuevo registro TXT de la siguiente manera:
    Ingresa lo siguiente:
    • Name: — _acme-challenge
    • Type: — TXT
    • Value: — Tzx6GaeSJHe14C6t_M9wTBDe0s1stDMuq2Y15GLFZPE
    Da click en el botón Agregar Registro para guardar.
  14. 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
  15. De vuelta en el indicador de tu terminal, corre el comando nuevamente. Esta vez, se te indicará 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
  16. 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
  17. A continuación, crea el archivo usando nano.
    [user@instance]$ sudo nano /var/www/example.com/.well-known/acme-challenge/EQdd0CuoMENyxMP20TU9QSuX0VGeqSY7vYPPHMeM5_s
  18. Agrega el código mencionado anteriormente y luego guarda el archivo.
  19. 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.confsub1.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

¿Este artículo ha respondido sus preguntas?

Última actualización el PST.

¿Aún no encuentra lo que busca?