Signatur
Beschreibung
EventSslContext ist Teil der Event-Erweiterung und kapselt eine OpenSSL-SSL_CTX-Struktur. Sie wird verwendet, um SSL/TLS-Parameter wie Zertifikate, private Schlüssel, CA-Dateien und Verschlüsselungsoptionen für sichere Netzwerkverbindungen zentral zu konfigurieren.
Typischerweise wird ein EventSslContext-Objekt erstellt, bevor ein EventBufferEvent mit SSL-Unterstützung aufgebaut wird. Dabei gibt die Methode bzw. der Konstruktor an, ob es sich um einen Client- oder Server-Kontext handelt (entspricht EventSslContext::CLIENT_METHOD oder EventSslContext::SERVER_METHOD).
Die Konfiguration erfolgt über ein assoziatives Array mit Schlüsseln wie EventSslContext::OPT_LOCAL_CERT, EventSslContext::OPT_LOCAL_PK, EventSslContext::OPT_PASSPHRASE, EventSslContext::OPT_CA_FILE, EventSslContext::OPT_VERIFY_PEER usw. Die Klasse ist eng mit EventBufferEvent::sslSocket() und EventBufferEvent::sslFilter() verknüpft.
Da SSL-Fehlkonfigurationen schwerwiegende Sicherheitslücken erzeugen können, sollte insbesondere auf korrekte Zertifikatsprüfung (OPT_VERIFY_PEER) und den Einsatz aktueller Protokollversionen geachtet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $method Pflicht | int | Die SSL-Methode: eine der Klassenkonstanten wie EventSslContext::TLS_CLIENT_METHOD, EventSslContext::TLS_SERVER_METHOD, EventSslContext::SSLv23_CLIENT_METHOD etc. Legt fest, ob der Kontext als Client oder Server agiert. |
|
| $options Pflicht | array | Assoziatives Array mit SSL-Optionen. Gültige Schlüssel sind Klassenkonstanten wie EventSslContext::OPT_LOCAL_CERT (Pfad zum Zertifikat), EventSslContext::OPT_LOCAL_PK (privater Schlüssel), EventSslContext::OPT_PASSPHRASE, EventSslContext::OPT_CA_FILE, EventSslContext::OPT_CA_PATH, EventSslContext::OPT_VERIFY_PEER, EventSslContext::OPT_ALLOW_SELF_SIGNED und EventSslContext::OPT_VERIFY_DEPTH. |
Beispiele
SSL-Server-Kontext erstellen
<?php
// SSL-Server-Kontext mit Zertifikat und privatem Schlüssel
$ctx = new EventSslContext(
EventSslContext::TLS_SERVER_METHOD,
[
EventSslContext::OPT_LOCAL_CERT => '/etc/ssl/certs/server.crt',
EventSslContext::OPT_LOCAL_PK => '/etc/ssl/private/server.key',
EventSslContext::OPT_PASSPHRASE => 'geheimes-passwort',
EventSslContext::OPT_VERIFY_PEER => false, // Für Server meist false
EventSslContext::OPT_ALLOW_SELF_SIGNED => false,
]
);
$base = new EventBase();
$socket = stream_socket_server('tcp://0.0.0.0:8443');
$bev = EventBufferEvent::sslSocket(
$base,
$socket,
$ctx,
EventBufferEvent::SSL_ACCEPTING,
EventBufferEvent::OPT_CLOSE_ON_FREE
);
echo "SSL-Server-Kontext erstellt.\n";
SSL-Client-Kontext mit CA-Verifikation
<?php
// SSL-Client-Kontext, der das Server-Zertifikat verifiziert
$ctx = new EventSslContext(
EventSslContext::TLS_CLIENT_METHOD,
[
EventSslContext::OPT_CA_FILE => '/etc/ssl/certs/ca-certificates.crt',
EventSslContext::OPT_VERIFY_PEER => true,
EventSslContext::OPT_VERIFY_DEPTH => 5,
EventSslContext::OPT_ALLOW_SELF_SIGNED => false,
]
);
$base = new EventBase();
$socket = stream_socket_client('tcp://example.com:443');
$bev = EventBufferEvent::sslSocket(
$base,
$socket,
$ctx,
EventBufferEvent::SSL_CONNECTING,
EventBufferEvent::OPT_CLOSE_ON_FREE
);
echo "SSL-Client-Kontext mit Zertifikatsverifikation erstellt.\n";
// Wichtig · Fallstricke
Sicherheitshinweise:
- Setze
EventSslContext::OPT_VERIFY_PEERauftruefür Client-Verbindungen, um Man-in-the-Middle-Angriffe zu verhindern. - Verwende niemals
OPT_ALLOW_SELF_SIGNED => truein Produktionsumgebungen, da selbstsignierte Zertifikate keine Vertrauenskette bieten. - Nutze aktuelle Methoden wie
TLS_CLIENT_METHOD/TLS_SERVER_METHODstatt veralteter Methoden wieSSLv2_METHODoderSSLv3_METHOD, die bekannte Schwachstellen aufweisen. - Die Klasse setzt voraus, dass PHP mit der Event-Erweiterung (PECL) sowie OpenSSL-Unterstützung kompiliert wurde.
- Fehler bei der Kontexterstellung (z. B. ungültige Zertifikatspfade) führen zu Ausnahmen oder Warnungen – immer Pfade und Berechtigungen prüfen.