Selbst signierte Zertifikate verursachen Probleme unter NGinx/PHP

Selbst signierte Zertifikate verursachen Probleme unter NGinx/PHP

Ich habe gerade mein Debian 7, Nginx 1.6.2, PHP 5.4.39 auf Debian 8, Nginx 1.6.2, PHP 5.6.9 aktualisiert.
Auf diesem Server läuft ein CRM, mit dem wir E-Mails über PHP, EspoCRM, gesendet haben, und das verwendet ZendFramwork2 E-Mail (Senden über Server 2 – Senden über Thunderbird funktioniert einwandfrei).
Das hat bis nach dem Upgrade einwandfrei funktioniert. Jetzt habe ich eine Fehlermeldung mit folgendem Inhalt:

500 unable to connect via tls

Eine kleine Suche hat also nichts zum CRM ergeben, sondern verweist eher auf das selbst signierte Zertifikat und/oder etwas im Stapel darüber (NGinx/PHP?).
Irgendeine Idee, wo ich mit der Suche anfangen soll? Auf meinem CRM-Server habe ich nichts in den Fehlerprotokollen (ich schätze, das wird vom CRM geschluckt).
Ich sehe auch nichts im Syslog oder Authlog des Maiml-Servers.

BEARBEITEN: Informationen hinzufügen:
phpinfo ()

Registered Stream Socket Transports tcp, udp, unix, udg, ssl, sslv3, tls, tlsv1.0, tlsv1.1, tlsv1.2
curl   
SSL     Yes
SSL Version     OpenSSL/1.0.1k  
imap 
SSL Support     enabled  
openssl
OpenSSL support     enabled OpenSSL  
Library Version     OpenSSL 1.0.1k 8 Jan 2015 OpenSSL Header Version  
OpenSSL 1.0.1k 8 Jan 2015  Directive    Local Value Master Value  
openssl.cafile  no value    no value openssl.capath no value    no value     
Phar  
OpenSSL support     enabled  

Ich habe die alte Konfigurationsdatei von Debian 7 verwendet (NGinx ist dieselbe Version – ich habe einen Backport auf D7 verwendet).

Server und Software:
Server A: Mailserver, Debian 6, Postfix, selbstsignierte Zertifikate
Server B: Debian 8, Nginx, PHP, EspoCRM – Ich habe TLS gewählt, da es in meinem Thunderbird auf meinem lokalen PC funktioniert und vor dem Upgrade von Debian 7 auf 8 funktioniert hat.
Lokaler PC: Kubuntu, Thunderbird, Mails können über TLS gesendet und empfangen werden.

Antwort1

So wie ich es verstehe, erlaubt PHP 5.6 nicht, selbstsignierte Zertifikate zu akzeptieren, zu validieren oder zu verarbeiten.

http://php.net/manual/en/migration56.openssl.php

Sie müssen die Überprüfung von Peer und Peer-Namen deaktivieren

$streamContext = stream_context_create([
            'ssl' => [
                'verify_peer'      => false,
                'verify_peer_name' => false
            ]
        ]);

Dies ist nicht trivial, wenn Sie versuchen, es innerhalb eines Pakets zu tun (was so beabsichtigt zu sein scheint), da Sie nicht einfach einige Flags in php.ini oder etwas ähnlich Einfaches festlegen können.

Antwort2

500, keine Verbindung über TLS möglich

Das hilft zwar nicht sehr dabei, das Problem zu identifizieren, aber es muss irgendwo im Code sein, den Sie vermutlich nicht pflegen. Deshalb sollte eine Änderung des Codes, damit er funktioniert, nur der letzte Ausweg sein.

Es wäre nützlich zu wissen, welche Aktion diesen Fehler auslöst.

Da der Mailserver die einzige Stelle in Ihrem Manifest ist, an der ein selbstsigniertes Zertifikat erwähnt wird, gehe ich davon aus, dass hier das Problem auftritt.

Sie müssen lediglich das selbstsignierte Zertifikat zu den anerkannten Zertifizierungsstellen auf dem Host hinzufügen, auf dem sich die Anwendung befindet. Unter der Annahme (wiederum), dass der MTA SMTPS verwendet:

openssl s_client -showcerts -connect servera.example.com:465 </dev/null

Gibt Ihnen die Zertifikatskette. Kopieren Sie die Ausgabe in (sagen wir) /etc/ssl/certs/lbutlr_local.crtund führen Sie sie ausupdate-ca-certificates

verwandte Informationen