Magento2 Composer Update: Failed to enable crypto

Wie mittlerweile bekannt sein sollte, entwickle ich Magento2 ebenfalls auf einem Mac unter MAMP (3.5) mit PHP 5.6 und PHP 7. Das lief auch alles wunderbar, bis Magento auf ihrer eigenen Repo-Source (https://repo.magento.com/) sich dazu entschlossen hat, TLS 1.0 nicht mehr zu unterstützen. Somit kann man nun mit einem älteren PHP nicht mehr auf die Systeme zugreifen, da keine Verbindung aufgebaut werden kann.

Testen kann man dies wie folgt:

openssl s_client -connect repo.magento.com:443 -tls1_2 # Verbindung wird aufgebaut
openssl s_client -connect repo.magento.com:443 -tls1_1 # Verbindung wird aufgebaut
openssl s_client -connect repo.magento.com:443 -tls1   # Verbindung fehlgeschlagen!

Dass das nicht erfüllt werden kann, sieht man in er phpInfo hier:

  • SERVER_SOFTWARE Apache/2.2.29 (Unix) mod_wsgi/3.5 Python/2.7.10 PHP/5.6.10 mod_ssl/2.2.29 OpenSSL/0.9.8zh DAV/2 mod_fastcgi/2.4.6 mod_perl/2.0.9 Perl/v5.22.0
  • Registered Stream Socket Transports tcp, udp, unix, udg, ssl, sslv3, sslv2, tls, tlsv1.0

php -i | grep "Registered Stream Socket Transports"

Nun habe ich gelernt, dass man mindestens folgende Versionen braucht, damit das überhaupt irgendwie klappen könnte:

  • PHP 5.6
  • OpenSSL 1.0.1

Ersteres ist ja eh schon gegeben, aber der zweite Teil ist etwas schwieriger. Gelöst habe ich es (wie so oft) mit brew:

brew update
brew install openssl
brew link --force openssl

Wenn alles richtig gemacht wurde, sieht die Version nun so aus:

openssl version
OpenSSL 1.0.2h  3 May 2016

(oder eben neuer)

Folgende Bemühungen waren danach erfolglos:

  • cURL für MAMP in einer neueren Version neu bauen (das hat zwar geklappt, löst aber das Problem in composer nicht)
  • PHP mit openssl shared bauen (wie schon einmal beschrieben) – das klappt zwar zu bauen, aber da das Binary in MAMP mittlerweile inklusive OpenSSL gebaut wird, kann die Version nicht einfach über eine Extension ausgetauscht werden

Die Lösung

Ich habe mir nun einfach AMPPS installiert, welches ich nutze um die composer Updates auszuführen. Die zusätzlichen 1,7 GB auf der Festplatte sind zwar etwas übertrieben für das Problem, dafür kann ich alles wieder ohne Probleme löschen wenn endlich MAMP 4 mit einer neueren OpenSSL-Version released wird. Am Ende sprechen wir hier also von wenigen Wochen.

AMPPS muss dazu noch etwas konfiguriert werden.

Als erstes muss in die php.init der folgende Eintrag geschrieben werden:

openssl.cafile=/usr/local/etc/openssl/cert.pem

Sonst klappt es nach wie vor nicht!

Dann müssen noch einige PHP-Extensions aktiviert werden – ich schreibe hier einfach mal eine Liste von allen Extensions auf, welche in meiner Installation nun aktiv sind:

  • bz2
  • ctype
  • curl
  • gd
  • iconv
  • intl
  • mbstring
  • mcrypt
  • mysql
  • mysqli
  • openssl
  • pdo_mysql
  • pdo_sqlite
  • soap
  • sockets
  • sqlite3
  • tokenizer
  • xsl
  • zip
  • zlib

Solltet ihr davon eine vergessen, wird euch aber composer auf jeden Fall darauf hinweisen.

So, damit ich aber nicht alles auf AMPPS neu einstellen muss, möchte ich es nicht für den Entwicklungsprozess nutzen. Also bleibe ich bei MAMP und meinem mySQL usw. Das hat den Vorteil, dass ich nichts großartig transferieren muss. Also nutze ich ausschließlich das enthaltene PHP für ein composer update.

Damit das etwas einfacher wird, lege ich mir einen Alias in meiner .bash_profile an:

vi ~/.bash_profile
alias phpamps="/Applications/AMPPS/php-5.6/bin/php"

Jetzt kann ich es verwenden, um wie gewohnt meine Composer-Quellen zu aktualisieren:

phpamps composer.phar update

Ein ganz schöner Umweg, welcher mich viel Zeit gekostet hat! Nur, weil Magento TLS 1.0 bei einem Open-Source Projekt für nicht mehr sicher genug hält. Danke an dieser Stelle.

phpamps -i | grep "Registered Stream Socket Transports"
Registered Stream Socket Transports => tcp, udp, unix, udg, ssl, sslv3, sslv2, tls, tlsv1.0, tlsv1.1, tlsv1.2

Und schon ist alles da.


Beitrag veröffentlicht

in

, ,

von

Schlagwörter: