Start · Sprachen · PHP · Referenz · MongoDB\Driver\Exception\SSLConnectionException

MongoDB\Driver\Exception\SSLConnectionException

Klasse

Wird ausgelöst, wenn beim Aufbau einer SSL/TLS-Verbindung zum MongoDB-Server ein Fehler auftritt.

seit PHP 1.0.0 Kategorie: error

Signatur

class MongoDB\Driver\Exception\SSLConnectionException extends MongoDB\Driver\Exception\ConnectionException implements MongoDB\Driver\Exception\Exception

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;
}
SSL-Verbindungsfehler: SSL handshake failed: certificate verify failed Bitte Zertifikatskonfiguration überprüfen.

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;
}
MongoDB erreichbar.

// 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).