Artikelformat

signierte Phar Dateien erstellen

Mit PHP 5.3 gehört Phar zur Standard-Installation von PHP. Damit hat man nun die Möglichkeit eine Bibliothek in nur einer Datei zu deployen. Wie kann man nun sicherstellen, dass eine Phar Datei auch die Datei ist, die man ausgeliefert hat. Und genau diesen Punkt schauen wir uns heute an.

Auf Github gibt es eine Kollektion von Skripten zu finden, die das Generieren von entsprechenden Zertifikaten erleichtert und die PHP Dateien in eine signierte Phar-Datei packt. Neben einem Skript zum Validieren der Signatur gibt es auch ein sehr gutes Beispiel.

Die Installation gestaltet sich wie üblich sehr einfach. Man benötigt ein funktionierendes PEAR und hat mit folgenden 2 Zeilen das Paket mit den Phar-Utilities installiert:

1
2
$ sudo pear channel-discover pear.kotowicz.net
$ sudo pear install kotowicz/PharUtil-beta

Als Besonderheit muss man darauf achten, das man in der php.ini die Option zum Erzeugen von Phar-Dateien aktiviert. Hierfür muss man in der Konfiguration des CLI die Option phar.readonly auf Off oder 0 stellen. Die Defaulteinstellung ist On.

Um die Skripte zu nutzen, muss man sich entweder an die vorgegebene Verzeichnisstruktur halten oder die entsprechenden Parameter setzen. Da die vorgegebene Struktur sinnvoll ist, kann man sich die Parametrisierung sparen.

Man benötigt mindestens 2 Verzeichnisse. Ein cert Verzeichnisse, in dem Public- und Private-Key abgelegt werden und ein src Verzeichnis, in dem die PHP Dateien zu finden sind, die man „verpacken“ möchte.

Dann generiert man die Keys, in dem man in dem cert-Verzeichnis das Tool phar-generate-cert aufruft. Anschließend wechselt man wieder zurück zum root-Verzeichnis und startet dort mit dem Befehl phar-build die Erstellung des Archivs. Man sollte den –phar Parameter nutzen, wenn man ein Archiv mit einem eigenen Namen nutzen oder in einem speziellen Verzeichnis die Datei ablegen möchte. Somit lautet der Befehl dann:

1
$ phar-build --phar ./build/myLib.phar

Wie man die Phar Datei in ein bestehendes System einbindet, kann man in den Beispieldateien sehen, die man auf Github findet. Die local.php ist für phar-Anfänger geeignet. Darin sieht man wie ein solches Archiv überhaupt genutzt wird. Wir wollen aber die Signatur beachten. Hierfür gibt es die remote.php. Darin wird gezeigt, wie man eine signierte Phar-Datei benutzt. Wichtig ist hierbei, dass man Zugang zu dem public-Key hat. Der Private-Key kann entfernt werden, wie das bei asymetrischen Verschlüsselungsverfahren ja auch üblich ist.

Nun noch einen Tipp zum Schluß:
Wenn man ein PHP mit Suhosin-Patch nutzt, sollte man darauf achten, das phar nicht als von PHP ausführbare Datei definiert ist. Das heißt, man kann zwar php local.php aufrufen, sieht aber keine Ausgabe. Die Verarbeitung der Phar-Datei wird von dem Sicherheitspatch unterbunden. Eine direkte Fehlermeldung sieht man aber auch nicht. Im Systemlog ist eine Meldung zu finden.

Wenn man nun das Problem lösen will, ohne Suhosin zu deaktivieren, muss man nur eine Zeile in der Suhosin-Konfiguration ändern. Folgender Eintrag muss existieren.

1
suhosin.executor.include.whitelist = "phar"

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.