Let’s Encrypt és una autoritat de certificació (CA) que facilita l'obtenció de certificats TLS/SSL gratuïts, cosa que permet la connexió xifrada entre el navegador del client i el servidor remot mitjançant el protocol segur de transferència d'hipertext (HTTPS); el port estàndard d'aquest protocol és el 443 TCP.
Des de Let's Encrypt recomanen que la majoria de les persones amb accés a l'intèrpret d'ordres utilitzin el client ACME anomenat Certbot. Aquest pot automatitzar l'emissió i la instal·lació de certificats i també disposa de modes per a experts que no volen una configuració automàtica.
Si Certbot no satisfà les teves necessitats, hi ha molts altres clients ACME per triar. Un cop hagis triat un client ACME, consulta'n la documentació per continuar.
En aquest tutorial mostrarem com instal·lar Certbot per afegir certificats per a NGINX, Apache i LiteSpeed com a servidor web de manera automàtica i manual per a diferents distribucions Linux.
Per a un sistema Windows pots seguir el nostre article Instal·lar un certificat Let’s Encrypt al Windows Server i, si el servidor té instal·lat un tauler com ara Plesk, cPanel i HestiaCP, utilitza el procediment corresponent:
- Com configurar Let’s Encrypt a HestiaCP
- Com configurar Let's Encrypt a Plesk
- Com configurar AutoSSL de cPanel
Requisits i passos previs
Cal tenir accés a l'intèrpret d'ordres amb root o amb permisos sudo al servidor o servidors VPS amb Nginx o Apache instal·lat per utilitzar aquest article. També has de tenir un domini adquirit que apunti a uns DNS com ara els servidors de noms de Clouding. A més, el teu domini ha de tenir els registres necessaris de tipus A perquè el procés de creació del certificat funcioni correctament (Tipus de registre DNS).
En aquest article, en particular, farem servir d'exemple els registres ejemplo.com i www.ejemplo.com. Si vols crear un certificat per a aquests registres, cal tenir un registre per a cadascun.
Per a un certificat Wildcard cal crear un registre durant el procés d'obtenció; per a més informació, consulta l'apartat corresponent.
Instal·lació de Certbot
Hi ha diversos mètodes d'instal·lació de certbot; en aquest cas expliquem com fer-ho amb apt i snapd. Però si no tens instal·lat snapd o no el faràs servir en el futur, et recomanem la segona opció amb apt (Advanced Packaging Tool), que ve per defecte a les distribucions GNU/Linux per no consumir recursos innecessaris, o yum en el cas de CentOS.
Instal·lació per a NGINX:
Instal·la els paquets necessaris:
# apt update && apt install certbot python3-certbot-nginx
Per a versions anteriors com Ubuntu 16 o Debian 8, el paquet és python-certbot-nginx.
Instal·lació per a Apache:
Instal·la els paquets necessaris:
# apt update && apt install certbot python3-certbot-apache
Per a versions anteriors com Ubuntu 16 o Debian 8, el paquet és python-certbot-apache.
Instal·lació per a LiteSpeed o altres:
LiteSpeed no té cap paquet oficial per a la configuració automàtica, com passa amb altres servidors web. Per tant, només hauràs d'instal·lar el paquet Certbot:
# apt update && apt install certbot
Instal·lació per a NGINX:
Instal·la els paquets necessaris:
# yum update && yum install certbot python3-certbot-nginx
Per a versions anteriors de CentOS 7, el paquet és python-certbot-nginx.
Instal·lació per a Apache:
Instal·la els paquets necessaris:
# yum update && yum install certbot python3-certbot-apache
Per a versions anteriors de CentOS 7, el paquet és python-certbot-apache.
Instal·lació per a LiteSpeed:
LiteSpeed no té cap paquet oficial per a la configuració automàtica. Per tant, només hauràs d'instal·lar el paquet Certbot:
# yum update && yum install certbot
Si no tens snapd instal·lat prèviament, pots executar el següent en el cas de GNU/Linux:
# apt update && apt install snapd && snap install core; snap refresh core
En el cas d'un CentOS caldrà substituir apt per yum i activar-lo d'aquesta manera:
# yum update && yum install snapd && systemctl enable --now snapd.socket && snap install core; snap refresh core
Instal·la Certbot amb snap:
# snap install --classic certbot
Verifica la instal·lació de l'enllaç simbòlic:
# ln -s /snap/bin/certbot /usr/bin/certbot
Obtenir un certificat SSL per a un domini o subdomini
Configuració automàtica (recomanada):
Certifica i modifica automàticament la configuració de Nginx:
# certbot --nginx -d example.com -d www.ejemplo.com
Confirma que la configuració automàtica s'ha fet correctament accedint al teu registre amb HTTPS des d'un navegador i comprovant que hi aparegui el certificat.
També pots utilitzar SSL Checker o un SSL Server Test per verificar el certificat Let's Encrypt.
Configuració manual:
Certificar únicament (sense modificar la configuració de Nginx):
# certbot certonly --nginx -d example.com -d www.ejemplo.com
En aquest cas hauràs de configurar manualment els fitxers de Nginx per afegir-hi la ubicació dels certificats. Has de substituir els valors següents de la configuració del protocol https (443) per les ubicacions següents:
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;
També pots afegir una redirecció del port 80 TCP (HTTP) al 443 TCP (HTTPS) a l'apartat corresponent, si ho vols. Exemple:
server {
if ($host = ejemplo.com) {
return 301 https://$host$request_uri;
}
listen 80 ;
listen [::]:80 ;
server_name ejemplo.com;
return 404;
}
Configuració automàtica (recomanada):
Certifica i modifica automàticament la configuració d'Apache:
# certbot --apache -d example.com -d www.ejemplo.com
Confirma que la configuració automàtica s'ha fet correctament accedint al teu registre amb HTTPS des d'un navegador i comprovant que hi aparegui el certificat.
També pots utilitzar SSL Checker o un SSL Server Test per verificar el certificat Let's Encrypt.
Configuració manual:
Certificar únicament (sense modificar la configuració d'Apache):
# certbot certonly --apache -d example.com -d www.ejemplo.com
Exemple de fitxer de configuració d'Apache per a HTTPS:
<IfModule mod_ssl.c>
<VirtualHost *:443>
# La directiva ServerName estableix l'esquema de la petició, el nom d'amfitrió i el port que
# el servidor utilitza per identificar-se. Això s'utilitza en crear
# URL de redirecció. En el context dels amfitrions virtuals, ServerName
# especifica quin nom d'amfitrió ha d'aparèixer a la capçalera Host: de la petició per
# coincidir amb aquest amfitrió virtual. Per a l'amfitrió virtual per defecte (aquest fitxer), aquest
# valor no és decisiu, ja que s'utilitza com a amfitrió d'últim recurs en qualsevol cas.
# Tanmateix, l'has d'establir explícitament per a qualsevol altre amfitrió virtual.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# Nivells de registre disponibles: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# També és possible configurar el nivell de registre per a determinats
# mòduls, per exemple.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# Per a la majoria de fitxers de configuració de conf-available/, que estan
# habilitats o deshabilitats globalment, és possible
# incloure una línia per a un únic amfitrió virtual concret. Per exemple, la
# línia següent habilita la configuració CGI només per a aquest amfitrió
# després que s'hagi deshabilitat globalment amb "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>
Exemple de redirecció d'HTTP a HTTPS per a la configuració d'un lloc d'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>
Tal com s'indica a la instal·lació, Certbot no proporciona cap paquet oficial per a la configuració automàtica de LiteSpeed. Hauràs de fer una configuració manual obtenint un certificat mitjançant l'opció webroot per fer una validació mitjançant un fitxer ACME:
# certbot certonly --webroot -w /usr/local/lsws/ejemplo.com/html/ -d example.com -d www.ejemplo.com
Configuració mitjançant Webadmin de LiteSpeed
Un cop fet, indica a la configuració la ubicació dels certificats per al domini en qüestió. Si tens accés a Webadmin, pots fer-ho des de l'apartat SSL del virtualhost corresponent al domini en qüestió:
| Private Key File | /etc/letsencrypt/live/ejemplo.com/privkey.pem |
| Certificate File | /etc/letsencrypt/live/ejemplo.com/fullchain.pem |
Recorda, a més, que has d'habilitar el Listener al port 443 si no el tens habilitat prèviament, mapar el domini i indicar que la connexió és segura:
A l'apartat SSL, afegeix un certificat per poder configurar l'SSL i admetre els protocols necessaris, tal com es mostra a les captures següents:
A continuació, a Virtual Hosts, configura el certificat:
A més, pots activar i crear una regla per a la redirecció:
Regla per a la redirecció:
rewriteCond %{HTTPS} !on
rewriteCond %{HTTP:X-Forwarded-Proto} !https
rewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
Configuració manual de LiteSpeed
Si no utilitzes CyberPanel, edita el fitxer de configuració del servei web per crear o modificar el Listener:
# vi /usr/local/lsws/conf/httpd_config.conf
Un exemple per afegir o modificar el Listener i indicar la ubicació d'un certificat amb mapatge 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
}
A continuació també hauràs de modificar la configuració del vhost o dels vhosts (creant prèviament el listener mapat):
# vi /usr/local/lsws/conf/vhosts/ejemplo.com/vhconf.conf
Un exemple del fitxer de configuració del vhost amb redirecció d'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/privkey.pem
certFile /etc/letsencrypt/live/ejemplo.com/fullchain.pem
}
Opcions addicionals i informatives
Comprovar o configurar la renovació automàtica
Certbot configura automàticament la renovació de certificats amb un temporitzador i no cal fer cap acció addicional. Per tant, el que segueix és només informatiu.
Simular una renovació de prova:
# certbot renew --dry-runComprovar l'estat del servei de temporitzador de Certbot:
# systemctl status certbot.timerPer llistar les tasques:
# systemctl list-timersHa d'aparèixer el següent configurat per a la renovació automàtica:
certbot.timer - certbot.serviceI, si has instal·lat Certbot amb snapd, apareixerà això:
snap.certbot.renew.timer - snap.certbot.renew.serviceTambé pots desactivar el servei certbot.timer per renovar-lo mitjançant una tasca programada. En aquest cas, executa un crontab:
# crontab -eAfegim el següent:
00 00 */1 * * certbot renewAmb aquesta configuració farà una comprovació cada dia a les 00:00 i el renovarà si cal.
Obtenir un certificat Wildcard amb Certbot
Executa l'ordre següent modificant l'adreça electrònica vàlida per obtenir un certificat Wildcard:
# certbot certonly --manual --preferred-challenges=dns --email usuario@ejemplo.com --server https://acme-v02.api.letsencrypt.org/directory --agree-tosEt demanarà que introdueixis el domini que vols certificar; indica'l utilitzant *. seguit del domini que vols certificar per obtenir el Wildcard:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Please enter in your domain name(s) (comma and/or space separated) (Enter 'c'
to cancel): *.ejemplo.es
A continuació et preguntarà si estàs d'acord que s'emmagatzemi l'adreça IP als seus registres; hauràs d'acceptar-ho amb "Y":
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for ejemplo.com
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
Finalment, et demanarà que creïs un registre _acme-challenge de tipus TXT al nostre proveïdor de servidors de noms amb el contingut que ens indica:
Please deploy a DNS TXT record under the name
_acme-challenge.ejemplo.com with the following value:
3wkWcAfmf1NvzCgtVSsaSqAaiDf26y3xZLuegXm-uHkaA
Before continuing, verify the record is deployed.
Press Enter to Continue
Crea el registre al teu proveïdor DNS i espera que es propaguin els canvis. Pots verificar-ho amb un nslookup, dig o veure el progrés a DNS Checker per exemple. Un cop propagat, continua prement Enter:
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/ejemplo.com-0001/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/ejemplo.com-0001/privkey.pem
Your cert will expire on 2021-08-04. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run "certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
En aquest cas també hauràs d'establir el certificat a la configuració; per a més informació, revisa l'apartat anterior sobre la configuració manual del servei utilitzat. A més, podràs exportar-lo per utilitzar-lo en altres servidors que allotgin subdominis del mateix domini (no es renovarà automàticament).