ট্রান্সমিশন এনক্রিপশন - ssl/tls
প্রশ্ন:
কীভাবে Workerman এর সাথে যোগাযোগের নিরাপত্তা নিশ্চিত করা যায়?
উত্তর:
একটি সুবিধাজনক পদ্ধতি হল যোগাযোগের প্রোটোকলের উপর একটি স্তর অতিরিক্ত SSL এনক্রিপশন স্তর যুক্ত করা, যেমন wss, https প্রোটোকলগুলি SSL এনক্রিপ্টেড ট্রান্সমিশনের উপর ভিত্তি করে এবং এটি খুব নিরাপদ। Workerman নিজেই SSL সমর্থন করে (Workerman>=3.3.7 প্রয়োজন), কেবল বিষয়বস্তু সেট করা প্রয়োজন SSL সক্রিয় করতে।
অবশ্যই, ডেভেলপাররা কিছু এনক্রিপশন অ্যালগরিদমের উপর ভিত্তি করে তাদের নিজস্ব এনক্রিপশন মেকানিজমও বাস্তবায়ন করতে পারেন।
Workerman SSL চালু করার পদ্ধতি নীচে:
প্রস্তুতি:
-
Workerman সংস্করণ 3.3.7 এর চেয়ে কম নয়
-
PHP- এ openssl এক্সটেনশন ইনস্টল করা আছে
-
একটি সার্টিফিকেট (pem/crt ফাইল এবং key ফাইল) আবেদন করেছেন এবং এটি /etc/nginx/conf.d/ssl এর অধীনে রেখেছেন
কোড:
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// সার্টিফিকেটটি সম্ভবত আবেদন করা সার্টিফিকেট হোক
$context = array(
'ssl' => array(
'local_cert' => '/etc/nginx/conf.d/ssl/server.pem', // এটি crt ফাইলও হতে পারে
'local_pk' => '/etc/nginx/conf.d/ssl/server.key',
'verify_peer' => false,
'allow_self_signed' => true, // যদি এটি স্বাক্ষরিত সার্টিফিকেট হয় তবে এই বিকল্পটি সক্ষম করতে হবে
)
);
// এখানে সেট করা হয়েছে websocket প্রোটোকল, http প্রোটোকল বা অন্যান্য প্রোটোকলও হতে পারে
$worker = new Worker('websocket://0.0.0.0:443', $context);
// ট্রান্সপোর্ট SSL চালু করতে সেট করা হয়েছে
$worker->transport = 'ssl';
$worker->onMessage = function(TcpConnection $con, $msg) {
$con->send('ok');
};
Worker::runAll();
Workerman সার্ভার নাম নির্দেশনা SNI(Server Name Indication) চালু করা যায় যাতে একই IP এবং পোর্টের অধীনে একাধিক সার্টিফিকেট যুক্ত করা যায়।
একাধিক সার্টিফিকেট .pem এবং .key ফাইল একত্রিত করা:
প্রতিটি সার্টিফিকেটের .pem এবং সংশ্লিষ্ট .key ফাইলের বিষয়বস্তু একত্রিত করুন, .key ফাইলের বিষয়বস্তু .pem ফাইলের শেষে যুক্ত করুন। (যদি .pem ফাইলের মধ্যে ইতিমধ্যে প্রাইভেট কী অন্তর্ভুক্ত থাকে তবে ছেড়ে দেওয়া যেতে পারে।)
দয়া করে মনে রাখবেন এটি একক সার্টিফিকেট, সব সার্টিফিকেট এক ফাইলে স্থাপন করা নয়।
যেমন host1.com.pem একত্রিত后的 pem ফাইলের বিষয়বস্তু প্রায় নীচের মতো হবে:
-----BEGIN CERTIFICATE-----
MIIGXTCBA...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFBzCCA...
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAA....
-----END RSA PRIVATE KEY-----
কোড:
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$context = array(
'ssl' => array(
'SNI_enabled' => true, // SNI সক্ষম করুন
'SNI_server_certs' => [ // একাধিক সার্টিফিকেট সেট করুন
'host1.com' => '/path/host1.com.pem', // সার্টিফিকেট ১
'host2.com' => '/path/host2.com.pem', // সার্টিফিকেট ২
],
'local_cert' => '/path/default.com.pem', // ডিফল্ট সার্টিফিকেট
'local_pk' => '/path/default.com.key',
)
);
$worker = new Worker('websocket://0.0.0.0:443', $context);
$worker->transport = 'ssl';
$worker->onMessage = function(TcpConnection $con, $msg) {
$con->send('ok');
};
Worker::runAll();