Aktueller Standort: Startseite> Neueste Artikel> Socket_accept () + TLS implementiert verschlüsselte Datenübertragung (kombiniert mit OpenSSL -Erweiterung)

Socket_accept () + TLS implementiert verschlüsselte Datenübertragung (kombiniert mit OpenSSL -Erweiterung)

M66 2025-06-01

In PHP wird Socket_accept () verwendet, um Client -Verbindungen zu akzeptieren und TLS -Verschlüsselung in Kombination mit OpenSSL -Erweiterung zu implementieren. Dies ist eine gemeinsame Methode zur Verbesserung der Sicherheit der Netzwerkkommunikation. In diesem Artikel wird vorgestellt, wie die native Socket-Schnittstelle verwendet wird, um mit OpenSSL-Erweiterungen zusammenzuarbeiten, um verschlüsselte TLS-basierte Übertragung zu erreichen.

1. Vorbereitung

  1. Stellen Sie sicher, dass PHP -Unterstützung OpenSL -Erweiterungen <br> unterstützt Überprüfen Sie, ob das OpenSSL -Modul über phpinfo () oder die Befehlszeile php -m aktiviert ist.

  2. Bereiten Sie das Zertifikat und den privaten Schlüssel vor <br> Sie können den Befehl openensl verwenden, um ein selbstsigniertes Zertifikat zu generieren, Beispiel:

     openssl req -newkey rsa:2048 -nodes -keyout server.key -x509 -days 365 -out server.crt
    
  3. Erstellen Sie einen Socket -Server <br> Verwenden Sie Socket_Create () und verwandte Funktionen, um einen grundlegenden TCP -Server zu erstellen.

2. Beispielcode Erläuterung

Das folgende Beispiel zeigt, wie TLS -Handshake und verschlüsselte Kommunikation durch OpenSSL -Erweiterung nach der Annahme einer Clientverbindung mit socket_accept () durchgeführt werden.

 <?php

$host = '0.0.0.0';
$port = 8443;

// erstellen TCP socket
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($sock, $host, $port);
socket_listen($sock);

echo "Serverstart,Monitor {$host}:{$port}\n";

// Laden des Zertifikats und des privaten Schlüsselpfads
$certFile = '/path/to/server.crt';
$keyFile = '/path/to/server.key';

// Warten auf die Kundenverbindung
while (true) {
    $clientSock = socket_accept($sock);
    if ($clientSock === false) {
        echo "Die Verbindung nicht akzeptiert\n";
        continue;
    }
    
    // erstellen基于 socket von stream Ressource
    $clientStream = socket_export_stream($clientSock);
    
    // erstellen SSL Kontext
    $context = stream_context_create([
        'ssl' => [
            'local_cert' => $certFile,
            'local_pk' => $keyFile,
            'allow_self_signed' => true,
            'verify_peer' => false,
        ]
    ]);
    
    // 将普通von TCP Verbindungs ​​-Upgrade auf TLS Verschlüsselte Verbindung
    $sslStream = stream_socket_enable_crypto($clientStream, true, STREAM_CRYPTO_METHOD_TLS_SERVER);
    
    if (!$sslStream) {
        echo "TLS Handschlag fehlgeschlagen\n";
        fclose($clientStream);
        socket_close($clientSock);
        continue;
    }
    
    // Clientdaten lesen
    $data = fread($clientStream, 8192);
    echo "Daten empfangen:$data\n";
    
    // Senden Sie eine Antwort
    fwrite($clientStream, "Hello from m66.net TLS server!\n");
    
    // Schließen Sie die Verbindung
    fclose($clientStream);
    socket_close($clientSock);
}

socket_close($sock);

3.. Schlüsselpunkte Beschreibung

  1. socket_export_stream ()
    Diese Funktion wandelt Socket -Ressourcen in PHP -Stream -Ressourcen um, sodass Sie Stream_Socket_Enable_Crypto () verwenden können, um TLS -Upgrade durchzuführen.

  2. stream_socket_enable_crypto ()
    Verantwortlich für TLS -Handshake und Verschlüsselungsstart. Der dritte Parameter wählt den Servermodus ( stream_crypto_method_tls_server ) aus und ermöglicht die Verschlüsselung.

  3. Zertifikatkonfiguration
    Übergeben Sie das Zertifikat und den privaten Schlüsselpfad in stream_context_create () . Im Beispiel sind die Einstellungen von Degly_self_signed und verify_peer für die Testumgebung geeignet, und die formale Umgebung sollte validiert werden.

  4. Datenübertragung <br> Die nachfolgenden Daten lesen und schreiben werden über den verschlüsselten Strom durchgeführt, und die Verschlüsselung und Entschlüsselung werden automatisch abgeschlossen.


4. Zusammenfassung

Durch Socket_accept () und OpenSSL -Erweiterung kann PHP die verschlüsselte Übertragung von TLS flexibel implementieren, um die Datensicherheit zu gewährleisten. Der Schlüssel besteht darin, Socket -Ressourcen in Stream umzuwandeln, Stream_Socket_Enable_Crypto () für Verschlüsselung und Upgrade zu verwenden und sie mit einer effektiven Zertifikatverwaltung zu kombinieren, um einen sicheren verschlüsselten Kommunikationsdienst auf einfache Weise zu erstellen.