Https Request mit SSL empfangen

Ich habe mir um von außen per Http mit SSL-Verschlüsselung Sachen an meinem Miniserver schalten zu können (z.B. über Tasker oder IFTTT) einen kleinen Serverdienst in Python programmiert, welcher aus solchen POST's ein UDP Paket an meinen Miniserver schickt. Das ganze läuft bei mir auf einem Raspberry Pi, müsste natürlich aber auch auf anderen System laufen:

Ihr müsst ein System haben auf welchem Python 3.x installiert ist.

Zunächst installiert ihr bottle für Python, bottle ist ein simpler http Server Dienst:

sudo apt-get install python-bottle

 

Wenn ihr das fertig habt müsst ihr euch ein SSL-Zertifikat erstellen mit:

openssl req -new -x509 -keyout key.pem -out cert.pem -days 3650 -nodes

Wichtig ist dass ihr bei "common name" den korrekten Namen, sprich den DNS Eintrag unter dem euer RPi zu erreichen seid eintragt!

Das SSL Zertifikat hat eine gültigkeit von 3650 Tagen, wird allerdings in Browsern als nicht sicher angezeigt, da es von euch selbst zertifiziert ist! Für eine HTTP Post von Tasker oder IFTTT spielt das aber keine Rolle!

Dann erstellt ihr das Python Programm mittels

nano https2UDP.py

und fügt dann folgenden Code dort ein:

Hier müsst ihr dann noch folgende Dinge eintragen:

Miniserver_IP = 'x.x.x.x'
Miniserver_PORT = 8885
Http_Port = 21607
Http_Route = 'Hallo'
Zertifikat = '/home/pi/cert.pem'
Schluessel = '/home/pi/key.pem'

 

Miniserver_IP und entsprechenden UDP Empfangs-Port

Http_Port: hier muss dann auch eine Port-Weiterleitung von aussen eingerichtet werden (Fritzbox, oder anderen Router)

Http_Route: Diese wird benötigt um anzugeben wie der Aufruf aussehen soll. Tragt ihr dort zum Beispiel "Hallo" ein muss der Aufruf wie folgt aussehen: my.DynDNS.eintrag:21607/Hallo/Eurer_Befehle. Hierbei wird dann alles nach dem /Hallo/ als UPD Nachricht an den Miniserver geschickt. Das my.DynDNS.eintrag und der Port müssen natürlich von euch entsprechend angepasst werden. Ich habe meine Http_Route einfach aus Groß-, Kleinbuchstaben und Zahlen zusammengesetzt. Das macht es noch schwerer um von aussen zufällig etwas an den MS zu schicken.

Zertifikat und Schluessel: Hier müssen das Zertifikat und der Client-Schlüssel welche ihr oben erzeugt habt mit kompletten Pfad angegeben werden.

Wichtig noch: das ganze funktioniert nur mit Http POST Anfragen, alle andere habe ich gesperrt! Gebt ihr die Adresse daher in einen Browser ein kommt folgende Meldung:

Error: 405 Method Not Allowed

Bekommt ihr diese Meldung wisst ihr aber das alles richtig installiert ist. Bzw. vorher müsste noch die Meldung kommen das das Zertifikat nicht sicher ist, da ihr es ja selbst erstellt habt.

 

So das war es auch schon.

Nun könnt ihr das ganze testen:

Um das Programm beim Starten zu starten geht ihr wie folgt vor:

hier trag ihr dann folgendes ein:

So und schon sollte es laufen.

 

Falls fragen sind bitte einfach melden.

 

Gruß Iksi