Skip to content

Let's Encrypt ...

Wie versprochen, kommt jetzt auch mal ein Artikel, wie man Let's Encrypt für die eigenen Domains nutzen kann. Aus "in ein paar Tagen" wurden leider drei Monate.

Der Grund für die Verzögerung ist neben der fehlenden Zeit, einen vernünftigen Artikel zu verfassen, die schiere Menge an Implementationen des zugrundeliegenden ACME-Protokolls. Den Original-Client möchte ich nicht benutzen, da er mir zu viele Änderungen am System (als root) vornimmt. acme-tiny schien eine Zeit lang das Mittel der Wahl zu sein.

Das Tool, was ich jetzt aber benutze, ist AcmeFetch von Tobias Oetiker, weil es wirklich einfach und damit für jeden nutzbar ist und weil ich den Macher kenne ;-) Es muss nicht als root-User laufen, kann aber.

Die Vorarbeiten sind ein kleines wenig aufwändiger, das eigentliche Erstellen lassen der Zertifikate und auch der Refresh alle 90 Tage ist aber sehr, sehr einfach.

Vorarbeiten:

Einen Userkey erzeugen, mit dem die künftigen Zertifikate bestellt werden.


# Einen Usernamen festlegen, der wird später gebraucht
$ export USER="Euer Lieblingsusername"

# Key erzeugen
$ openssl genrsa 4096 > ${USER}.key
Generating RSA private key, 4096 bit long modulus
...................................................................................++
..................................++
e is 65537 (0x10001)
 

AcmeFetch basiert auf Perl, daher sollte Perl installiert sein.


# CentOS
$ yum install perl-core openssl-devel gcc unzip

# Debian/Ubuntu
$ apt-get install perl libssl-dev gcc unzip make
 

AcmeFetch besorgen:

Danach das Repository klonen oder ein Release herunterladen, oops, das aktuelle Release heisst "Dirk".


$ git clone https://github.com/oetiker/AcmeFetch.git AcmeFetch.git
 

Jetzt geht es los:

Wenn AcmeFetch gebaut wird, werden alle benötigten Perl-Module im Zielverzeichnis/lib installiert. Das bestehende System wird nicht verändert. Tobi empfiehlt $HOME/opt/acmefetch, mir ist das "reale" /opt lieber.


$ ./configure --prefix=/opt/acmefetch

$ make

# sudo nur nötig, wenn das Ziel-Verzeichnis als User nicht schreibbar ist
$ sudo make install
 

Zertifikat konfigurieren:

Im Verzeichnis /opt/acmefetch/etc liegt eine Musterkonfigurationsdatei acmefetch.cfg.dist, die als Muster benutzt werden kann. Ich habe die etwas abgewandelt, so dass es für mich passt.

Für meine Version muss das Verzeichnis /etc/letsencrypt schreibbar sein (da liegen alle "Let's Encrypt"-Zertifikate auf meinem Server). ddeimeke.key müsst Ihr mit Eurem Schlüssel ersetzen.


{

    "GENERAL": {

        "ACMEstaging": "acme-staging.api.letsencrypt.org",

        "ACMEservice": "acme-v01.api.letsencrypt.org",

        "accountKeyPath": "/etc/letsencrypt/ddeimeke.key"

    },

    "CERTS": [

        {

            "certOutput": "/etc/letsencrypt/deimeke.net.crt",

            "certFormat": "PEM",

            "keyOutput": "/etc/letsencrypt/deimeke.net.key",

            "keyFormat": "PEM",

            "chainOutput": "/etc/letsencrypt/chain.crt",

            "chainFormat": "PEM",

            "commonName": "deimeke.net",

            "SITES": {

                "deimeke.net": {

                    "challengeHandler": "LocalFile",

                    "challengeConfig": {

                        "www_root": "/srv/www/deimeke.net/",

                    }

                },

                "www.deimeke.net": {

                    "challengeHandler": "LocalFile",

                    "challengeConfig": {

                        "www_root": "/srv/www/deimeke.net/",

                    }

                }

            }

        }

    ]

}

 

Der Betriebssystem-User, der das Zertifikat erstellen lassen möchte, benötigt Schreibrechte im DocumentRoot-Verzeichnis der Domain (genauer im Unterverzeichnis .well-known/acme-challenge)

Achtung: Es ist sinnvoll, vor dem eigentlichen Erstellen der Zertifikate eventuell vorhandene .htaccess-Dateien umzubennen (beispielsweise die von ownCloud).

Zertifikat erstellen:


$ /opt/acmefetch/bin/acmefetch --cfg=/opt/acmefetch/etc/deimeke.net.cfg --verbose
* ## deimeke.net ##
* Cert /etc/letsencrypt/deimeke.net.crt is missing. Generating.

* talk to acme-v01.api.letsencrypt.org
* authorize deimeke.net via /srv/www/deimeke.net/
* authorize www.deimeke.net via /srv/www/deimeke.net/
/tmp/9QmdSJnbNt.cfgGenerating a 2048 bit RSA private key
.....................................+++
.....................................................................................................+++
writing new private key to '/etc/letsencrypt/deimeke.net.key.13854'
 

Wenn Ihr es direkt noch einmal ausführt, wird kein neues Zertifikat erstellt, nur, wenn --force gesetzt ist oder 30 Tage vor Ablauf des vorhandenen Zertifkats oder, wenn Ihr in der Konfiguration etwas verändert habt.

Webserver konfigurieren: (bei mir Apache)

Dafür habe ich mir dieses kleine Shellskript gebastelt.


#!/bin/bash
set -o errexit

if [[ -z "$2" ]]; then
    echo
    echo "ERROR: usage $0 domain ipaddress"
    echo
    exit 1
fi

DOMAIN=$1
IPADDRESS=$2

echo "<VirtualHost ${IPADDRESS}:443>
    ServerName ${DOMAIN}
    DocumentRoot /srv/www/${DOMAIN}

    ErrorLog /var/log/httpd/${DOMAIN}/error.log
    CustomLog /var/log/httpd/${DOMAIN}/access.log combined

    Header always set Strict-Transport-Security "
max-age=15768000"
    SSLEngine On
    SSLCipherSuite 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:CAMELLIA:!kRSA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK'
    SSLProtocol All -SSLv2 -SSLv3
    SSLHonorCipherOrder On
    SSLCompression off
    SSLCertificateFile /etc/letsencrypt/${DOMAIN}.crt
    SSLCertificateKeyFile /etc/letsencrypt/${DOMAIN}.key
    SSLCertificateChainFile /etc/letsencrypt/intermediate.crt

    <Directory \"/srv/www/${DOMAIN}\">
        allow from all
        Order allow,deny
        AllowOverride All
        Options -Indexes
        Require all granted
    </Directory>
</VirtualHost>"

 

Weitere Domains:

Weitere Konfigurationen lassen sich mit einem einfachen sed-Kommando erstellen.


$ sed 's/deimeke.net/yawnrz.com/g' /opt/acmefetch/etc/deimeke.net.cfg > /opt/acmefetch/etc/yawnrz.com.cfg

$ /opt/acmefetch/bin/acmefetch --cfg=/opt/acmefetch/etc/yawnrz.com.cfg --verbose
 

Trackbacks

Netz - Rettung - Recht am : SSL/TLS mit Let's Encrypt

Vorschau anzeigen
Bereits vergangene Woche berichtete ich von meinen Irrungen und Wirrungen des letzten Jahrzehnts mit SSL/TLS im Web. Erst Ende 2015 hatte ich mich aufgerafft, über StartCom für einige Domains Zertifikate erstellen zu lassen, und parallel die Berichterstat

Netz - Rettung - Recht am : Wellenreiten 04/2016

Vorschau anzeigen
Wer als “Websurfer” metaphorisch auf den Wellen des Netzes reitet, findet dabei zwar keine paradiesischen Inseln, manchmal aber immerhin ganz interessante Lektüre. Im April 2016 kann ich u.a. folgende Fundstücke empfehlen und der werten Leserschaft ans H

Dirks Logbuch am : Webspace-Inventar 2017 ...

Vorschau anzeigen
Dieser Artikel ist eine Antwort auf den Artikel von Thomas zum Thema. Auf meinem Server laufen die folgenden Webapplikationen, Reihenfolge ist alphabetisch und sagt nichts über die Wertigkeit aus. DokuWiki ist die Wikisoftware, die ich benutze, wenn ich

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Thomas am :

*AllowOverride All

Ist aber "mutig".

John am :

*Danke für die Hinweise. :-)

Können die Dateien im "acme-challenge" Verzeichnis nach erfolgreichem Erstellen des Zertifikates gelöscht werden, oder gibt's da Nebenwirkungen?

Wenn ich mich recht erinnere, machen andere ACME-Clients das so.

Dirk Deimeke am :

*Kannst Du meines Wissens nach problemlos löschen.

Vielleicht reichst Du dafür einen Feature-Request ein?

André Jaenisch am :

*Hallo, Dirk,

wie ich mich auf der Mate Mailingliste korrigieren lassen musste (http://permalink.gmane.org/gmane.comp.desktop.mate.devel/303 - http://ml.mate-desktop.org/pipermail/mate-dev/ antwortet mit 403-Forbidden oO) liegt Thomas mit seinem Kommentar (https://thomas-leister.de/internet/prosody-xmpp-server-auf-ubuntu-server-installieren/#comment-4572) nicht ganz richtig.

Wenn du also APT in v1.0+ verwendest, kannst du mit `apt install` installieren ;-) (Warum dauerte das bei Debian wieder so ewig?!?!).

Gruß,

André

Dirk Deimeke am :

*Yip, man kann auch mit "aptitude install" installieren. Es spielt meiner Ansicht nach keine Rolle. Nimm das Tool, das Dir am besten gefällt.

Udo am :

*Hi,

Danke für den Artikel.

Bei Debian fehlt bei den Vorarbeiten für apt-get install noch make

Sonst lief es...

Udo

Kommentar schreiben

Gravatar, Favatar, Pavatar, Identica, Twitter, MyBlogLog Autoren-Bilder werden unterstützt.
BBCode-Formatierung erlaubt
Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
:'(  :-)  :-|  :-O  :-(  8-)  :-D  :-P  ;-) 
Formular-Optionen