让您全面了解并上手亿速云产品
常见入门级使用教程
对外 API 开发文档中心
您历史提交的工单
您的每一条意见,我们都严谨处理
您的每一条建议,我们都认真对待
在一般使用中,我们在Web应用中,将SSL证书用于HTTP协议或Websocket的访问上。但是TCP服务SSL使用的不多,本文介绍如何使用高防IP实现基于SSL的TCP连接,更好地对请求进行加密
名词介绍
单向认证:服务端不验证客户端证书,只要TCP client使用TCP SSL模式连接即可。
双向认证:服务端验证客户端的证书,服务端需要开启ssl_verify_peer,同时ssl_client_cert_file添加签发客户端证书的根证书。
在高防IP的非网站防护中,添加TCP的转发端口、源端口和源IP。
在源站服务器中,建立TCP SSL server。
以PHP SWOOLE实现单向认证为例:
<?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',
));
//监听连接进入事件
$server->on('Connect', function ($server, $fd) {
echo "Client: Connect.\n";
});
//监听数据接收事件
$server->on('Receive', function ($server, $fd, $from_id, $data) {
$fd_info = $server->getClientInfo($fd);
$server->send($fd, "Server: " . $data);
});
//监听连接关闭事件
$server->on('Close', function ($server, $fd) {
echo "Client: Close.\n";
});
//启动服务器
$server->start();
?>
以PHP SWOOLE实现双向认证为例:
<?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',//服务端证书
'ssl_key_file'=>'/data/swoole/cert/ssl.key',
'ssl_verify_peer' => true,
'ssl_allow_self_signed' => true,//允许使用自签证书
'ssl_client_cert_file' =>'/data/swoole/cert/self/ca.crt',//签发客户端证书的根证书
));
//监听连接进入事件
$server->on('Connect', function ($server, $fd) {
echo "Client: Connect.\n";
});
//监听数据接收事件
$server->on('Receive', function ($server, $fd, $from_id, $data) {
$fd_info = $server->getClientInfo($fd);
$server->send($fd, "Server: " . $data);
});
//监听连接关闭事件
$server->on('Close', function ($server, $fd) {
echo "Client: Close.\n";
});
//启动服务器
$server->start();
?>
建立SSL类型的TCP CLIENT。
以PHP SWOOLE实现单向认证为例:
<?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实现双向认证为例:
<?php
$client = new Swoole\Client(SWOOLE_SOCK_TCP| SWOOLE_SSL);
$client->set(array(
'ssl_cert_file'=>'/data/swoole/cert/self/client.crt',//客户端证书
'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库来作为client。
openssl s_client -connect IP:444
Copyright © Yisu Cloud Ltd. All Rights Reserved. 2018 版权所有
广州亿速云计算有限公司 粤ICP备17096448号-1 粤公网安备 44010402001142号 增值电信业务经营许可证编号:B1-20181529