售前咨詢(xún):400-100-2938
售前咨詢(xún):400-100-2938
售前咨詢(xún):400-100-2938
在一般使用中,我們在Web應用中,將SSL證書(shū)用于HTTP協(xié)議或Websocket的訪(fǎng)問(wèn)上。但是TCP服務(wù)SSL使用的不多,本文介紹如何使用高防IP實(shí)現基于SSL的TCP連接,更好地對請求進(jìn)行加密
名詞介紹
單向認證:服務(wù)端不驗證客戶(hù)端證書(shū),只要TCP client使用TCP SSL模式連接即可。
雙向認證:服務(wù)端驗證客戶(hù)端的證書(shū),服務(wù)端需要開(kāi)啟ssl_verify_peer,同時(shí)ssl_client_cert_file添加簽發(fā)客戶(hù)端證書(shū)的根證書(shū)。
在高防IP的非網(wǎng)站防護中,添加TCP的轉發(fā)端口、源端口和源IP。
在源站服務(wù)器中,建立TCP SSL server。
以PHP SWOOLE實(shí)現單向認證為例:
<?php
$server = new Swoole\Server('0.0.0.0', 8082,SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL);
$server->set(array(
'ssl_cert_file'=>'/data/swoole/cert/ssl.pem',
'ssl_key_file'=>'/data/swoole/cert/ssl.key',
));
//監聽(tīng)連接進(jìn)入事件
$server->on('Connect', function ($server, $fd) {
echo "Client: Connect.\n";
});
//監聽(tīng)數據接收事件
$server->on('Receive', function ($server, $fd, $from_id, $data) {
$fd_info = $server->getClientInfo($fd);
$server->send($fd, "Server: " . $data);
});
//監聽(tīng)連接關(guān)閉事件
$server->on('Close', function ($server, $fd) {
echo "Client: Close.\n";
});
//啟動(dòng)服務(wù)器
$server->start();
?>
以PHP SWOOLE實(shí)現雙向認證為例:
<?php
$server = new Swoole\Server('0.0.0.0', 8082,SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL);
// $server = new Swoole\Server('0.0.0.0', 8082);
$server->set(array(
'ssl_cert_file'=>'/data/swoole/cert/ssl.pem',//服務(wù)端證書(shū)
'ssl_key_file'=>'/data/swoole/cert/ssl.key',
'ssl_verify_peer' => true,
'ssl_allow_self_signed' => true,//允許使用自簽證書(shū)
'ssl_client_cert_file' =>'/data/swoole/cert/self/ca.crt',//簽發(fā)客戶(hù)端證書(shū)的根證書(shū)
));
//監聽(tīng)連接進(jìn)入事件
$server->on('Connect', function ($server, $fd) {
echo "Client: Connect.\n";
});
//監聽(tīng)數據接收事件
$server->on('Receive', function ($server, $fd, $from_id, $data) {
$fd_info = $server->getClientInfo($fd);
$server->send($fd, "Server: " . $data);
});
//監聽(tīng)連接關(guān)閉事件
$server->on('Close', function ($server, $fd) {
echo "Client: Close.\n";
});
//啟動(dòng)服務(wù)器
$server->start();
?>
建立SSL類(lèi)型的TCP CLIENT。
以PHP SWOOLE實(shí)現單向認證為例:
<?php
$client = new Swoole\Client(SWOOLE_SOCK_TCP| SWOOLE_SSL);
if (!$client->connect('x.x.x.x', 8082, -1)) {
exit("connect failed. Error: {$client->errCode}\n");
}
for($i = 0;$i<=10000;$i++){
$client->send("hello world\n");
echo $client->recv();
sleep(2);
}
$client->close();
以PHP SWOOLE實(shí)現雙向認證為例:
<?php
$client = new Swoole\Client(SWOOLE_SOCK_TCP| SWOOLE_SSL);
$client->set(array(
'ssl_cert_file'=>'/data/swoole/cert/self/client.crt',//客戶(hù)端證書(shū)
'ssl_key_file'=>'/data/swoole/cert/self/client.key',
));
if (!$client->connect('123.129.219.113', 8082, -1)) {
exit("connect failed. Error: {$client->errCode}\n");
}
for($i = 0;$i<=10000;$i++){
$client->send("hello world\n");
echo $client->recv();
sleep(2);
}
$client->close();
也可以使用openssl庫來(lái)作為client。
openssl s_client -connect IP:444
Copyright ? Yisu Cloud Ltd. All Rights Reserved. 2018 版權所有
廣州億速云計算有限公司 粵ICP備17096448號-1
粵公網(wǎng)安備 44010402001142號 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證編號:B1-20181529