One place for hosting & domains

      Encrypt

      How To Acquire a Let’s Encrypt Certificate Using DNS Validation with acme-dns-certbot on Ubuntu 18.04


      The author selected the COVID-19 Relief Fund to receive a donation as part of the Write for DOnations program.

      Introduction

      The majority of Let’s Encrypt certificates are issued using HTTP validation, which allows for the easy installation of certificates on a single server. However, HTTP validation is not always suitable for issuing certificates for use on load-balanced websites, nor can it be used to issue wildcard certificates.

      DNS validation allows for certificate issuance requests to be verified using DNS records, rather than by serving content over HTTP. This means that certificates can be issued simultaneously for a cluster of web servers running behind a load balancer, or for a system that isn’t directly accessible over the internet. Wildcard certificates are also supported using DNS validation.

      The acme-dns-certbot tool is used to connect Certbot to a third-party DNS server where the certificate validation records can be set automatically via an API when you request a certificate. The advantage of this is that you don’t need to integrate Certbot directly with your DNS provider account, nor do you need to grant it unrestricted access to your full DNS configuration, which is beneficial to security.

      Delegated DNS zones are used in order to redirect lookups for the certificate verification records to the third-party DNS service, so once the initial setup has been completed, you can request as many certificates as you want without having to perform any manual validation.

      Another key benefit of acme-dns-certbot is that it can be used to issue certificates for individual servers that may be running behind a load balancer, or are otherwise not directly accessible over HTTP. Traditional HTTP certificate validation cannot be used in these cases, unless you set the validation files on each and every server. The acme-dns-certbot tool is also useful if you want to issue a certificate for a server that isn’t accessible over the internet, such as an internal system or staging environment.

      In this tutorial, you will use the acme-dns-certbot hook for Certbot to issue a Let’s Encrypt certificate using DNS validation.

      Prerequisites

      To complete this tutorial, you will need:

      • An Ubuntu 18.04 server set up by following the Initial Server Setup with Ubuntu 18.04, including a sudo non-root user.

      • A domain name for which you can acquire a TLS certificate, including the ability to add DNS records. In this particular example, we will use your-domain and subdomain.your-domain, as well as *.your-domain for a wildcard certificate. However this can be adjusted for other domain, subdomains, or wildcards if required.

      Once you have these ready, log in to your server as your non-root user to begin.

      Step 1 — Installing Certbot

      In this step, you will install Certbot, which is a program used to issue and manage Let’s Encrypt certificates.

      Certbot is available within the official Ubuntu Apt repositories, however, it is instead recommended to use the repository maintained by the Certbot developers, as this always has the most up-to-date version of the software.

      Begin by adding the Certbot repository:

      • sudo apt-add-repository ppa:certbot/certbot

      You’ll need to press ENTER to accept the prompt and add the new repository to your system.

      Next, install the Certbot package:

      Once the installation has completed, you can check that Certbot has been successfully installed:

      This will output something similar to the following:

      Output

      certbot 0.31.0

      In this step you installed Certbot. Next, you will download and install the acme-dns-certbot hook.

      Step 2 — Installing acme-dns-certbot

      Now that the base Certbot program has been installed, you can download and install acme-dns-certbot, which will allow Certbot to operate in DNS validation mode.

      Begin by downloading a copy of the script:

      • wget https://github.com/joohoi/acme-dns-certbot-joohoi/raw/master/acme-dns-auth.py

      Once the download has completed, mark the script as executable:

      • chmod +x acme-dns-auth.py

      Then, edit the file using your favorite text editor and adjust the first line in order to force it to use Python 3:

      Add a 3 to the end of the first line:

      acme-dns-certbot.py

      #!/usr/bin/env python3
      . . .
      

      This is required in order to ensure that the script uses the latest supported version of Python 3, rather than the legacy Python version 2.

      Once complete, save and close the file.

      Finally, move the script into the Certbot Let’s Encrypt directory so that Certbot can load it:

      • sudo mv acme-dns-auth.py /etc/letsencrypt/

      In this step, you downloaded and installed the acme-dns-certbot hook. Next, you can begin the setup process and work toward issuing your first certificate.

      Step 3 — Setting Up acme-dns-certbot

      In order to begin using acme-dns-certbot, you’ll need to complete an initial setup process and issue at least one certificate.

      Start by running Certbot to force it to issue a certificate using DNS validation. This will run the acme-dns-certbot script and trigger the initial setup process:

      • sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d *.your-domain -d your-domain

      You use the --manual argument to disable all of the automated integration features of Certbot. In this case you’re just issuing a raw certificate, rather than automatically installing it on a service as well.

      You configure Certbot to use the acme-dns-certbot hook via the --manual-auth-hook argument. You run the --preferred-challenges argument so that Certbot will give preference to DNS validation.

      You must also tell Certbot to pause before attempting to validate the certificate, which you do with the --debug-challenges argument. This is to allow you to set the DNS CNAME record(s) required by acme-dns-certbot, which is covered later in this step. Without the --debug-challenges argument, Certbot wouldn’t pause, so you wouldn’t have time to make the required DNS change.

      Remember to substitute each of the domain names that you wish to use using -d arguments. If you want to issue a wildcard certificate, make sure to escape the asterisk (*) with a backslash ().

      After following the standard Certbot steps, you’ll eventually be prompted with a message similar to the following:

      Output

      ... Output from acme-dns-auth.py: Please add the following CNAME record to your main DNS zone: _acme-challenge.your-domain CNAME a15ce5b2-f170-4c91-97bf-09a5764a88f6.auth.acme-dns.io. Waiting for verification... ...

      You’ll need to add the required DNS CNAME record to the DNS configuration for your domain. This will delegate control of the _acme-challenge subdomain to the ACME DNS service, which will allow acme-dns-certbot to set the required DNS records to validate the certificate request.

      If you’re using DigitalOcean as your DNS provider, you can set the DNS record within your control panel:

      A screenshot of the DigitalOcean DNS control panel, showing an example of a CNAME record for ACME DNS

      It is recommended to set the TTL (time-to-live) to around 300 seconds in order to help ensure that any changes to the record are propagated quickly.

      Once you have configured the DNS record, return to Certbot and press ENTER to validate the certificate request and complete the issuance process.

      This will take a few seconds, and you’ll then see a message confirming that the certificate has been issued:

      Output

      ... Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your-domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your-domain/privkey.pem ...

      You’ve run acme-dns-certbot for the first time, set up the required DNS records, and successfully issued a certificate. Next you’ll set up automatic renewals of your certificate.

      Step 4 — Using acme-dns-certbot

      In this final step, you will use acme-dns-certbot to issue more certificates and renew existing ones.

      Firstly, now that you’ve successfully issued at least one certificate using acme-dns-certbot, you can continue to issue certificates for the same DNS names without having to add another DNS CNAME record. However, if you wish to acquire a certificate for a different subdomain or entirely new domain name, you will be prompted to add another CNAME record.

      For example, you could issue another standalone wildcard certificate without having to perform the verification again:

      • sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d *.your-domain

      However, if you were to attempt to issue a certificate for a subdomain, you would be prompted to add a CNAME record for the subdomain:

      • sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d subdomain.your-domain

      This will show an output similar to the initial setup that you carried out in Step 3:

      Output

      ... Please add the following CNAME record to your main DNS zone: _acme-challenge.subdomain.your-domain CNAME 8450fb54-8e01-4bfe-961a-424befd05088.auth.acme-dns.io. Waiting for verification... ...

      Now that you’re able to use acme-dns-certbot to issue certificates, it’s worth considering the renewal process as well.

      Once your certificates are nearing expiry, Certbot can automatically renew them for you:

      The renewal process can run start-to-finish without user interaction, and will remember all of the configuration options that you specified during the initial setup.

      To test that this is working without having to wait until nearer the expiry date, you can trigger a dry run. This will simulate the renewal process without making any actual changes to your configuration.

      You can trigger a dry run using the standard renew command, but with the --dry-run argument:

      • sudo certbot renew --dry-run

      This will output something similar to the following, which will provide assurance that the renewal process is functioning correctly:

      Output

      ... Cert not due for renewal, but simulating renewal for dry run Plugins selected: Authenticator manual, Installer None Renewing an existing certificate Performing the following challenges: dns-01 challenge for your-domain dns-01 challenge for your-domain Waiting for verification... Cleaning up challenges ...

      In this final step, you issued another certificate and then tested the automatic renewal process within Certbot.

      Conclusion

      In this article you set up Certbot with acme-dns-certbot in order to issue certificates using DNS validation. This unlocks the possibility of using wildcard certificates as well as managing a large estate of distinct web servers that may be sitting behind a load balancer.

      Make sure to keep an eye on the acme-dns-certbot repository for any updates to the script, as it’s always recommended to run the latest supported version.

      If you’re interested in learning more about acme-dns-certbot, you may wish to review the documentation for the acme-dns project, which is the server-side element of acme-dns-certbot:

      The acme-dns software can also be self-hosted, which may be beneficial if you’re operating in high-security or complex environments.

      Alternatively, you could dig into the technical details of ACME DNS validation by reviewing the relevant section of the official RFC document which outlines how the process works:



      Source link

      So sichern Sie Apache mit Let’s Encrypt unter Ubuntu 20.04


      Einführung

      Let’s Encrypt ist eine Zertifizierungsstelle (Certificate Authority, CA), die das Abrufen und Installieren von kostenlosen TLS-/SSL-Zertifikaten erleichtert und so verschlüsseltes HTTPS auf Webservern ermöglicht. Es vereinfacht den Prozess, indem ein Software-Client, Certbot, bereitgestellt wird, der versucht, die meisten (wenn nicht alle) der erforderlichen Schritte zu automatisieren. Derzeit ist der gesamte Prozess zum Abrufen und Installieren eines Zertifikats sowohl auf Apache als auch auf Nginx vollständig automatisiert.

      In diesem Leitfaden verwenden wir Certbot, um ein kostenloses SSL-Zertifikat für Apache unter Ubuntu 20.04 zu erhalten, und stellen sicher, dass dieses Zertifikat so eingerichtet ist, dass es automatisch erneuert wird.

      In diesem Tutorial wird anstelle der Standardkonfigurationsdatei von Apache eine separate virtuelle Hostdatei zum Einrichten der Website verwendet, die von Let’s Encrypt gesichert wird. Wir empfehlen, neue virtuelle Apache-Hostdateien für jede auf einem Server gehostete Domäne zu erstellen, da dies dazu beiträgt, häufige Fehler zu vermeiden und die Standardkonfigurationsdateien als Fallback-Setup beizubehalten.

      Voraussetzungen

      Um dieser Anleitung zu folgen, benötigen Sie:

      • Einen Ubuntu 20.04-Server, der gemäß dem Tutorial Ersteinrichtung des Servers für Ubuntu 20.04 eingerichtet wurde, einschließlich eines sudo non-root users und einer Firewall.

      • Einen vollständig registrierten Domänennamen. In diesem Tutorial wird your_domain durchgehend als Beispiel verwendet. Sie können einen Domänennamen unter Namecheap günstig erwerben oder einen kostenlosen von Freenom herunterladen,. oder einfach die Domänenregistrierngsstelle Ihrer Wahl verwenden.

      • Die beiden folgenden DNS-Einträge wurden für Ihren Server eingerichtet. Sie finden in dieser Einführung in DigitalOcean DNS Details dazu, wie Sie sie hinzufügen können.

        • Einen A-Datensatz mit your-domain, der auf die öffentliche IP-Adresse Ihres Servers verweist.
        • Einen A-Datensatz mit your-domain, der auf die öffentliche IP-Adresse Ihres Servers verweist.
      • Apache gemäß Installieren von Apache unter Ubuntu 20.04 installiert. Stellen Sie sicher, dass Sie eine virtuelle Hostdatei für Ihre Domäne haben. In diesem Tutorial wird /etc/apache2/sites-available/your_domain.conf als Beispiel verwendet.

      Schritt 1 — Installieren von Certbot

      Um ein SSL-Zertifikat mit Let’s Encrypt zu erhalten, müssen wir zuerst die Certbot-Software auf Ihrem Server installieren. Wir werden dafür die Standard-Ubuntu-Paket-Repositorys verwenden.

      Wir benötigen zwei Pakete: certbot und python3-certbot-apache. Letzteres ist ein Plugin, das Certbot in Apache integriert und ermöglicht, das Abrufen eines Zertifikats und das Konfigurieren von HTTPS auf Ihrem Webserver mit einem einzigen Befehl zu automatisieren.

      • sudo apt install certbot python3-certbot-apache

      Außerdem werden Sie zur Bestätigung der Installation aufgefordert, indem Sie Y und dann ENTER drücken.

      Certbot ist jetzt auf Ihrem Server installiert. Im nächsten Schritt verifizieren wir die Konfiguration von Apache, um sicherzustellen, dass Ihr virtueller Host angemessen festgelegt ist. Dadurch wird sichergestellt, dass das Certbot-Client-Skript Ihre Domänen erkennen und Ihren Webserver so konfigurieren kann, dass Ihr neu generiertes SSL-Zertifikat automatisch verwendet wird.

      Schritt 2 — Überprüfen Ihrer Apache Virtual Host-Konfiguration

      Um SSL für Ihren Webserver automatisch abrufen und konfigurieren zu können, muss Certbot den richtigen virtuellen Host in Ihren Apache-Konfigurationsdateien finden. Ihre Serverdomänennamen werden aus den Anweisungen ServerName und ServerAlias abgerufen, die in Ihrem VirtualHost-Konfigurationsblock definiert sind.

      Wenn Sie den Schritt zum Einrichten des virtuellen Hosts im Tutorial zur Apache-Installation ausgeführt haben, sollten Sie einen VirtualHost-Block für Ihre Domäne unter /etc/apache2/sites-available/your_domain.conf mit dem ServerName und auch den ServerAlias-Anweisungen, die bereits entsprechend festgelegt wurden, einrichten.

      Um dies zu überprüfen, öffnen Sie die virtuelle Hostdatei für Ihre Domäne mit nano oder Ihrem bevorzugten Texteditor:

      • sudo nano /etc/apache2/sites-available/your_domain.conf

      Suchen Sie die bestehenden Zeilen ServerName und ServerAlias. Sie sollten wie folgt aussehen:

      /etc/apache2/sites-available/your_domain.conf

      ...
      ServerName your_domain
      ServerAlias www.your_domain
      ...
      

      Wenn Sie Ihren ServerName und Ihre ServerAlias bereits so eingerichtet haben, können Sie Ihren Texteditor beenden und mit dem nächsten Schritt fortfahren. Wenn Sie nano verwenden, können Sie zum Beenden STRG+X drücken, dann Y und ENTER, um zu bestätigen.

      Wenn Ihre aktuelle virtuelle Hostkonfiguration nicht dem Beispiel entspricht, aktualisieren Sie sie entsprechend. Wenn Sie fertig sind, speichern Sie die Datei und beenden Sie den Editor. Führen Sie dann den folgenden Befehl aus, um Ihre Änderungen zu validieren:

      • sudo apache2ctl configtest

      Sie sollten eine Syntax OK als Antwort erhalten. Wenn Sie einen Fehler erhalten, öffnen Sie die virtuelle Hostdatei und überprüfen Sie sie auf Schreibfehler oder fehlende Zeichen. Sobald die Syntax Ihrer Konfigurationsdatei korrekt ist, laden Sie Apache neu, sodass die Änderungen wirksam werden:

      • sudo systemctl reload apache2

      Mit diesen Änderungen kann Certbot den richtigen VirtualHost-Block finden und ihn aktualisieren.

      Als Nächstes aktualisieren wir die Firewall, um den HTTPS-Datenverkehr zu ermöglichen.

      Schritt 3 — Zulassen von HTTPS durch die Firewall

      Wenn Sie die UFW-Firewall aktiviert haben, wie in den erforderlichen Anleitungen empfohlen, müssen Sie die Einstellungen anpassen, um den HTTPS-Datenverkehr zuzulassen. Bei der Installation registriert Apache einige verschiedene UFW-Anwendungsprofile. Wir können das Profil Apache Full nutzen, um sowohl HTTP- als auch HTTPS-Datenverkehr auf Ihrem Server zuzulassen.

      Um zu verifizieren, welche Art von Datenverkehr derzeit auf Ihrem Server erlaubt ist, können Sie Folgendes verwenden:

      Wenn Sie einem unserer Apache-Installationsleitfäden gefolgt sind, sollte Ihre Ausgabe ungefähr so aussehen, was bedeutet, dass derzeit nur HTTP-Datenverkehr auf Port 80 zulässig ist:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6)

      Um zusätzlich den HTTPS-Datenverkehr einzulassen, lassen Sie das Profil „Apache Full“ zu und löschen Sie das redundante Profil „Apache“:

      • sudo ufw allow 'Apache Full'
      • sudo ufw delete allow 'Apache'

      Ihr Status sieht nun wie folgt aus:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache Full (v6) ALLOW Anywhere (v6)

      Sie können nun Certbot ausführen und Ihre Zertifikate abrufen.

      Schritt 4 — Abrufen eines SSL-Zertifikats

      Certbot bietet eine Vielzahl von Möglichkeiten, um SSL-Zertifikate über Plugins zu erhalten. Das Apache-Plugin kümmert sich um die Neukonfiguration von Apache und das Neuladen der Konfiguration bei Bedarf. Geben Sie Folgendes ein, um dieses Plugin zu verwenden:

      In diesem Skript müssen Sie eine Reihe von Fragen beantworten, um Ihr SSL-Zertifikat zu konfigurieren. Zunächst werden Sie nach einer gültigen E-Mail-Adresse gefragt. Diese E-Mail wird für Erneuerungsbenachrichtigungen und Sicherheitshinweise verwendet:

      Output

      Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator apache, Installer apache Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): you@your_domain

      Nach dem Bereitstellen einer gültigen E-Mail-Adresse drücken Sie ENTER, um mit dem nächsten Schritt fortzufahren. Sie werden dann aufgefordert, zu bestätigen, ob Sie den Nutzungsbedingungen von Let’s Encrypt zustimmen. Sie können dies bestätigen, indem Sie A drücken und dann ENTER:

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Please read the Terms of Service at
      https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
      agree in order to register with the ACME server at
      https://acme-v02.api.letsencrypt.org/directory
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      (A)gree/(C)ancel: A
      

      Als Nächstes werden Sie gefragt, ob Sie Ihre E-Mail mit der Electronic Frontier Foundation teilen möchten, um Nachrichten und andere Informationen zu erhalten. Wenn Sie ihren Inhalt nicht abonnieren möchten, geben Sie N ein. Andernfalls geben Sie Y ein. Drücken Sie anschließend ENTER, um mit dem nächsten Schritt fortzufahren.

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Would you be willing to share your email address with the Electronic Frontier
      Foundation, a founding partner of the Let's Encrypt project and the non-profit
      organization that develops Certbot? We'd like to send you email about our work
      encrypting the web, EFF news, campaigns, and ways to support digital freedom.
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      (Y)es/(N)o: N
      

      Im nächsten Schritt werden Sie aufgefordert, Certbot darüber zu informieren, für welche Domänen Sie HTTPS aktivieren möchten. Die aufgelisteten Domänennamen werden automatisch aus Ihrer Konfiguration des virtuellen Apache-Hosts abgerufen. Aus diesem Grund müssen Sie sicherstellen, dass auf Ihrem virtuellen Host die richtigen Einstellungen für ServerName und ServerAlias konfiguriert sind. Wenn Sie HTTPS für alle aufgelisteten Domänennamen aktivieren möchten (empfohlen), können Sie die Eingabeaufforderung leer lassen und ENTER drücken, um fortzufahren. Wählen Sie andernfalls die Domänen aus, für die Sie HTTPS aktivieren möchten, indem Sie die entsprechende Nummer durch Kommas und/oder Leerzeichen getrennt auflisten und dann ENTER drücken.

      Which names would you like to activate HTTPS for?
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      1: your_domain
      2: www.your_domain
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Select the appropriate numbers separated by commas and/or spaces, or leave input
      blank to select all options shown (Enter 'c' to cancel):
      

      Die Ausgabe sieht dann so aus:

      Obtaining a new certificate
      Performing the following challenges:
      http-01 challenge for your_domain
      http-01 challenge for www.your_domain
      Enabled Apache rewrite module
      Waiting for verification...
      Cleaning up challenges
      Created an SSL vhost at /etc/apache2/sites-available/your_domain-le-ssl.conf
      Enabled Apache socache_shmcb module
      Enabled Apache ssl module
      Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf
      Enabling available site: /etc/apache2/sites-available/your_domain-le-ssl.conf
      Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf
      

      Als Nächstes werden Sie aufgefordert, auszuwählen, ob der HTTP-Datenverkehr an HTTPS umgeleitet werden soll. In der Praxis bedeutet dies, dass jemand, der Ihre Website über unverschlüsselte Kanäle (HTTP) besucht, automatisch an die HTTPS-Adresse Ihrer Website umgeleitet wird. Wählen Sie 2, um die Umleitung zu aktivieren, oder 1, wenn Sie sowohl HTTP als auch HTTPS als separate Methoden für den Zugriff auf Ihre Website beibehalten möchten.

      Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      1: No redirect - Make no further changes to the webserver configuration.
      2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
      new sites, or if you're confident your site works on HTTPS. You can undo this
      change by editing your web server's configuration.
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
      
      

      Nach diesem Schritt ist die Konfiguration von Certbot abgeschlossen, und Sie erhalten die letzten Anmerkungen zu Ihrem neuen Zertifikat, wo sich die generierten Dateien befinden und wie Sie Ihre Konfiguration mit einem externen Tool testen können, das die Authentizität Ihres Zertifikats analysiert:

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Congratulations! You have successfully enabled https://your_domain and
      https://www.your_domain
      
      You should test your configuration at:
      https://www.ssllabs.com/ssltest/analyze.html?d=your_domain
      https://www.ssllabs.com/ssltest/analyze.html?d=www.your_domain
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      
      IMPORTANT NOTES:
       - Congratulations! Your certificate and chain have been saved at:
         /etc/letsencrypt/live/your_domain/fullchain.pem
         Your key file has been saved at:
         /etc/letsencrypt/live/your_domain/privkey.pem
         Your cert will expire on 2020-07-27. To obtain a new or tweaked
         version of this certificate in the future, simply run certbot again
         with the "certonly" option. To non-interactively renew *all* of
         your certificates, run "certbot renew"
       - Your account credentials have been saved in your Certbot
         configuration directory at /etc/letsencrypt. You should make a
         secure backup of this folder now. This configuration directory will
         also contain certificates and private keys obtained by Certbot so
         making regular backups of this folder is ideal.
       - 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
      
      

      Ihr Zertifikat ist nun installiert und in die Konfiguration von Apache geladen. Versuchen Sie, Ihre Website mit https:// neu zu laden und beachten Sie den Sicherheitsindikator Ihres Browsers. Er sollte darauf hinweisen, dass Ihre Website ordnungsgemäß gesichert ist, normalerweise durch Einfügen eines Schlosssymbols in die Adressleiste.

      Mit dem SSL Labs Server-Test können Sie die Note Ihres Zertifikats überprüfen und detaillierte Informationen dazu aus der Sicht eines externen Dienstes abrufen.

      Im nächsten und letzten Schritt testen wir die automatische Erneuerungsfunktion von Certbot, die garantiert, dass Ihr Zertifikat vor dem Ablaufdatum automatisch erneuert wird.

      Schritt 5 – Überprüfen der automatischen Erneuerung von Certbot

      Zertifikate von Let’s Encrypt sind nur neunzig Tage gültig. Dies soll Benutzer dazu ermutigen, ihren Prozess zur Erneuerung von Zertifikaten zu automatisieren und sicherzustellen, dass missbrauchte Zertifikate oder gestohlene Schlüssel eher früher als später ablaufen.

      Das von uns installierte certbot-Paket kümmert sich um Erneuerungen, indem es ein Erneuerungsskript in /etc/cron.d einfügt, das von einem systemctl-Dienst namens certbot.timer verwaltet wird. Dieses Skript wird zweimal pro Tag ausgeführt und erneuert automatisch alle Zertifikate, die innerhalb von dreißig Tagen ablaufen.

      Um den Status dieses Dienstes zu überprüfen und sicherzustellen, dass er aktiv ist und ausgeführt wird, können Sie Folgendes verwenden:

      • sudo systemctl status certbot.timer

      Sie sehen eine Ausgabe, die dieser ähnelt:

      Output

      ● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled) Active: active (waiting) since Tue 2020-04-28 17:57:48 UTC; 17h ago Trigger: Wed 2020-04-29 23:50:31 UTC; 12h left Triggers: ● certbot.service Apr 28 17:57:48 fine-turtle systemd[1]: Started Run certbot twice daily.

      Um den Erneuerungsprozess zu testen, können Sie mit certbot einen Probelauf durchführen:

      • sudo certbot renew --dry-run

      Wenn Sie keine Fehler sehen, sind Sie fertig. Bei Bedarf erneuert Certbot Ihre Zertifikate und lädt Apache neu, um die Änderungen zu übernehmen. Wenn der automatische Erneuerungsprozess jemals fehlschlägt, sendet Let’s Encrypt eine Nachricht an die von Ihnen angegebene E-Mail und warnt Sie, wenn Ihr Zertifikat bald abläuft.

      Zusammenfassung

      In diesem Lernprogramm haben Sie den Let’s Encrypt-Client Certbot installiert, ein SSL-Zertifikat für Ihre Domäne konfiguriert und installiert und bestätigt, dass der automatische Erneuerungsdienst von Certbot in systemctl aktiv ist. Wenn Sie weitere Fragen zur Verwendung von Certbot haben, ist die Dokumentation ein guter Ausgangspunkt.



      Source link

      Cómo proteger Apache con Let’s Encrypt en Ubuntu 20.04


      Introducción

      Let’s Encrypt es una entidad de certificación (CA) que facilita la obtención y la instalación de certificados TLS/SSL gratuitos y, de ese modo, habilita HTTPS cifrado en servidores web. Simplifica el proceso al proporcionar un cliente de software, Certbot, que intenta automatizar la mayoría (cuando no todos) de los pasos requeridos. Actualmente, todo el proceso de obtención e instalación de un certificado está totalmente automatizado en Apache y Nginx.

      En esta guía, utilizaremos Certbot para obtener un certificado SSL gratuito para Apache en Ubuntu 20.04 y nos asegurarnos de que esté configurado para renovarse de forma automática.

      En este tutorial, se utiliza un archivo de host virtual separado en lugar del archivo de configuración predeterminado de Apache para configurar el sitio web que se protegerá con Let’s Encrypt. Recomendamos crear nuevos archivos de host virtual de Apache para cada dominio que se aloje en un servidor, ya que permite evitar errores comunes y mantiene los archivos de configuración predeterminados como configuración de reserva.

      Requisitos previos

      Para este tutorial, necesitará lo siguiente:

      • Un servidor de Ubuntu 20.04 configurado conforme a este tutorial de configuración inicial de servidores para Ubuntu 20.04, así como un non-root user y un firewall.

      • Un nombre de dominio registrado por completo. En este tutorial, se utilizará your_domain como ejemplo. Puede adquirir un nombre de dominio en Namecheap, obtener uno gratuito en Freenom o utilizar un registrador de dominios de su elección.

      • Los dos registros DNS que se indican a continuación se han configurado para su servidor. Puede utilizar esta introducción al DNS de DigitalOcean para obtener más información sobre cómo agregarlos.

        • Un registro A con your_domain orientado a la dirección IP pública de su servidor.
        • Un registro A con www.your_domain orientado a la dirección IP pública de su servidor.
      • Apache instalado conforme a Cómo instalar Apache en Ubuntu 20.04. Compruebe que tenga un archivo de host virtual para su dominio. En este tutorial, se utilizará /etc/apache2/sites-available/your_domain.conf como ejemplo.

      Paso 1: Instalar Certbot

      Para obtener un certificado SSL con Let’s Encrypt, primero, debemos instalar el software Certbot en su servidor. Para hacerlo, utilizaremos los repositorios de paquetes predeterminados de Ubuntu.

      Necesitamos dos paquetes: certbot y python3-certbot-apache. Este último es un complemento que integra Certbot con Apache, lo que permite automatizar la obtención de certificados y configurar HTTPS dentro de su servidor web con un solo comando.

      • sudo apt install certbot python3-certbot-apache

      También se le solicitará que confirme la instalación de Apache pulsando Y y ENTER.

      Ahora, tiene Certbot instalado en su servidor. En el siguiente paso, verificaremos la configuración de Apache para asegurarnos de que su host virtual esté configurado de forma adecuada. Esto garantizará que la secuencia de comandos del cliente certbot pueda detectar sus dominios y vuelva a configurar su servidor web para que utilice su certificado SSL recién creado de forma automática.

      Paso 2: Comprobar la configuración del host virtual de Apache

      Para poder obtener y configurar un certificado SSL de forma automática para su servidor web, Certbot debe poder encontrar el host virtual adecuado entre los archivos de configuración de Apache. Los nombres de dominio de su servidor se obtendrán de las directivas ServerName y ServerAlias definidas en su bloque de configuración de VirtualHost.

      Si siguió el paso de configuración del host virtual en el tutorial de instalación de Apache, debe tener un bloque VirtualHost establecido para su dominio en /etc/apache2/sites-available/your_domain.conf con las directivas ServerName y ServerAlias ya configuradas de forma adecuada.

      Para comprobarlo, abra el archivo de host virtual de su dominio con nano o su editor de texto preferido:

      • sudo nano /etc/apache2/sites-available/your_domain.conf

      Busque las líneas de ServerName y ServerAlias existentes. Deberían tener el siguiente aspecto:

      /etc/apache2/sites-available/your_domain.conf

      ...
      ServerName your_domain
      ServerAlias www.your_domain
      ...
      

      Si ya tiene su ServerName y ServerAlias configuradas de esta manera, puede salir del editor de texto y continuar con el siguiente paso. Si utiliza nano, puede salir escribiendo CTRL+X y, luego, Y y ENTER para confirmar.

      Si la configuración del host virtual no coincide con la del ejemplo, actualícela correspondientemente. Cuando termine, guarde el archivo y salga del editor. Luego, ejecute el siguiente comando para validar sus cambios:

      • sudo apache2ctl configtest

      Debería obtener Syntax OK como respuesta. Si encuentra un mensaje de error, vuelva a abrir el archivo de host virtual y verifique que no haya errores ortográficos y que no falten caracteres. Cuando la sintaxis del archivo de configuración sea correcta, vuelva a cargar Apache para que los cambios surtan efecto:

      • sudo systemctl reload apache2

      Con estos cambios, Certbot podrá encontrar el bloque VirtualHost correcto y actualizarlo.

      A continuación, actualizaremos el firewall para permitir el tráfico de HTTPS.

      Paso 3: Habilitar HTTPS a través del firewall

      Si tiene habilitado el firewall de UFW, como se recomienda en las guías de los requisitos previos, deberá ajustar la configuración para permitir el tráfico de HTTPS. Cuando se instala, Apache registra algunos perfiles de aplicación UFW diferentes. Podemos aprovechar el perfil Apache Full para permitir tanto tráfico de HTTP como de HTTPS en su servidor.

      Para verificar el tipo de tráfico que se permite actualmente en su servidor, puede utilizar lo siguiente:

      Si siguió una de nuestras guías de instalación de Apache, su resultado debe tener un aspecto similar al siguiente, lo que significa que actualmente solo se permite tráfico de HTTP en el puerto 80:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6)

      Para permitir el perfil “Apache Full”, además de tráfico de HTTPS, y eliminar el perfil “Apache” redundante, haga lo siguiente:

      • sudo ufw allow 'Apache Full'
      • sudo ufw delete allow 'Apache'

      Su estado debe tener el siguiente aspecto:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache Full (v6) ALLOW Anywhere (v6)

      Ahora, está listo para ejecutar Certbot y obtener sus certificados.

      Paso 4: Obtener un certificado SSL

      Certbot ofrece varias alternativas para obtener certificados SSL a través de complementos. El complemento de Apache se encargará de reconfigurar Apache y volver a cargar la configuración siempre que sea necesario. Para utilizar este complemento, escriba lo siguiente:

      Esta secuencia de comandos le solicitará que responda a una serie de preguntas para configurar su certificado SSL. Primero, le solicitará una dirección de correo electrónico válida. Esta dirección se utilizará para las notificaciones de renovación y los avisos de seguridad:

      Output

      Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator apache, Installer apache Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): you@your_domain

      Después de proporcionar una dirección de correo electrónico válida, presione ENTER para continuar con el siguiente paso. Luego, se le solicitará que confirme si acepta las condiciones de servicio de Let’s Encrypt. Puede confirmar pulsando A y, luego, ENTER:

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Please read the Terms of Service at
      https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
      agree in order to register with the ACME server at
      https://acme-v02.api.letsencrypt.org/directory
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      (A)gree/(C)ancel: A
      

      A continuación, se le solicitará que confirme si desea compartir su dirección de correo electrónico con Electronic Frontier Foundation para recibir noticias y otra información. Si no desea suscribirse a su contenido, escriba N. De lo contrario, escriba Y. Luego, presione ENTER para continuar con el siguiente paso.

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Would you be willing to share your email address with the Electronic Frontier
      Foundation, a founding partner of the Let's Encrypt project and the non-profit
      organization that develops Certbot? We'd like to send you email about our work
      encrypting the web, EFF news, campaigns, and ways to support digital freedom.
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      (Y)es/(N)o: N
      

      En el siguiente paso, se le solicitará que informe a Certbot los dominios para los que desea activar HTTPS. Los nombres de dominio enumerados se obtienen de forma automática de la configuración del host virtual de Apache, por lo tanto, es importante que se asegure de que los ajustes de ServerName y ServerAlias estén configurados correctamente en su host virtual. Si desea habilitar HTTPS para todos los nombres de dominio enumerados (recomendado), puede dejar la solicitud en blanco y presionar ENTER para continuar. De lo contrario, seleccione los dominios para los que desea habilitar HTTPS enumerando cada número correspondiente, separado por comas o espacios, y, luego, presionando ENTER.

      Which names would you like to activate HTTPS for?
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      1: your_domain
      2: www.your_domain
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Select the appropriate numbers separated by commas and/or spaces, or leave input
      blank to select all options shown (Enter 'c' to cancel):
      

      Verá un resultado como este:

      Obtaining a new certificate
      Performing the following challenges:
      http-01 challenge for your_domain
      http-01 challenge for www.your_domain
      Enabled Apache rewrite module
      Waiting for verification...
      Cleaning up challenges
      Created an SSL vhost at /etc/apache2/sites-available/your_domain-le-ssl.conf
      Enabled Apache socache_shmcb module
      Enabled Apache ssl module
      Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf
      Enabling available site: /etc/apache2/sites-available/your_domain-le-ssl.conf
      Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf
      

      A continuación, se le solicitará que seleccione si desea que el tráfico de HTTP se redirija a HTTPS o no. En la práctica, esto significa que cuando alguien visite su sitio web a través de canales no cifrados (HTTP), se lo redirigirá automáticamente a la dirección HTTPS de su sitio web. Seleccione 2 para habilitar el redireccionamiento o 1 si desea mantener HTTP y HTTPS como métodos de acceso al sitio web separados.

      Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      1: No redirect - Make no further changes to the webserver configuration.
      2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
      new sites, or if you're confident your site works on HTTPS. You can undo this
      change by editing your web server's configuration.
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
      
      

      Con este paso, se completa la configuración de Certbot y se le presentarán los comentarios finales sobre su certificado nuevo e información sobre dónde localizar los archivos generados y cómo probar su configuración utilizando una herramienta externa que analiza la autenticidad del certificado:

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Congratulations! You have successfully enabled https://your_domain and
      https://www.your_domain
      
      You should test your configuration at:
      https://www.ssllabs.com/ssltest/analyze.html?d=your_domain
      https://www.ssllabs.com/ssltest/analyze.html?d=www.your_domain
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      
      IMPORTANT NOTES:
       - Congratulations! Your certificate and chain have been saved at:
         /etc/letsencrypt/live/your_domain/fullchain.pem
         Your key file has been saved at:
         /etc/letsencrypt/live/your_domain/privkey.pem
         Your cert will expire on 2020-07-27. To obtain a new or tweaked
         version of this certificate in the future, simply run certbot again
         with the "certonly" option. To non-interactively renew *all* of
         your certificates, run "certbot renew"
       - Your account credentials have been saved in your Certbot
         configuration directory at /etc/letsencrypt. You should make a
         secure backup of this folder now. This configuration directory will
         also contain certificates and private keys obtained by Certbot so
         making regular backups of this folder is ideal.
       - 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
      
      

      Ahora, su certificado está instalado y cargado en la configuración de Apache. Intente volver a cargar su sitio web utilizando https:// y observe el indicador de seguridad de su navegador. Debe indicar que su sitio está protegido debidamente, en general, con un icono de candado en la barra de direcciones.

      Puede utilizar la prueba de servidores de SSL Labs para verificar la categoría de su certificado y obtener información detallada sobre él, desde la perspectiva de un servicio externo.

      En el siguiente y final paso, probaremos la función de renovación automática de Certbot, que garantiza que su certificado se renueve automáticamente antes de la fecha de expiración.

      Paso 5: Verificar la renovación automática de Certbot

      Los certificados de Let’s Encrypt son válidos únicamente por noventa días. Este período de validez se utiliza para alentar a los usuarios a automatizar su proceso de renovación de certificados, así como para garantizar que los certificados mal utilizados o las claves robadas expiren lo antes posible.

      El paquete certbot que instalamos se encarga de las renovaciones al incluir una secuencia de comandos en /etc/cron.d, que gestiona un servicio systemctl denominado certbot.timer. Esta secuencia de comandos se ejecuta dos veces al día y renovará de forma automática cualquier certificado que caduque en treinta o menos días.

      Para verificar el estado de este servicio y asegurarse de que esté activo y en ejecución, puede utilizar lo siguiente:

      • sudo systemctl status certbot.timer

      Verá un resultado similar a este:

      Output

      ● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled) Active: active (waiting) since Tue 2020-04-28 17:57:48 UTC; 17h ago Trigger: Wed 2020-04-29 23:50:31 UTC; 12h left Triggers: ● certbot.service Apr 28 17:57:48 fine-turtle systemd[1]: Started Run certbot twice daily.

      Para probar el proceso de renovación, puede hacer un simulacro con certbot:

      • sudo certbot renew --dry-run

      Si no ve errores, no habrá inconvenientes. Cuando sea necesario, Certbot renovará sus certificados y volverá a cargar Apache para registrar los cambios. Si el proceso de renovación automática falla, Let’s Encrypt enviará un mensaje a la dirección de correo electrónico que especificó en el que se le advertirá cuándo se aproxime la fecha de vencimiento de sus certificados.

      Conclusión

      En este tutorial, instaló el cliente certbot de Let’s Encrypt, configuró e instaló un certificado SSL para su dominio y confirmó que el servicio de renovación automática de Certbot esté activo en systemctl. Si tiene preguntas adicionales sobre la utilización de Certbot, la documentación es un buen punto de partida.



      Source link