PHIVE: PHAR-Installation and Verification Environment

PHIVE: Entwicklungstools elegant verwalten
1 Kommentar

Viele Entwickler speichern die .phar-Dateien der jeweiligen Tools direkt im Document Root des Repositories, um der Dependency Hell zu entkommen. In die gelangt man, wenn man die Tools stattdessen in den require-dev-Bereich der composer.json packt. Wie man das eleganter lösen kann, zeigt dieser Artikel.

Früher war das initiale Aufsetzen aller benötigten Entwicklungswerkzeuge eine mühselige Arbeit. Zuerst musste man den passenden Downloadlink für die .phar und die zugehörige Signatur in der korrekten Version finden. Danach lud man die Daten herunter. Nach erfolgreicher Prüfung der .phar-Datei wurde diese noch als ausführbar gekennzeichnet. Dieser Prozess wiederholte sich für jedes benötigte Tool – das ist eine Menge Arbeit. Zum Glück gibt es dafür mittlerweile eine Alternative, die sich PHIVE (PHAR Installation and Verification Environment) nennt. Das von Arne Blankerts und Sebastian Heuer entwickelte Tool nimmt dem Entwickler viel Arbeit ab. Mit PHIVE können, ähnlich wie bei Composer, verschiedene PHAR-Archive als Abhängigkeit definiert werden. Diese Informationen finden sich in der phive.xml.

Anwendung und Installation

phive install startet den Downloadprozess der in phive.xml festgelegten Werkzeuge. Danach werden die Hashes (SHA1, SHA256 oder SHA512) der jeweiligen Archive genauso verifiziert wie deren OpenPGP/GnuPG-Signatur. Um einen erneuten Download der jeweiligen Archive zu verhindern, sind die Archive im Standard im Home-Verzeichnis des Benutzers unter ~/.phive abgelegt.

Um PHIVE in ein bestehendes Projekt zu integrieren, sollte PHIVE zuerst auf den jeweils verwendeten Systemen installiert werden. Wie das genau geht, ist in Listing 1 beschrieben. Die anschließende Installation von z.B. phpcs-fixer ist mit phive install php-cs-fixer denkbar einfach. In diesem Beispiel ist php-cs-fixer als Alias hinterlegt und verweist auf das GitHub-Repository FriendsOfPHP/PHP-CS-Fixer. Alternative Installationsmöglichkeiten sind in Listing 2 aufgeführt. PHIVE erstellt eine phive.xml-Datei (Listing 3), wenn diese noch nicht vorhanden ist. In dieser Datei sind, ähnlich wie in der composer.json, die definierten Abhängigkeiten hinterlegt.

wget -O phive.phar https://phar.io/releases/phive.phar
wget -O phive.phar.asc https://phar.io/releases/phive.phar.asc
gpg --keyserver pool.sks-keyservers.net --recv-keys 0x9D8A98B29B2D5D79
gpg --verify phive.phar.asc phive.phar
chmod +x phive.phar
sudo mv phive.phar /usr/local/bin/phive
phive install psh
phive install shopwareLabs/sw-cli-tools
phive install https://phar.phpunit.de/phpunit-4.8.6.phar
<?xml version="1.0" encoding="UTF-8"?>
<phive xmlns="https://phar.io/phive">
  <phar name="php-cs-fixer" version="^2.12.2" installed="2.12.2" location="./tools/php-cs-fixer" />
  <phar name="shopwarelabs/psh" version="^1.2.0" installed="1.2.0" location="psh" />
  <phar name="phpstan" version="^0.10.1" installed="0.10.1" location="./tools/phpstan" />
  <phar name="shopwarelabs/sw-cli-tools" version="^0.0.1" installed="0.0.1" location="./tools/sw" />
</phive>

Standardmäßig findet man die Archive im Document Root unter dem Verzeichnis tools wieder. Wer lieber eine Kopie anstatt eines symbolischen Links haben möchte, fügt dem Befehl einfach ein –copy hinzu. Wenn man stattdessen lieber die Archive in einem anderen Verzeichnis oder im Document Root haben möchte, kann man dies mit dem Parameter –target beeinflussen.

International PHP Conference

Migrating to PHP 7

by Stefan Priebsch (thePHP.cc)

A practical introduction to Kubernetes

by Robert Lemke (Flownative GmbH)

Mehr Schritte sind nicht notwendig, um PHIVE in ein Projekt zu integrieren. Um einen Umstieg von composer dev-requirements so einfach wie möglich zu machen, kann man mit phive composer die composer.json nach bekannten Alias durchsuchen und diese anschließend in einem Auswahldialog installieren. Die Aktualisierung der verwendeten PHAR-Archive ist mit einem einfachem phive update möglich. PHIVE selbst kann mit phive selfupdate auf den aktuellsten Stand gebracht werden.

Eigene PHAR-Archive installieren

Um eigene PHAR-Archive mit PHIVE installieren zu können, gibt es verschiedene Möglichkeiten: basierend auf GitHub-Releases (phive install username/project), registriert als Alias auf phar.io (phive install alias) oder einem expliziten URL (phive install https://server/file-1.0.0.phar). Wir schauen uns anhand unseres PSH-Tools an, wie das via GitHub-Releases funktioniert. Dafür muss ein GPG-Schlüssel für das Projekt vorhanden, der öffentliche Schlüssel auf den SKS Schlüsselservern bekannt sein und eine bereits generierte PHAR-Datei vorliegen.

Auf der Konsole geben wir den Befehl ein: gpg -u psh@example.com –detach-sign –output psh.phar.asc psh.phar. So signieren wir die psh.phar-Datei und erhalten eine psh.phar.asc-Signaturdatei. Diese Dateien werden unter https://github.com/shopwareLabs/psh/releases der zugehörigen Version als Anhang hinzugefügt. Via phive install shopwareLabs/psh installiert man das Archiv. Da wir einen Alias für psh erstellt haben, ist auch ein phive install psh möglich. Wer einen Alias registrieren möchte, muss einen Pull Request auf phar-io/phar.io erstellen.

OpenPGP/GnuPG

GnuPG ist der Standard zum Signieren von Archiven und wird auch zum Signieren von Git Commits und Git-Tags verwendet. Wichtig ist, ein kryptografisch sicheres Tool zu verwenden, um die Integrität von Dateien/Archiven und die Authentizität der bereitgestellten Signatur zu prüfen. OpenPGP bietet die optimalen Voraussetzungen.

Damit der Verifizierungsprozess einwandfrei funktioniert (z.B. gpg –verify …), muss der öffentliche Teil des privaten Schlüssels, der zum Signieren verwendet wird, dem System bekannt sein, das die Verifizierung durchführt. Der öffentliche Schlüssel muss daher über seine ID importiert werden. Befindet sich der öffentliche Schlüssel im sogenannten Schlüsselring (Keyring), können Signaturen, die mit dem Schlüssel verknüpft sind, verifiziert werden. Ist der private Schlüssel sicher und vertraulich gespeichert, ist es, so der Stand heute, nahezu unmöglich, dass jemand anderes als der Besitzer des privaten Schlüssels eine Signatur erstellen kann. Nimmt ein potenzieller Angreifer einen anderen privaten Schlüssel, um das manipulierte Archiv zu signieren, schlägt die Überprüfung fehl. Hier kommen die Schlüssel-ID und die Fingerabdrücke ins Spiel, die nicht gefälscht werden können. Das PHAR Archive und die dazugehörige Signatur können gefälscht werden, aber der Angreifer würde nicht mit dem offiziellen Signierschlüssel übereinstimmen, die Überprüfung schlägt fehl. PHIVE warnt, wenn sich ein Signaturschlüssel geändert hat, und fordert den Benutzer auf, dies zu überprüfen und zu bestätigen, falls diese Änderung korrekt ist.

Bleibt das Problem, dass bei der ersten Installation eines PHAR-Archivs ein gefälschter Schlüssel verwendet werden könnte und PHIVE das nicht bemerken würde, da es dafür aktuell keine Möglichkeiten gibt. In einer künftigen Version können registrierte Alias für PHIVE ihre öffentlichen Schlüsseldaten hinterlegen. Daher ist die einzige Lösung, den jeweiligen Fingerabdruck manuell zu prüfen. So führt z.B. die Webseite von PHIVE den verwendeten Fingerabdruck im Footer auf.

OpenSSL

OpenSSL-Signaturen kann man verwenden, um zu verifizieren, dass eine Datei nach dem Signieren nicht verändert wurde, sie stellen aber keine weiteren Identitätsinformationen bereit. So ist der Unterzeichner nicht nachweisbar und es könnte jeder ein manipuliertes Archiv mit OpenSSL signieren. Es gibt keine einfache Möglichkeit, den Unterschied zu einem offiziellen, unveränderten Archiv zu erkennen. OpenSSL-Signaturen, wie sie in ext-phar implementiert sind, bieten keine Möglichkeit, den Unterzeichner zu schützen. Damit das funktioniert, benötigen wir ein CA-Set-up mit Zertifikaten, nicht nur privaten und öffentlichen Schlüsseln, doch das ist aufwändiger als für das jeweilige Projekt einen eigenen OpenPGP-Schlüssel zu erstellen.

Fazit

PHIVE ist ein wirklich gutes Tool, um .phar-Dateien einfach und zuverlässig zu verwalten. Nie war es so einfach, sie zu aktualisieren und die verwendeten Versionen zu speichern. Dieses Konzept spart viel Platz im jeweiligen Repository. Durch OpenPGP/GnuPG ist der Prozess nach aktuellen kryptografischen Standards geschützt. Wir nutzen PHIVE testweise in einem neuen Softwareprojekt, haben positive Erfahrungen gemacht und stellen unsere Bestandsprojekte auf PHIVE um. Wer PHIVE noch nicht nutzt, sollte damit anfangen.

PHP Magazin

Entwickler MagazinDieser Artikel ist im PHP Magazin erschienen. Das PHP Magazin deckt ein breites Spektrum an Themen ab, die für die erfolgreiche Webentwicklung unerlässlich sind.

Natürlich können Sie das PHP Magazin über den entwickler.kiosk auch digital im Browser oder auf Ihren Android- und iOS-Devices lesen. In unserem Shop ist das Entwickler Magazin ferner im Abonnement oder als Einzelheft erhältlich.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Hinterlasse einen Kommentar

1 Kommentar auf "PHIVE: Entwicklungstools elegant verwalten"

avatar
400
  Subscribe  
Benachrichtige mich zu:
Kurz
Gast

Wer braucht das? Composer kann das bereits alles. Und warum will ich meine PHAR-Dateien im DocumentRoot haben?!

X
- Gib Deinen Standort ein -
- or -