關於 `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 握手,並且在客戶端發送「Client HELLO」之後,`stream_socket_enable_crypto` 會發送「Server HELLO」。
因此,在接受客戶端連線後,使用 `STREAM_CRYPTO_METHOD_*_CLIENT` 來請求數據,使用 `STREAM_CRYPTO_METHOD_*_SERVER` 來提供數據。