wss认证模式:单向认证、双向认证
环境:php7.4、swoole4
单向认证
客户端校验服务的证书
- 服务端配置
$server = new \swoole_websocket_server("0.0.0.0", 8001, SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL);
$listener = $server->listen("0.0.0.0", 8002, SWOOLE_SOCK_TCP | SWOOLE_SSL);
$listener->set([
'ssl_key_file' => __DIR__ . "\\server8002.crt", // 服务端证书文件
'ssl_cert_file' => __DIR__ . "\\server8002.key.unsecure", // 服务端key文件
]);
- 客户端配置
$url = "wss://127.0.0.1:8002";
$context = stream_context_create([
"ssl" => [
"verify_peer" => true, // 是否需要校验对端证书
"verify_peer_name" => false, // 是否校验peer_name,默认为true,如果为true,需要在客户端和服务端同时设置peer_name参数
"allow_self_signed" => true, // 使用自签名证书时开启
"cafile" => __DIR__ . "\\ca8002.crt", // ca文件
]
]);
$client = new Client($url, [
'context' => $context,
]);
双向认证
- 服务端配置(php swoole)
$server = new \swoole_websocket_server("0.0.0.0", 8001, SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL);
$listener = $server->listen("0.0.0.0", 8002, SWOOLE_SOCK_TCP | SWOOLE_SSL);
$listener->set([
'ssl_verify_peer' => true, // 是否需要校验对端证书
'ssl_allow_self_signed' => true, // 使用自签名证书时开启
'ssl_key_file' => __DIR__ . "\\server8002.crt", // 服务端证书文件
'ssl_cert_file' => __DIR__ . "\\server8002.key.unsecure", // 服务端key文件
'ssl_client_cert_file' => __DIR__ . "\\ca8002.crt", // ca文件,
]);
- 客户端配置(php textalk\websocket)
$url = "wss://127.0.0.1:8000";
$context = stream_context_create([
"ssl" => [
"verify_peer" => true,
"verify_peer_name" => false, // 是否校验peer_name,默认为true,如果为true,需要在客户端和服务端同时设置peer_name参数
"allow_self_signed" => true, // 使用自签名证书时开启
"cafile" => __DIR__ . "\\ca8002.crt", // ca文件
"local_cert" => __DIR__ . "\\client.crt", // 使用ca文件签发的客户端证书文件
"local_pk" => __DIR__ . "\\client.key.unsecure", // 使用ca文件签发的客户端key文件
]
]);
$client = new Client($url, [
'context' => $context,
]);