Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 强制TLS 1.2在Guzzle中_Php_Guzzle - Fatal编程技术网

Php 强制TLS 1.2在Guzzle中

Php 强制TLS 1.2在Guzzle中,php,guzzle,Php,Guzzle,我正在使用GuzzleHttp\Client与API通信。API的操作员正在禁用SSL和1.2之前的TLS,并告诉我我的应用程序仍在使用早期的协议 如何确保Guzzle仅使用最新版本?我不确定我的Guzzle版本是什么(我没有设置),它在源代码中的任何地方都没有指出。直到最近,我还在一家名为WePay的公司工作,该公司处理财务信息,并受到PCI-DSS更改的影响,该更改指出早期版本的TLS不再被认为是安全的,我们需要所有的客户都被推到TLS 1.2。PCI-DSS要求最终被放宽到2018年6月,

我正在使用
GuzzleHttp\Client
与API通信。API的操作员正在禁用SSL和1.2之前的TLS,并告诉我我的应用程序仍在使用早期的协议


如何确保Guzzle仅使用最新版本?我不确定我的Guzzle版本是什么(我没有设置),它在源代码中的任何地方都没有指出。

直到最近,我还在一家名为WePay的公司工作,该公司处理财务信息,并受到PCI-DSS更改的影响,该更改指出早期版本的TLS不再被认为是安全的,我们需要所有的客户都被推到TLS 1.2。PCI-DSS要求最终被放宽到2018年6月,但您仍应确保尽早兼容

我的任务是进行研究,找出我们的客户会受到怎样的影响(例如PHP、Java、Ruby、C#),并记录我发现的一切。我在这里写的是记忆,因为我不再为WePay工作,也无法访问他们的内部合流页面


Guzzle有多种传输方法,包括PHP流,以及PHP的cURL扩展

  • PHP流(如
    fsockopen()
    )不能保证TLS支持,因此实际上,您应该确保您的PHP安装安装了PHP cURL扩展(包括底层的
    libcurl.so
    库, 假设您的web服务器是Linux)

  • 您的基础curl/libcurl必须是7.35.0或更高版本。面向消费者的Linuxes可能有更新的版本。我可以告诉你,CentOS/RHEL/OracleLinux6.8与curl7.19.0(太旧)一起发布,7.3与7.29.0一起发布(也太旧)。我不会花很多时间在Ubuntu/Debian/SLES上,所以你需要自己研究这些选项。对于CentOS/RHEL/OracleLinux,您可以自己编译和打包cURL,也可以依赖repo中的cURL(这取决于来自的包)

    一如既往,永远不要盲目信任第三方依赖关系。要么知道谁编译/打包代码并将其作为资源信任,要么自己编译/打包代码

  • 您还需要一个兼容的PHP版本。支持TLS1.2的PHP的第一个版本是PHP5.5.19和PHP5.6.3。早于5.6.0的PHP版本是EOL,不再接收任何安全更新,因此从一个专业人士到另一个专业人士,我强烈建议您升级早于5.6.0的PHP版本

  • 一些不是PHP本地人的开发人员可能会使用可以工作的代码,但实际上对您不利。在大型遗留代码库中,经常会看到:

  • 老式的流函数(例如,
    fsockopen()
    fopen($remote\u url)
    )。这些通常被认为是不好的™ 对于HTTP(S)请求,并且就TLS支持而言是不可靠的

  • 直接调用
    curl.*
    函数。卷曲是一种非常复杂的野兽,它有许多好的选择和许多坏的选择。一般来说,如果您直接在PHP中使用cURL函数,几乎可以肯定您做得不对™.

  • 最好的方法是对100%的web服务调用使用专用的、编写良好的、经过良好测试的HTTP库,如Guzzle(或Requests,或Buzz)。这些图书馆很好™.

  • 如果您确信:

    • 基础服务器已安装cURL/libcurl 7.35.0或更高版本
    • 您已经安装了足够新的PHP版本(建议至少安装5.6.3)
    • 并且正在对HTTP(S)端点的100%调用使用Guzzle

    那你的身体很好。一旦服务切换到需要TLS 1.2,您的应用程序将自动开始使用TLS 1.2。

    您的客户机可能支持TLS 1.2,并且当这是唯一可用的协议时,就可以了。您不需要强制Guzzle使用最新版本的TLS:服务器无论如何都会删除旧版本。您真正需要问的问题是“我的客户机支持TLS1.2吗?”您不必担心强制客户机使用它:服务器会这样做。