Anleitungen im Zusammenhang mit Beach

Wie man ältere Anbieter mit OpenSSL 3 aktiviert

Vor kurzem haben wir unsere Container-Basis aktualisiert - und damit auch OpenSSL auf Version 3. Für einige könnte das zu Problemen mit älteren Zertifikaten führen.

Übersicht

Wenn du die OpenSSL-Funktion in PHP verwendest, wird die harte Arbeit von den OpenSSL-Bibliotheken im Hintergrund erledigt. Mit Version 3 wurden einige veraltete Kryptografien entfernt - das kann zu Problemen führen, wenn du mit bestimmten älteren Zertifikaten arbeiten musst.

Du könntest auf Fehler wie diesen stoßen:

OpenSSL-Fehler: error:0308010C:digital envelope routines::unsupported

Um dieses Problem zu lösen, kannst du das Zertifikat entweder wie folgt neu packen:

openssl pkcs12 -legacy -in key.p12 -nodes -out key_decrypted.tmp
openssl pkcs12 -in key_decrypted.tmp -export -out key_new.p12

oder (falls das nicht möglich ist) aktiviere die Legacy-Provider. Es gibt allerdings keine Möglichkeit, das in PHP selbst zu tun, also muss man etwas tricksen. Lies weiter...

Wie du Legacy-Provider aktivierst

Du brauchst zwei Dinge: Eine Konfigurationsdatei und eine Umgebungsvariable. Erstens, die Datei. Entscheide dich für einen Ort in deinem Projekt, das Stammverzeichnis ist gut geeignet. Erstelle nun eine Datei mit dem Namen legacy-openssl.cnf und füge diese Datei ein:

[openssl_init]
providers = provider_sect

[provider_sect]
default = default_sect
legacy = legacy_sect

[default_sect]
activate = 1

[legacy_sect]
activate = 1

Erstelle nun eine Instanzvariable in deinem Projekt. Sie muss OPENSSL_CONF heißen und den absoluten Pfad zu der Datei enthalten, die du oben erstellt hast. Wenn du sie im Stammverzeichnis deines Projekts ablegen würdest, wäre das /application/legacy-openssl.cnf.

Wenn du jetzt die Datei und die Variable bereitstellst, sollte dein OpenSSL-Code wieder funktionieren.