Position actuelle: Accueil> Derniers articles> Comment utiliser socket_accept () pour implémenter une communication cryptée avec TLS / SSL

Comment utiliser socket_accept () pour implémenter une communication cryptée avec TLS / SSL

M66 2025-05-31

Dans les applications de réseau modernes, la communication sécurisée est particulièrement importante. PHP fournit une riche interface de programmation réseau, combinant les fonctions de socket et les protocoles de chiffrement TLS / SSL pour obtenir une communication cryptée sécurisée. Cet article se concentrera sur la façon d'utiliser la fonction Socket_Accept () de PHP pour obtenir des connexions sécurisées avec TLS / SSL.

1. Examen des concepts de base

  • socket_accept () : Il s'agit d'une fonction importante de la programmation de socket dans PHP, qui est utilisée pour accepter les demandes de connexion du client et renvoyer une nouvelle ressource de socket pour la communication ultérieure.

  • TLS / SSL : Sécurité de la couche de transport, utilisé pour crypter le contenu de communication et assurer la sécurité de la transmission des données.

2. Processus de base de l'utilisation de php socket_accept ()

Du côté du serveur, les prises sont généralement créées en premier, les adresses de liaison et les ports sont tenus d'écouter les demandes de connexion. Après avoir reçu la demande du client, appelez socket_accept () pour accepter la connexion, puis les données peuvent être lues ou écrites.

 $server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($server, '0.0.0.0', 4433);
socket_listen($server);

$client = socket_accept($server);
$data = socket_read($client, 2048);
socket_write($client, "Hello Client!");
socket_close($client);
socket_close($server);

L'exemple de code ci-dessus est une communication simple non cryptée.

3. Introduire TLS / SSL sur la base de socket_accept ()

La fonction Socket_ * de PHP ne prend pas directement en charge SSL / TLS, mais peut être utilisée pour implémenter une communication sécurisée avec une extension OpenSSL.

3.1 Allumez TLS via Stream_Socket_enable_Crypto ()

Après avoir reçu la ressource de socket connectée au client, utilisez Stream_Socket_enable_Crypto () pour activer le cryptage.

3.2 Exemple d'implémentation de code

 // créerTCP socket
$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($server, '0.0.0.0', 4433);
socket_listen($server);

// Acceptez les connexions du client
$clientSocket = socket_accept($server);
if ($clientSocket === false) {
    die("Failed to accept socket connection\n");
}

// Volonté socket Transformer les ressources en stream ressource,Facile à utiliser stream_socket_enable_crypto()
$clientStream = socket_export_stream($clientSocket);
if ($clientStream === false) {
    die("Failed to convert socket to stream\n");
}

// installation SSL Contexte,Contient un certificat et une clé privée
$contextOptions = [
    'ssl' => [
        'local_cert' => '/path/to/certificate.pem',  // Fichier de certificat de serveur
        'local_pk'   => '/path/to/private_key.pem',  // Fichier de clés privés
        'allow_self_signed' => true,
        'verify_peer' => false,
    ]
];
$context = stream_context_create($contextOptions);

// démarrer TLS cryptage
if (!stream_socket_enable_crypto($clientStream, true, STREAM_CRYPTO_METHOD_TLS_SERVER, $context)) {
    die("Failed to enable TLS encryption\n");
}

// Lire les données du client
$data = fread($clientStream, 2048);
echo "Received (decrypted): " . $data . "\n";

// 向客户端发送cryptage数据
fwrite($clientStream, "Welcome to secure PHP server!");

// Fermer la connexion
fclose($clientStream);
socket_close($server);

4. Description des points clés

  • Préparation du certificat : les fichiers locaux et locaux et locaux doivent être des certificats et des clés privés valides, et les certificats doivent être délivrés par un CA de confiance, ou auto-signé (comme indiqué dans l'exemple).

  • socket_export_stream () : convertir une ressource de socket de bas niveau en une ressource qui peut être exploitée par streaming, puis stream_socket_enable_crypto () peut être utilisée.

  • Gestion des erreurs : l'environnement de production doit faire du bon travail dans la capture et la journalisation des erreurs.

5. Scénarios d'application pratiques

  • Service de chat sécurisé : le contenu de communication entre le client et le serveur doit être chiffré pour empêcher les données d'être écoutées ou falsifiées.

  • Transmission de données privées : les services internes d'entreprise nécessitent un chiffrement pour la transmission de données sensibles.

  • Mise à niveau de sécurité du protocole personnalisé : le protocole personnalisé basé sur le socket peut être implémenté via TLS pour améliorer la sécurité.

6. Résumé

Après avoir reçu la connexion avec PHP socket_accept () , le Stream_Socket_enable_Crypto () qui est étendu par OpenSSL peut être facilement implémenté une communication cryptée sécurisée basée sur TLS / SSL. Bien que cela soit difficile pour les débutants, une fois maîtrisé, il peut efficacement améliorer la sécurité des applications réseau.