Roundcube und PHP 5.6

Um ein paar andere Probleme zu umgehen, habe ich letztens meine Server auf PHP 5.6 upgedatet. Heute ist mir nun aufgefallen, dass meine RoundCube Instanz nicht mehr so richtig funktionieren wollte. Genauer gesagt, war der Login am Backend-Server (IMAPS) nicht mehr möglich.

Erst dachte ich, dass der Dovecot-Server vielleicht heruntergefallen sein könnte, aber nach einem kurzen Check mit "netstat -lp" stellte sich heraus, dass alles funktionieren sollte. Also sah ich die Logs von Roundcube und von Dovecot durch und bemerkte, dass es offenbar Probleme mit dem TLS-Handshake gab. Dabei fiel mir dann eine Information ein, die ich zu PHP 5.6 gelesen hatte. Seit PHP 5.6 werden TLS-Verbindung standardmäßig mit "verify_peer" geöffnet (was bedeutet, dass der Zertifizierungspfad überprüft wird).

In normalen Setups ist das wahrscheinlich gar kein Problem - in gechrooteten Umgebungen wie meiner hingegen schon - denn dann kann PHP die entsprechenden Rootzertifikate (typischerweise unter "/etc/ssl/certs/") nicht finden. Also schnell im Chrootverzeichnis den passenden Ordner angelegt und das passende Rootzertifikat hingelegt... doch es funktionierte immernoch nicht.

Mit ein wenig weiterer Recherche stellte sich heraus, dass RoundCube eine leicht geänderte Konfiguration benötigt, um wieder richtig zu funktionieren. Im Grunde müssen RoundCube dabei die passenden TLS-Informationen mitgeteilt werden:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$config['default_host'] = 'ssl://imap.example.com';
$config['default_port'] = 993;

$config['imap_conn_options'] = array(
    'ssl' => array(
      'verify_peer'       => true,
      'peer_name'         => 'imap.example.com',
      'ciphers'           => 'HIGH:!aNULL:!eNULL:!3DES:!MD5:!RC4:@STRENGTH',
      'cafile'            => '/etc/ssl/certs/imap-certificate-authority.pem',
    ),
);

$config['smtp_server'] = 'ssl://smtp.example.com';
$config['smtp_port']   = 465;

$config['smtp_conn_options'] = array(
    'ssl' => array(
      'verify_peer'       => true,
      'peer_name'         => 'smtp.example.com',
      'ciphers'           => 'HIGH:!aNULL:!eNULL:!3DES:!MD5:!RC4:@STRENGTH',
      'cafile'            => '/etc/ssl/certs/smtp-certificate-authority.pem',
    ),
);

Für einfache Setups, bei denen RoundCube nur als Frontend für einen spezifischen Mailserver-Anbieter dient, scheint diese Konfiguration ausreichend zu sein. Für generelle Setups, bei denen RoundCube als Frontend für beliebig viele Mailserver-Anbieter agiert, habe ich hingegen kein entsprechendes Konfigurationsbeispiel gefunden.

Mailende Grüße, Kenny

P.S.: Noch ein Tipp hinterher: Bevor ihr auf PHP 5.6 updatet, solltet ihr euch vergewissern, dass die von euch betriebenen Anwendungen von den inkompatiblen Änderungen nicht (mehr) betroffen sind.

Schreibe einen Kommentar

Um Ihnen beim weiteren Kommentieren auf dieser Webseite die erneute Eingabe Ihrer Daten zu ersparen, wird beim Absenden Ihres Kommentars ein Cookie an Ihren Browser gesendet und von diesem gespeichert. Mit dem Absenden eines Kommentars auf dieser Webseite stimmen Sie der Speicherung und Übertragung dieses Cookies explizit zu.

Pflichtfelder sind mit * markiert.