关于 `crypto_method` 的区别的信息
有 `STREAM_CRYPTO_METHOD_*_CLIENT` 和 `STREAM_CRYPTO_METHOD_*_SERVER`
`STREAM_CRYPTO_METHOD_*_CLIENT` 用于客户端,例如
```php
<?php
$client = stream_socket_client("tcp://example.com:443", $errno, $errstr);
stream_socket_enable_crypto($client, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
?>
```
此代码执行 TLS 握手,并且 `stream_socket_enable_crypto` 发送 `Client HELLO`
`STREAM_CRYPTO_METHOD_*_SERVER` 用于服务器,例如
<?php
$server = stream_socket_server("tcp://example.com:443", $errno, $errstr, STREAM_SERVER_BIND | STREAM_SERVER_LISTEN);
stream_context_set_option($server, ["ssl" => [
"local_cert" => __DIR__."/https.crt",
"local_pk" => __DIR__."/https.key",
]]);
$client = stream_socket_accept($server);
stream_socket_enable_crypto($client, true, STREAM_CRYPTO_METHOD_TLS_SERVER);
?>
这段代码执行了 TLS 握手,`stream_socket_enable_crypto` 在客户端发送 `Client HELLO` 后发送 `Server HELLO`。
因此,在接受客户端连接后,使用 `STREAM_CRYPTO_METHOD_*_CLIENT` 请求数据,使用 `STREAM_CRYPTO_METHOD_*_SERVER` 提供数据。