Let’s Encrypt: Zertifikate erstellen und erneuern via ACME-Challenge

letsencrypt-logo

Voraussetzung:
Installation von Certbot

Zum Let’s Encrypt-Verzeichnis wechseln:

cd /opt/letsencrypt

Folgenden Befehl ausführen:

sudo ./certbot-auto certonly --manual --agree-tos --manual-public-ip-logging-ok --rsa-key-size 4096 -d domain.tld -d www.domain.tld

Es wird automatisch sämtlichen Bestimmungen (TOS: Terms of service) zugestimmt.

Es müssen zwei Challenge-Dateien mit dem jeweils angegebenen Inhalt für die Hauptdomain und Subdomain (www) erzeugt und via SSH bzw. FTP in das root-Verzeichnis der Domain hochgeladen werden. (Tool: Excel-VBA-Script)

Nach erfolgreicher Challenge und Erstellung der SSL/TLS-Zertifikate erfolgt der Wechsel zum Archiv:

cd /etc/letsencrypt/archive

In den jeweiligen Unterordnern des bzw. der Domainnamen sind die Zertifikatsdateien abgelegt:

  • cert1.pem
  • chain1.pem
  • fullchain1.pem (Verkettung von cert1.pem & chain1.pem)
  • privkey1.pem

Informationen über ein Zertifikat auslesen

Im Terminal bzw. via SSH zum Ablageort des Zertifikats wechseln.

Alternativ über den Dateimanager (z.B. PCMan File Manager) im entsprechenden Ordner positionieren und dann in der Menüleiste Werkzeuge & „Aktuellen Ordner im Terminal öffnen“ wählen.

Im Terminal folgenden Befehl ausführen:

openssl x509 -noout -text -nameopt multiline -in cert.pem

Unter „Subject: commonName“ wird angezeigt, zu welcher Domain die Zertifikatsdatei gehört.

Validity gibt an, ab bzw. bis wann ein SSL/TLS-Zertifikat gültig ist.

Raspberry Pi: E-Mail bei Wechsel der externen IP-Adresse senden

Script prüft auf die aktuelle externe IP-Adresse und gleicht sie mit der gespeicherten ab. Bei Abweichung (=IP-Wechsel) wird eine E-Mail versandt.

Task 1: Datei IPfile.txt in /home/pi anlegen

Task 2: Folgenden Code in einer neuen Datei unter dem Namen IPmail.py im gleichen Pfad abspeichern:

import socket
import re
import smtplib

# Python3:
from urllib.request import urlopen

# Python2 (deprecated):
# from urllib2 import urlopen

# Define timeout (in seconds) if server is not available
timeout=10
socket.setdefaulttimeout(timeout)

# SETUP: Login credentials of mailbox, mailserver etc.
from_address = 'PLEASE_FILL_OUT'
to_address = 'PLEASE_FILL_OUT'
username = 'PLEASE_FILL_OUT'
password = 'PLEASE_FILL_OUT'
server = smtplib.SMTP('PLEASE_FILL_OUT')

# Define IP address service
url = 'http://ip.fnord.eu'
print ("Active IP address service:",url)

# Open up the URL, then read the contents and start UTF-8 decoding
request = urlopen(url).read().decode('utf-8')

# Extract the IP address only
myIP = re.findall("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", request)
myIP = str(myIP)
print ("The actual IP address is:",myIP)

def send_email(myIP):
    subject = 'Info: external IP changed'
    body_text = myIP + ' is your new IP address'
    message = '\r\n'.join(['To: %s' % to_address,
                       'From: %s' % from_address,
                       'Subject: %s' % subject,
                   '', body_text])
    
    # Actually send the email
    server.starttls()
    server.login(username,password)
    server.sendmail(from_address, to_address, message)
    server.quit()
    print ("The notification (E-Mail) was sent to recipient's address.")

# Open up IPfile.txt and extract the contents
with open ('/home/pi/IPfile.txt', 'rt') as IPfile:
    IPfile = IPfile.read() # Read the text file

# Check if IP address has changed
if IPfile == myIP:
    print ("Your IP address did not change.")
else:
    print ("You got a new IP address.")
    with open('/home/pi/IPfile.txt', 'wt') as IPfile:
        IPfile.write(myIP)
    print ("The new IP address was saved successfully.")
    send_email(myIP)

Task 3: Cronjob via SSH anlegen

 crontab -e

Am Ende folgende Zeile einfügen, damit das Script alle 2 Minuten ausgeführt wird und bei Verlassen speichern:

*/2 * * * * python3 /home/pi/IPmail.py

Dieses Python-Script basiert auf einem
YouTube-Tutorial von Alexander Baran-Harper und wurde für den persönlichen Gebrauch modifiziert / erweitert.