Wie kann ich ein Let's Encrypt Zertifikat mit abweichenden Port oder hinter Firewall erstellen?

Um ein Let's Encrypt Zertifikat für eine über uns registrierte Domain zu beantragen, welche nicht auf unseren Webservern liegt, und bei der eine Überprüfung über den Port 80 (http) ebenfalls nicht möglich ist, bieten wir die Option an, über die Dynamic DNS Schnittstelle das ACME Token zu übertragen.

Damit Sie diese Funktion nutzen können, müssen Sie als erstes Dynamic DNS für die entsprechende Domain aktivieren. Sie benötigen das Auth-Token später für das einspielen des ACME-Tokens über die Dynamic DNS Schnittstelle.

Als nächstes benötigen Sie einen ACME Client Ihrer Wahl, welcher eine Schnittstelle bereitstellt, die Tokens entsprechend in das System zu übernehmen. Wir haben die Funktion mit dehydrated getestet, welche für diese Funktion die sog. Hooks bereitstellt. Exemplarisch nutzen wir hier die hook.sh von diesem Client.

Konfigurieren Sie den Client bitte entsprechend Ihren Anforderungen. Bei dehydrated beachten Sie bitte die Hinweise zur domains.txt, dies gilt besonders in der Verwendung in Bezug auf Wildcard Domains. Wichtig ist, dass Sie die Hooks aktivieren und die hooks.sh mit einbinden. Einen Auszug der zwei relevanten Funktionen finden Sie weiter unten.

Das Skript für den Dynamic DNS Client wird neben den Zugangsdaten mit den Parameter acme aufgerufen. Mit diesem übergibt mal das ACME-Token. Das System erzeugt automatisch die notwendigen TXT-Records. Ein leerer Parameter sorgt dafür, dass die entsprechenden Records im Nameserver gelöscht werden. Bitte beachten Sie, dass diese Werte nicht gespeichert werden und somit nur eine kurze Lebensdauert haben.

Wenn Sie ein Wildcard-Zertifkat erstellen möchten, so müssen Sie noch zusätzlich den Parameter &wc=true übergeben. Das System erzeugt dann automatisch angepasste Werte.

Grundsätzlich können Sie mehrere Tokens für eine Domain hinterlegen. Für Wildcard-Zertifikate ist dies auch zwingend notwendig. Aus diesem Grund sollten Sie nach dem generieren des Zertifikates auch einen Clenup laufen lassen und die Werte aus der Zonen-Datei löschen.

 

Auszug aus der hook.sh:

#!/usr/bin/env bash

deploy_challenge() {
    local DOMAIN="${1}" TOKEN_FILENAME="${2}" TOKEN_VALUE="${3}"

    # This hook is called once for every domain that needs to be
    # validated, including any alternative names you may have listed.
    #
    # Parameters:
    # - DOMAIN
    #   The domain name (CN or subject alternative name) being
    #   validated.
    # - TOKEN_FILENAME
    #   The name of the file containing the token to be served for HTTP
    #   validation. Should be served by your web server as
    #   /.well-known/acme-challenge/${TOKEN_FILENAME}.
    # - TOKEN_VALUE
    #   The token value that needs to be served for validation. For DNS
    #   validation, this is what you want to put in the _acme-challenge
    #   TXT record. For HTTP validation it is the value that is expected
    #   be found in the $TOKEN_FILENAME file.

    # Simple example: Use nsupdate with local named
    # printf 'server 127.0.0.1\nupdate add _acme-challenge.%s 300 IN TXT "%s"\nsend\n' "${DOMAIN}" "${TOKEN_VALUE}" | nsupdate -k /var/run/named/session.key
wget "https://dynamicdns.secure-gw.de/?user=<KUNDENNUMMER>&token=<DYNAMIC_DNS_AUTHTOKEN>&dom=${1}&acme=${3}" -O /dev/null -o /dev/null
sleep 10 } clean_challenge() { local DOMAIN="${1}" TOKEN_FILENAME="${2}" TOKEN_VALUE="${3}" # This hook is called after attempting to validate each domain, # whether or not validation was successful. Here you can delete # files or DNS records that are no longer needed. # # The parameters are the same as for deploy_challenge. # Simple example: Use nsupdate with local named # printf 'server 127.0.0.1\nupdate delete _acme-challenge.%s TXT "%s"\nsend\n' "${DOMAIN}" "${TOKEN_VALUE}" | nsupdate -k /var/run/named/session.key
wget "https://dynamicdns.secure-gw.de/?user=<KUNDENNUMMER><DYNAMIC_DNS_AUTHTOKEN>&token=&dom=${1}&acme=" -O /dev/null -o /dev/null } ...

Zuletzt aktualisiert am 2018-10-04 von Tobias Bauer.

Zurück