Start · Sprachen · PHP · Referenz · EventSslContext

EventSslContext

Klasse

Repräsentiert die OpenSSL-<code>SSL_CTX</code>-Struktur und konfiguriert den SSL/TLS-Kontext für Event-basierte Netzwerkoperationen.

seit PHP 1.2.6 Kategorie: io

Signatur

class EventSslContext

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-Server-Kontext erstellt.

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";
SSL-Client-Kontext mit Zertifikatsverifikation erstellt.

// Wichtig · Fallstricke

Sicherheitshinweise:

  • Setze EventSslContext::OPT_VERIFY_PEER auf true für Client-Verbindungen, um Man-in-the-Middle-Angriffe zu verhindern.
  • Verwende niemals OPT_ALLOW_SELF_SIGNED => true in Produktionsumgebungen, da selbstsignierte Zertifikate keine Vertrauenskette bieten.
  • Nutze aktuelle Methoden wie TLS_CLIENT_METHOD / TLS_SERVER_METHOD statt veralteter Methoden wie SSLv2_METHOD oder SSLv3_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.