လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Socket_Accept () + tls tls encrypted data transmission (openssl extension နှင့်ပေါင်းစပ်)

Socket_Accept () + tls tls encrypted data transmission (openssl extension နှင့်ပေါင်းစပ်)

M66 2025-06-01

PHP, Socket_Accept () တွင် client connection များကိုလက်ခံရန်နှင့် TLS encrypted ဂီယာကို အသုံးပြု. Opensssl Extension နှင့်ပေါင်းစပ်ထားသော openssll extension နှင့်ပေါင်းစပ်။ tls encrypted ဂီယာကိုအကောင်အထည်ဖော်ရန်အသုံးပြုသည်။ စာဝှက်ထားတဲ့ TLS-based ဂီယာအောင်မြင်ဖို့ Openssls Extensions တွေနဲ့ပူးပေါင်းဖို့ဒီဆောင်းပါးကဒီဆောင်းပါးကမိတ်ဆက်ပေးလိမ့်မယ်။

1 ။ ပြင်ဆင်မှု

  1. PHP သည် OpenSSL တိုးချဲ့မှုများကိုထောက်ပံ့သည် OpenSSLL module ကို Phpinfo () သို့မဟုတ် command line php -m မှတဆင့်ဖွင့်ရှိမရှိစစ်ဆေးပါ။

  2. လက်မှတ်နှင့်ပုဂ္ဂလိကသော့ချက်ပြင်ဆင်ရန်ပြင်ဆင်ပါ Self-signed လက်မှတ်ရေးထိုးထားသောလက်မှတ်, ဥပမာအားဖြင့် OpenSSL command ကိုသုံးနိုင်သည်။

     openssl req -newkey rsa:2048 -nodes -keyout server.key -x509 -days 365 -out server.crt
    
  3. Socket Server တစ်ခုဖန်တီးပါ Basic TCP server တစ်ခုတည်ဆောက်ရန် Socket_create () နှင့်ဆက်စပ်သောလုပ်ဆောင်ချက်များကိုသုံးပါ။

2 ။ နမူနာကုဒ်ရှင်းပြချက်

Socket_Acception ကို အသုံးပြု. client connection () ကိုလက်ခံပြီးနောက်အောက်ပါဥပမာသည် TLS လက်ဆွဲနှုတ်ဆက်ခြင်းနှင့်စာဝှက်ထားသောဆက်သွယ်ရေးကိုပြသသည်။

 <?php

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

// ဖန်တီး TCP socket
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($sock, $host, $port);
socket_listen($sock);

echo "ဆာဗာစတင်ခြင်း,စောင့်ရေှာက် {$host}:{$port}\n";

// Loading လက်မှတ်နှင့်ပုဂ္ဂလိကသော့ချက်လမ်းကြောင်း
$certFile = '/path/to/server.crt';
$keyFile = '/path/to/server.key';

// client connection ကိုစောင့်ဆိုင်း
while (true) {
    $clientSock = socket_accept($sock);
    if ($clientSock === false) {
        echo "ဆက်သွယ်မှုကိုလက်ခံရန်ပျက်ကွက်ခဲ့သည်\n";
        continue;
    }
    
    // ဖန်တီး基于 socket ၏ stream ပစ္စည်းအင်းအား
    $clientStream = socket_export_stream($clientSock);
    
    // ဖန်တီး SSL အစီအစဉ်
    $context = stream_context_create([
        'ssl' => [
            'local_cert' => $certFile,
            'local_pk' => $keyFile,
            'allow_self_signed' => true,
            'verify_peer' => false,
        ]
    ]);
    
    // 将普通၏ TCP ဆက်သွယ်မှုအဆင့်မြှင့် TLS encrypted ဆက်သွယ်မှု
    $sslStream = stream_socket_enable_crypto($clientStream, true, STREAM_CRYPTO_METHOD_TLS_SERVER);
    
    if (!$sslStream) {
        echo "TLS လက်ဆွဲနှုတ်ဆက်ခြင်းမအောင်မြင်ပါ\n";
        fclose($clientStream);
        socket_close($clientSock);
        continue;
    }
    
    // client data ကိုဖတ်ပါ
    $data = fread($clientStream, 8192);
    echo "ဒေတာကိုလက်ခံရရှိခဲ့သည်:$data\n";
    
    // တုံ့ပြန်မှုတစ်ခုပို့ပါ
    fwrite($clientStream, "Hello from m66.net TLS server!\n");
    
    // ဆက်သွယ်မှုကိုပိတ်ပါ
    fclose($clientStream);
    socket_close($clientSock);
}

socket_close($sock);

3 ။ အဓိကအချက်များဖော်ပြချက်

  1. Socket_export_stream ()
    ဤလုပ်ဆောင်မှုသည် Socket Reasensions ကို PHP Stream Assemsets သို့ပြောင်းလဲရန် PHP Stream အရင်းအမြစ်များသို့ပြောင်းလဲနိုင်သည်။

  2. steam_socket_enable_crypto ()
    tls လက်ဆွဲနှုတ်ဆက်ခြင်းနှင့် encryption startup များအတွက်တာဝန်ရှိသည်။ တတိယ parameter သည် server mode ကိုရွေးချယ်သည် ( stream_crypto_method_tls_server ) ကိုရွေးချယ်ပြီး encryption ကိုဖွင့်ပေးသည်။

  3. လက်မှတ် configuration ကို
    stream_context_create အတွက်လက်မှတ်နှင့်ပုဂ္ဂလိကသော့ချက်လမ်းကြောင်းကိုဖြတ်သန်းပါ။ ဥပမာတွင် Allow_eler_signed နှင့် Verify_peer Settings သည်စမ်းသပ်မှုပတ် 0 န်းကျင်အတွက်သင့်လျော်ပြီးတရားဝင်ပတ်ဝန်းကျင်ကိုအတည်ပြုသင့်သည်။

  4. ဒေတာထုတ်လွှင့် <br> <br> နောက်ဆက်တွဲအချက်အလက်များဖတ်ရှုခြင်းနှင့်အရေးအသားကိုစာဝှက်ထားတဲ့စီးဆင်းမှုကိုဖြတ်ပြီးစာဝှက်ထားတဲ့စီးဆင်းမှုကိုဖြတ်ပြီးစာဝှက်နဲ့စာဝှက်ဖြည်ခြင်းကိုအလိုအလျောက်ပြီးစီးခဲ့သည်။


4 ။ အကျဉ်းချုပ်

Socket_Accept () နှင့် Openssll extension မှတဆင့် PHP သည်အချက်အလက်များလုံခြုံမှုရှိစေရန် PHP သည် TLS encrypted ဂီယာကိုပြောင်းလဲစေနိုင်သည်။ သော့သည် Socket encry_Crypto () ကို stream_socket_enable_crypto () ကိုသုံးပါ။ conse encrypted communisted service ကိုအလွယ်တကူတည်ဆောက်ရန်အတွက် stream_socket_cryption_crypto () ကိုအသုံးပြုပါ။