【发布时间】:2019-12-09 08:56:20
【问题描述】:
目标是为 TLS v1.2 连接编写 PHP 代码测试。获得成功的答案不是问题,但我无法通过在 PHP 中使用较旧的 TLS 版本来产生失败。显然需要测试失败来证明代码的正确性(在一定程度上)。
在命令行我可以想出这个,给出一个明确的区别:
$ curl -X POST https://api.paypal.com/v1/oauth2/token
{"name":"AUTHENTICATION_FAILURE", [...]
$ curl --tls-max 1.1 -X POST https://api.paypal.com/v1/oauth2/token
curl: (35) error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
在 PHP 中我试过这个...
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.paypal.com/v1/oauth2/token');
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
// $response: '{"name":"AUTHENTICATION_FAILURE", [...]
... 这意味着成功的 TLS v1.2 连接,正如在上面的 CLI 示例中所见,尽管请求了 TLS v1.1。与请求 CURL_SSLVERSION_TLSv1_2 时的结果相同。
这是带有 cURL 7.64.0 的 PHP 7.3.7,我希望我可以在不重新编译 PHP 的情况下摆脱对 TLS v1.2 的支持。
【问题讨论】: