在我的 PHP 应用程序中,我使用 PHP 的 CURL 和 openssl,通过 SOAP 进行连接和交谈。 到目前为止,远程服务器支持 SSL 和 TLS,但由于“ Poodle ”错误,管理员决定禁用 SSL 并仅使用 TLS。 支持 SSL 直到 1 月底。
我通过添加更改了我的代码:
curl_setopt($objCurl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
理论上应该强制 curl 使用 TLSv1.2。
但这是理论上的——我需要验证它是否真的使用 TLS——有什么方法可以做到吗? 有一个方法叫做 curl_getinfo(),但是它返回的信息对我没有用:
[url] => https://www.example.com/soap/MessagingPort
[content_type] => text/xml;charset=utf-8
[http_code] => 200
[header_size] => 293
[request_size] => 882
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0.164487
[namelookup_time] => 3.4E-5
[connect_time] => 3.4E-5
[pretransfer_time] => 0.000122
[size_upload] => 604
[size_download] => 178
[speed_download] => 1082
[speed_upload] => 3672
[download_content_length] => 178
[upload_content_length] => 604
[starttransfer_time] => 0.164477
[redirect_time] => 0
提前致谢
最佳答案
简答
使用 curl 向 https://www.howsmyssl.com/ 发出请求
<?php
$ch = curl_init('https://www.howsmyssl.com/a/check');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);
$json = json_decode($data);
echo $json->tls_version;
应该输出用于连接的 TLS 版本。
深入挖掘
Curl 依赖于底层的 OpenSSL(或 NSS)库来进行安全连接的协商。所以我相信这里要问的正确问题是 OpenSSL 库有什么能力。如果它可以处理 TLS 连接,那么 curl 可以处理 TLS 连接。
那么如何弄清楚 openssl(或 NSS)库的功能呢?
<?php
$curl_info = curl_version();
echo $curl_info['ssl_version'];
这将倾倒出类似的东西
OpenSSL/1.0.1k
然后您可以查看该版本的发行说明,看看它是否包含 TLS 支持。
OpenSSL 发行说明 - https://www.openssl.org/news/changelog.html
NSS 发行说明 - https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/NSS_Releases
剧透警告
- openssl 在 OpenSSL 1.0.1 中包含对 TLS v1.1 和 TLS v1.2 的支持 [2012 年 3 月 14 日]
- NSS 在 3.14 中包含对 TLS v1.1 的支持
- 包括 NSS 在 3.15 中支持 TLS v1.2
关于php - 验证 curl 是否使用 TLS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27904854/