gpt4 book ai didi

php - 我们如何在 Guzzle 中指定 TLS/SSL 选项?

转载 作者:太空宇宙 更新时间:2023-11-03 12:40:07 24 4
gpt4 key购买 nike

我们开始在 PHP 中使用 Guzzle,其代码调用各种不同的 API,其中一些不支持 TLSv1.2,其中一些需要 TLSv1.2。

强制 Guzzle 使用最新可用协议(protocol)的最佳方法是什么,除非我们知道它不会被识别?

最佳答案

它简单易行。

$client = new Client();
$guzzle = new GuzzleClient('https://www.yourweb.com', array(
'curl.options' => array(
CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1_2
)
));
$client->setClient($guzzle);
...
在 Guzzle 3.0+ 中(根据 @limos 的评论更新):
'curl' => array(
CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1_2
)
可能的 CURLOPT_SSLVERSION可以在官方 cURL 页面找到选项: http://curl.haxx.se/libcurl/c/CURLOPT_SSLVERSION.html
--- 更新(基于评论)---
选择合适的 SSL 协议(protocol)版本不仅仅涉及 CURLOPT_SSLVERSION设置,但更多的 cURL 设置。期望的和重要的结果称为“最大前向保密”。
这不仅适用于 cURL!
您不能使用多个 CURLOPT_SSLVERSION参数(至少,我在 Guzzle 文档中没有找到这样的选项)。当您定义 CURLOPT_SSLVERSION ,cURL 将尝试使用该 SSL 版本——来自 cURL 文档(上面提供的关于 CURLOPT_SSLVERSION 的链接)——“传递一个 long as 参数来控制尝试使用哪个版本的 SSL/TLS。”
您可以定义多个安全密码,但只能定义一个 SSL 版本参数。我不会使用早于 TLS 1.1 的任何东西。任何较早的 SSL 版本都容易受到攻击。 TLS 1.1 版也容易受到攻击,但如果你走那条路,你可能会在 1.2 版中遇到客户端兼容性问题。唯一安全的(目前,直到他们发现一些漏洞)是 TLS 1.2。
如果安全是重中之重,请使用可用的最高 TLS 版本 (TLS1.2)。当存在服务提供商安全责任时,客户端兼容性不是您的问题。
如果安全性很重要,可以查看以下其他 cURL 选项:
  • CURLOPT_SSL_VERIFYHOST
  • CURLOPT_SSL_VERIFYPEER
  • CURLOPT_CAINFO (cURL 在他们的网站上提供 CA CERTs)
  • CURLOPT_SSL_CIPHER_LIST

  • 设置正确 CURLOPT_SSL_VERIFYHOSTCURLOPT_SSL_VERIFYPEER将防止 MITM 攻击。 CURLOPT_CAINFO - 修复错误:35 - 连接中出现未知的 SSL 协议(protocol)错误。提高最大前向保密性。
    这是一个包含 cURL 密码 ( CURLOPT_SSL_CIPHER_LIST ) 的列表,可以提高最大前向保密性:
    'DHE-RSA-AES256-SHA',
    'DHE-DSS-AES256-SHA',
    'AES256-SHA',
    'ADH-AES256-SHA',
    'KRB5-DES-CBC3-SHA',
    'EDH-RSA-DES-CBC3-SHA',
    'EDH-DSS-DES-CBC3-SHA',
    'DHE-RSA-AES128-SHA',
    'DHE-DSS-AES128-SHA',
    'ADH-AES128-SHA',
    'AES128-SHA',
    'KRB5-DES-CBC-SHA',
    'EDH-RSA-DES-CBC-SHA',
    'EDH-DSS-DES-CBC-SHA:DES-CBC-SHA',
    'EXP-KRB5-DES-CBC-SHA',
    'EXP-EDH-RSA-DES-CBC-SHA',
    'EXP-EDH-DSS-DES-CBC-SHA',
    'EXP-DES-CBC-SHA'
    这些密码根据强大的 Qualys SSL Labs 列表 (2014) 进行了检查,并删除了弱密码。随意添加/删除任何密码。
    如果你还想追求多个 CURLOPT_SSLVERSION选项,我会写一个脚本来这样做(我认为这不是一个好习惯或必要)。但是,如果您出于任何原因决定追求该功能,请编写一些代码,尝试使用最强的 SSL 加密,然后在连接失败时回退到下一个版本。
  • 在您做出决定之前,请查看 Qualys SSL 实验室的 projects关于安全。
  • 看看this SSL Labs' article关于完美的前向保密和最佳实践。
  • 使用 SSL Labs' web tool 测试您的客户端(Web 浏览器)是否存在任何漏洞.这将使您了解在您的服务器和应用程序上要查看的内容以及要改进和保护的内容。
  • 使用 Qualys 的 SSL 实验室测试您的网站/网络服务 SSL tool .

  • 漏洞和攻击:Longjam、FREAK、POODLE,任你说!谁知道还有哪些未被发现的攻击或漏洞?是的!它们都会影响您对 SSL/TLS 连接的选择。
    您无法控制客户端(除非您开发它),但您可以控制服务器和服务器-客户端协商。
    无论您构建什么应用程序,您都应该查看最佳实践,根据您的需求和每个案例,您应该决定以下选项:
  • 安全
  • 兼容性
  • 可维护性
  • 复杂性

  • 如果安全性如此重要,请至少使用 TLS1.1。
    也看看密码列表,我不会忽略那部分。
    这也是一个不错的 OWASP guide for creating a secure layer围绕您的应用程序。
    OWASP 和 Qualys SSL Labs 是很好的入门资源。我什至会对 cURL 和 OpenSSL 进行一些研究,以熟悉弱点、可能的安全选项和最佳实践。
    有一些安全点,我没有提到也没有提及,但我们无法涵盖所有​​内容。这只是冰山一角。
    此处未提及的任何内容供您研究。
    祝你好运!
    如果可以的话,我会随时回答任何问题。

    关于php - 我们如何在 Guzzle 中指定 TLS/SSL 选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33134274/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com