PHP: Installation der PGP Erweiterung

Achtung! Dieser Artikel ist älter als ein Jahr. Der Inhalt ist möglicherweise nicht mehr aktuell!

Für ein Webprojekt möchte ich die Ausgaben einer Schnittstelle digital signieren. Der Grund: Unterwegs soll die Nachricht nicht manipuliert werden. Da einige Proxyserver die TLS-Verbindung terminieren und hinten raus neu aufbauen ist eine Manipulation nicht nachvollziehbar.

Ich habe mich für PGP entschieden, da es bereits Schnittstellen für PHP gibt. Voraussetzung ist eine Lauffähige Version von GnuPG. Das ist auf den meisten Systemen bereits installiert. Falls nicht kann man es einfach nachinstallieren.

Die Installation des Moduls …

… ist schwerer als man glaubt. Ständig muss man sich über neue Versionen informieren, kompilieren und libs im Dateisystem bewegen. Oder doch nicht? Für Debian basierte Derivate ist es ziemlich einfach. Eine Anleitung für die Installation über PECL habe ich dank diesem User bekommen.

Ohne die libgpgme11-dev bekommt man eine kryptische Fehlermeldung.

Nun kommt keine Fehlermeldung mehr beim installieren über PECL.

Und schon hat man die Module und Funktionen, die man braucht.

Nun muss es nur noch in der php.ini eingetragen werden. Welche genau geladen ist findet man in der Ausgabe von phpinfo(). Am Ende der Datei fügt man dann folgende Zeile ein:

Nach einem Neustart oder Reload des Apache kann man die Funktionen auch verwenden. Nun sollte man in der Ausgabe von phpinfo() eine Sektion „gnupg“ finden.

Optional: Erstellen eines PGP Schlüsselpaares, mit dem man nur signieren kann

Die Ausgabe soll lediglich signiert werden. GnuPG erlaubt mir die Erstellung eines Schlüsselpaares, mit dem ich nur signieren kann. Das entspricht meinen Anforderungen. Sollte ich später trotzdem verschlüsseln wollen, kann ich den Schlüsselbund nachträglich editieren.

Die Erstellung eines Schlüsselpaares ist über SSH ziemlich einfach. Ich habe mich mit dem Benutzer eingeloggt unter dem auch der Webserver läuft. Das PHP-Modul greift auf den .gnupg Ordner im Homeverzeichnis des User zu.

Erzeugen des Schlüsselpaares:

GnuPG legt dann die benötigte Ordnerstruktur an. Man wird gefragt, welche Art von Schlüssel erzeugt werden soll.

Ich nehme in meinem Fall Punkt 4. Danach soll man die Länge des Schlüssels angeben. 2048 bit sind bei mir der Standardwert. Klingt vernünftig.

Danach soll man die Gültigkeit angeben. Ich wähle aus, dass er nie ausläuft und bestätige die extra Warnung.

Für ein Webprojekt möchte ich die Ausgaben digital signieren. Der Grund: Unterwegs soll die Ausgabe nicht manipuliert werden. HTTPS ist keine Option, da einige Proxyserver die TLS Session terminieren und hinten raus neu aufbauen.

Ich habe mich für PGP entschieden, da es bereits Schnittstellen für PHP gibt. Voraussetzung ist eine Lauffähige Version von GnuPG. Das ist auf den meisten Systemen bereits installiert. Falls nicht kann man es einfach nachinstallieren!

Die Installation des Moduls …

… ist schwerer als man glaubt. Oder doch nicht? Für Debian basierte Derivate ist es ziemlich einfach dank diesem User:

Ohne die libgpgme11-dev bekommt man eine kryptische Fehlermeldung.

Nun kann man über

Und schon hat man die Module und Funktionen, die man braucht.

Nun muss es nur noch in der php.ini eingetragen werden. Welche genau geladen ist findet man in der Ausgabe von phpinfo(). Am Ende der Datei fügt man dann folgende Zeile ein:

Nach einem Neustart des Apache kann man die Funktionen auch verwenden. Nun sollte man in der Ausgabe von phpinfo() eine Sektion „gnupg“ finden.

Optional: Erstellen eines PGP Schlüsselpaares, mit dem man nur signieren kann

Die Ausgabe soll lediglich signiert werden. GnuPG erlaubt mir die Erstellung eines Schlüsselpaares, mit dem ich nur signieren kann. Das möchte ich dann auch so verwenden.

Die Erstellung eines Schlüsselpaares ist über SSH ziemlich einfach. Ich habe mich mit dem Benutzer eingeloggt unter dem auch der Webserver läuft. Das PHP-Modul greift auf den .gnupg Ordner im Homeverzeichnis des User zu.

Erzeugen des Schlüsselpaares:

GnuPG legt dann die benötigte Ordnerstruktur an. Man wird gefragt, welche Art von Schlüssel erzeugt werden soll.

Ich nehme in meinem Fall Punkt 4. Danach soll man die Länge des Schlüssels angeben. 2048 bit sind bei mir der Standardwert. Klingt vernünftig.

Danach soll man die Gültigkeit angeben. Ich wähle aus, dass er nie ausläuft und bestätige meine Entscheidung.

Danach muss ich noch die Schlüsselinformationen eintragen. Ich wähle hier Werte, die ungefähr den Verwendungszweck beschreiben.

Danach werde ich zwei mal nach eine Passwort gefragt. Man sollte hier ein gutes Passwort wählen und sich merken. Später im Code benötigt man dies. Danach werden die Primzahlen generiert und Informationen über den Schlüssel ausgegeben.

Das wäre es auch schon gewesen. Im obigen Text habe ich eine wichtige Information grün markiert. Den Fingerprint sollte man sich merken, da man diesen später im Code braucht, da der zu verwendende Schlüssel damit referenziert wird. Alle Beispiele im PHP Manual verwenden auch als Referenz den Fingerprint.

Wenn man den Fingerprint vergisst kann man sich diesen auch nochmal anzeigen lassen.


Du hast einen Kommentar, einen Wunsch oder eine Verbesserung? Schreib mir doch eine E-Mail! Die Infos dazu stehen hier.

🖇️ = Link zu anderer Webseite
🔐 = Webseite nutzt HTTPS (verschlüsselter Transportweg)
Zurück