Signatur
Beschreibung
MongoDB\Driver\Exception\SSLConnectionException ist eine spezialisierte Ausnahme, die der MongoDB-PHP-Treiber wirft, wenn eine SSL- oder TLS-gesicherte Verbindung zum Datenbankserver nicht erfolgreich hergestellt werden kann. Typische Ursachen sind ungültige oder abgelaufene Zertifikate, nicht übereinstimmende Hostnamen, fehlende CA-Zertifikatsketten oder falsch konfigurierte Client-Zertifikate.
Die Klasse erbt von MongoDB\Driver\Exception\ConnectionException und implementiert das Marker-Interface MongoDB\Driver\Exception\Exception. Dadurch lässt sie sich sowohl als allgemeiner Verbindungsfehler als auch gezielt als SSL-Fehler abfangen. In Produktionssystemen, die verschlüsselte MongoDB-Verbindungen nutzen, sollte diese Ausnahme explizit behandelt werden, um Zertifikatsprobleme klar von anderen Verbindungsfehlern zu unterscheiden.
Häufige Szenarien, in denen diese Ausnahme auftritt, sind: fehlerhafte tlsCAFile- oder tlsCertificateKeyFile-Optionen im Connection-String bzw. im URI-Options-Array, ein Server mit selbst-signiertem Zertifikat ohne entsprechende Client-Konfiguration sowie abgelaufene Zertifikate. Für Entwicklungsumgebungen kann die Zertifikatsprüfung mit der Option tlsAllowInvalidCertificates deaktiviert werden – dies sollte jedoch niemals in Produktionsumgebungen geschehen.
Beispiele
SSL-Verbindungsfehler gezielt abfangen
<?php
use MongoDB\Driver\Manager;
use MongoDB\Driver\Exception\SSLConnectionException;
use MongoDB\Driver\Exception\ConnectionException;
use MongoDB\Driver\Exception\Exception as MongoException;
try {
$manager = new Manager(
'mongodb://mongoserver.example.com:27017',
[
'tls' => true,
'tlsCAFile' => '/etc/ssl/mongo-ca.pem',
]
);
// Verbindung testen
$command = new MongoDB\Driver\Command(['ping' => 1]);
$manager->executeCommand('admin', $command);
echo "Verbindung erfolgreich." . PHP_EOL;
} catch (SSLConnectionException $e) {
// Speziell SSL/TLS-Fehler behandeln
echo "SSL-Verbindungsfehler: " . $e->getMessage() . PHP_EOL;
echo "Bitte Zertifikatskonfiguration überprüfen." . PHP_EOL;
} catch (ConnectionException $e) {
// Allgemeine Verbindungsfehler
echo "Verbindungsfehler: " . $e->getMessage() . PHP_EOL;
} catch (MongoException $e) {
// Alle übrigen MongoDB-Fehler
echo "MongoDB-Fehler: " . $e->getMessage() . PHP_EOL;
}
Entwicklungsumgebung mit selbst-signiertem Zertifikat
<?php
use MongoDB\Driver\Manager;
use MongoDB\Driver\Command;
use MongoDB\Driver\Exception\SSLConnectionException;
// ACHTUNG: tlsAllowInvalidCertificates nur in Entwicklungsumgebungen!
$isDevelopment = getenv('APP_ENV') === 'development';
$uriOptions = ['tls' => true];
if ($isDevelopment) {
// Selbst-signierte Zertifikate in Dev zulassen
$uriOptions['tlsAllowInvalidCertificates'] = true;
trigger_error(
'TLS-Zertifikatsprüfung ist deaktiviert – nur für Entwicklung!',
E_USER_WARNING
);
}
try {
$manager = new Manager('mongodb://localhost:27017', $uriOptions);
$result = $manager->executeCommand('admin', new Command(['ping' => 1]));
echo "MongoDB erreichbar." . PHP_EOL;
} catch (SSLConnectionException $e) {
echo "SSL-Fehler: " . $e->getMessage() . PHP_EOL;
echo "Fehler-Code: " . $e->getCode() . PHP_EOL;
}
// Wichtig · Fallstricke
Sicherheitshinweis: Die Option tlsAllowInvalidCertificates sowie tlsAllowInvalidHostnames deaktivieren wichtige Sicherheitsprüfungen und machen die Verbindung anfällig für Man-in-the-Middle-Angriffe. Sie dürfen ausschließlich in lokalen Entwicklungsumgebungen verwendet werden.
Deprecation: Die ältere SSL-Terminologie (z. B. Option ssl) wurde in neueren Versionen des Treibers durch tls-Präfix-Optionen ersetzt. Ab Treiber-Version 1.6 sollten ausschließlich die tls*-Optionen verwendet werden.
Fehlersuche: Der Fehler-Text in getMessage() enthält in der Regel die OpenSSL-Fehlermeldung, die präzise Auskunft über die eigentliche Ursache gibt (z. B. certificate has expired, self signed certificate, unable to get local issuer certificate).