Signatur
Beschreibung
ldap_connect_wallet() ist eine erweiterte Variante von ldap_connect(), die speziell für den Einsatz mit Oracle Wallets konzipiert wurde. Ein Oracle Wallet ist ein verschlüsselter Speicher für Sicherheitszertifikate, private Schlüssel und vertrauenswürdige Zertifizierungsstellen (CAs), der häufig in Oracle-Umgebungen sowie in Verbindung mit dem Oracle Instant Client verwendet wird.
Diese Funktion wird typischerweise eingesetzt, wenn eine LDAP-Verbindung über LDAPS (LDAP über SSL/TLS) aufgebaut werden soll und die erforderlichen Zertifikate in einem Wallet-Verzeichnis vorliegen, anstatt in einer herkömmlichen PEM/DER-Datei. Der $auth_mode-Parameter steuert, ob und wie die Client-Authentifizierung per Zertifikat erfolgt.
Die Funktion ist nur verfügbar, wenn PHP mit Oracle-LDAP-Unterstützung (OCI8 + Oracle Instant Client mit LDAP-Bibliotheken) kompiliert wurde. In Standard-Installationen steht sie daher möglicherweise nicht zur Verfügung.
Nach erfolgreicher Verbindung kann die zurückgegebene LDAP\Connection-Ressource wie bei einer normalen LDAP-Verbindung mit ldap_bind(), ldap_search() usw. weiterverwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $uri Pflicht | string | Die LDAP-URI des Zielservers, z. B. ldaps://ldap.example.com:636. Es sollte eine ldaps://-URI verwendet werden, da das Wallet primär für verschlüsselte Verbindungen gedacht ist. |
|
| $wallet Pflicht | string | Pfad zum Oracle Wallet-Verzeichnis, das die benötigten Zertifikate und Schlüssel enthält, z. B. /etc/oracle/wallet. Das Verzeichnis muss die Dateien cwallet.sso oder ewallet.p12 enthalten. |
|
| $password Pflicht | string | Das Passwort zum Entsperren des Wallets. Bei einem Auto-Login-Wallet (cwallet.sso) kann ein leerer String übergeben werden. |
|
| $auth_mode | int | GSLC_SSL_NO_AUTH | Authentifizierungsmodus für die SSL-Verbindung. Mögliche Werte sind die GSLC_SSL_*-Konstanten: GSLC_SSL_NO_AUTH (kein Client-Zertifikat), GSLC_SSL_ONEWAY_AUTH (Server-Authentifizierung) oder GSLC_SSL_TWOWAY_AUTH (gegenseitige Authentifizierung). |
Rückgabewert
LDAP\Connection-Objekt zurück, das für weitere LDAP-Operationen verwendet werden kann. Im Fehlerfall wird false zurückgegeben, z. B. wenn der Wallet-Pfad ungültig ist, das Passwort nicht stimmt oder die Verbindung zum Server nicht hergestellt werden konnte.Beispiele
Einfache LDAPS-Verbindung mit Auto-Login-Wallet
<?php
// Verbindung mit einem Oracle Auto-Login-Wallet (kein Passwort erforderlich)
$ldap = ldap_connect_wallet(
'ldaps://ldap.example.com:636',
'/etc/oracle/wallet',
'',
GSLC_SSL_ONEWAY_AUTH
);
if ($ldap === false) {
die('Verbindung zum LDAP-Server fehlgeschlagen.');
}
// Anonymes Bind
if (!ldap_bind($ldap)) {
die('LDAP-Bind fehlgeschlagen: ' . ldap_error($ldap));
}
echo 'Verbindung erfolgreich hergestellt.' . PHP_EOL;
// Einfache Suchanfrage
$result = ldap_search($ldap, 'dc=example,dc=com', '(uid=jdoe)');
$entries = ldap_get_entries($ldap, $result);
print_r($entries);
ldap_unbind($ldap);
Gegenseitige TLS-Authentifizierung (Two-Way) mit verschlüsseltem Wallet
<?php
// Beide Seiten authentifizieren sich mit Zertifikaten
$walletPath = '/var/secure/oracle_wallet';
$walletPassword = getenv('LDAP_WALLET_PASS'); // Passwort aus Umgebungsvariable lesen
$ldap = ldap_connect_wallet(
'ldaps://secure-ldap.example.com:636',
$walletPath,
$walletPassword,
GSLC_SSL_TWOWAY_AUTH
);
if ($ldap === false) {
throw new RuntimeException('LDAP Wallet-Verbindung konnte nicht aufgebaut werden.');
}
// Protokollversion setzen
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
// Authentifiziertes Bind mit Dienstkonto
$bindDn = 'cn=service-account,ou=users,dc=example,dc=com';
$bindPass = getenv('LDAP_BIND_PASS');
if (!ldap_bind($ldap, $bindDn, $bindPass)) {
throw new RuntimeException('LDAP-Bind fehlgeschlagen: ' . ldap_error($ldap));
}
echo 'Sichere LDAP-Verbindung mit gegenseitiger Authentifizierung aktiv.' . PHP_EOL;
ldap_unbind($ldap);
// Wichtig · Fallstricke
Plattform- und Build-Abhängigkeit: ldap_connect_wallet() ist nur verfügbar, wenn PHP mit Oracle LDAP-Unterstützung (Oracle Instant Client und entsprechende LDAP-Bibliotheken) gebaut wurde. Auf Standard-Linux/Windows-Paketen ist die Funktion in der Regel nicht vorhanden.
Sicherheit: Speichern Sie Wallet-Passwörter niemals im Quellcode. Verwenden Sie stattdessen Umgebungsvariablen, Secrets-Manager oder gesicherte Konfigurationsdateien mit restriktiven Dateisystemberechtigungen. Bevorzugen Sie nach Möglichkeit Auto-Login-Wallets (cwallet.sso), um Passwörter im Code ganz zu vermeiden.
Fehlerbehandlung: Die Funktion gibt bei Verbindungsfehlern false zurück, wirft aber keine Exception. Prüfen Sie den Rückgabewert immer explizit und verwenden Sie ldap_error() zur Diagnose.
Wallet-Format: Unterstützt werden Oracle-Wallet-Verzeichnisse, die mit dem Oracle Wallet Manager oder orapki erstellt wurden. Standard-PEM/DER-Zertifikate werden mit dieser Funktion nicht direkt genutzt; für diese sollte ldap_connect() in Kombination mit ldap_set_option() und LDAP_OPT_X_TLS_* verwendet werden.