En ocasiones, puedes necesitar añadir el certificado SSL a todos los subdominios directamente sin necesidad de ir haciéndolo de forma individual, para esto están los certificados Wildcard.
Hacerlo es bastante sencillo, es similar a adquirir certificados Let's Encrypt con Certbot, pero añadiendo alguna diferencia en la configuración y un registro DNS extra.
Instalación
Empieza actualizando el servidor:
# apt update -y && upgrade -y
Verifica que certbot este instalado:
# apt install certbot -y
Añadir el SSL Wildcard:
Para Añadir el SSL tendrás que utilizar el siguiente comando modificando el mail, y el dominio:
# certbot certonly --manual --preferred-challenges=dns --email ejemplo@ejemplo.com --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d testkb.com -d *.testkb.com
Luego os saldrá un cuadro como este que os indica que tenéis que añadir los registros DNS txt con el subdominio: _acme-challenge.dominio.com así como el código como valor dentro del txt:
En el caso de los NS de Clouding quedaría tal que así:
Una vez lo tengas hecho puedes darle a enter, saldrá una advertencia de que el registro puede tardar un poco en actualizarse, y os facilitará un enlace de Toolbox con el que lo podéis verificar directamente:
Finalmente, ya tendrás tu wildcard creado:
Una vez hecho solo te quedará en tu servidor configurar manualmente los certificados /etc/letsencrypt/live/dominio.com/fullchain.pem y /etc/letsencrypt/live/dominio.com/privkey.pem en el servidor web que estes utilizando.
Adicionalmente, podrás exportarlo para utilizarlo en otros servidores que tengan alojados subdominios del mismo dominio (no renovará automáticamente).
Configurar los certificados en el servidor web
Configuración de los certificados:
En este caso deberás realizar una configuración manual de los ficheros de Nginx para añadir la ubicación de los certificados. Debes modificar los siguientes valores de la configuración del protocolo https (443) por las siguientes ubicaciones:
ssl_certificate /etc/letsencrypt/live/ejemplo.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ejemplo.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
Como también una redirección del puerto 80 TCP (HTTP) hacia 443 TCP (HTTPS) en el apartado correspondiente si lo deseas. Ejemplo:
server {
if ($host = ejemplo.com) {
return 301 https://$host$request_uri;
}
listen 80 ;
listen [::]:80 ;
server_name ejemplo.com;
return 404;
}
También puedes utilizar SSL Checker o un SSL Server Test para verificar el certificado Let's Encrypt.
Configuración de los certificados:
Ejemplo de fichero de configuración de Apache para HTTPS:
<IfModule mod_ssl.c>
<VirtualHost *:443>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
ServerName ejemplo.com
SSLCertificateFile /etc/letsencrypt/live/ejemplo.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/ejemplo.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
Ejemplo de redirección de HTTP a HTTPS para configuración de site de apache:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =ejemplo.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
Configuración de los certificados:
Una vez realizado indica en la configuración la ubicación de los certificados para el dominio en cuestión. Si tienes acceso al Webadmin puedes realizarlo desde el apartado SSL del correspondiente virtualhost del dominio en cuestión:
Private Key File | /etc/letsencrypt/live/ejemplo.com/privkey.pem |
Certificate File | /etc/letsencrypt/live/ejemplo.com/fullchain.pem |
Recuerda adicionalmente que tienes que habilitar el Listener por el puerto 443 si no lo tienes habilitado previamente, mapear el dominio e indicar la conexión como segura:
En el apartado SSL añade un certificado para poder configurar el SSL y soportando los protocolos necesarios, como aparece en las capturas siguientes:
Luego en Virtual Hosts configura el certificado:
Adicionalmente puedes activar y crear una regla para el redireccionamiento:
Regla para redirección:
rewriteCond %{HTTPS} !on
rewriteCond %{HTTP:X-Forwarded-Proto} !https
rewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
Configuración de los certificados de LiteSpeed
En caso de no utilizar CyberPanel edita el fichero de configuración del servicio web para crear o modificar el Listener:
# vi /usr/local/lsws/conf/httpd_config.conf
Un ejemplo para añadir o modificar el Listener e indicar la ubicación de un certificado con mapeado de vhosts:
listener HTTPS {
address *:443
secure 1
keyFile /etc/letsencrypt/live/ejemplo.com/privkey.pem
certFile /etc/letsencrypt/live/ejemplo.com/fullchain.pem
certChain 1
sslProtocol 31
map ejemplo ejemplo.com
map ejemplo2 ejemplo2.com
}
Luego deberás modificar también la configuración del vhost o vhosts (Creando previamente el listener mapeado):
# vi /usr/local/lsws/conf/vhosts/ejemplo.com/vhconf.conf
Un ejemplo del fichero de configuración del vhost con redireccionamiento de HTTP a HTTPS:
docRoot $VH_ROOT/html/
rewrite {
enable 1
autoLoadHtaccess 1
rules <<<END_rules
rewriteCond %{HTTPS} !on
rewriteCond %{HTTP:X-Forwarded-Proto} !https
rewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
END_rules
}
vhssl {
keyFile /etc/letsencrypt/live/ejemplo.com/fullchain.pem
certFile /etc/letsencrypt/live/ejemplo.com/fullchain.pem
}
Recuerda, si tienes consultas sobre esta u otra cuestión relacionada con tus servidores en Clouding, no dudes en escribir a soporte@clouding.io ¡Estamos a tu lado para lo que necesites, consúltanos!