PHP流包装器和带证书的Windows证书存储 - php

设置/环境:

在我们的PHP应用程序中,有时我们需要从PHP向其他服务器发出HTTPS请求。有问题的设置如下:

我们正在使用PHP流包装器执行HTTP请求(使用Guzzle HTTP)。我们之所以这样做,是因为流包装器支持使用Windows Certficiate Store进行证书验证。
该服务器在Windows上运行。
我们对HTTPS请求使用代理。
防火墙配置为允许

访问我们正在处理请求的服务器。
访问与使用的证书相关的所有证书吊销列表。

我们的问题:

有时候,我们的HTTPS请求突然失败,并出现证书验证错误。这个问题一直存在,直到有人打开到服务器的远程桌面会话并请求我们尝试在服务器Internet Explorer中查询的相同URL。之后,我们的PHP应用程序可以按需执行其请求。

题:

这里有什么问题?我们该怎么做才能进一步分析呢?

参考方案

如果那是一个枪口问题,那么每次都会发生。

但是,请尝试使用cURL发出相同的HTTPS调用,以验证是否是这种情况,并查看cURL请求是否也可以像Internet Explorer一样暂时清除问题。

但是,这看起来像是一个缓存问题-PHP服务器请求无法正确访问(初始化证书)证书存储,它只能在其他人获得访问权限后才能使用其服务,并且仅在缓存可以使用时不过期。为确保确实如此,只需定期发出呼叫并标记用户登录和使用IE之间的时间间隔,然后Guzzle呼叫就会开始失败。如果我是对的,那时间将永远一样。

这可能是一个权限问题(我想可能是,但是我不知所措,要授予什么权限)。除非获得该URL的最新CRL,而PHP无法获取它们,否则也许不允许调用。也可以通过在错误情况下从PHP启动的PowerShell脚本中运行对同一个URL的IE连接尝试来临时解决这种情况,或者(更可能且希望如此)尝试运行所述脚本会引发一些更有益的错误消息。

更新

我研究了Windows上的PHP如何通过Guzzle处理TLS,但没有发现明显的问题。但是我发现了an interesting page about TLS/SSL quirks。

更有趣的是,我还找到了一些参考资料,说明PHP最终如何使用Schannel进行TLS连接,以及Windows以及特别是Internet Explorer如何对互操作性持谨慎态度。因此,我建议您尝试activating the Schannel log on Windows并查看是否有任何结果。

另外,在链接的页面上,有对正在使用的客户端缓存的引用,相关页面的结尾为here(“ ClientCacheTime”)。

PHP-将日期插入日期时间字段 - php

我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数

PHP-如何获取类的成员函数列表? - php

如果我知道班级的名字。有没有办法知道类的成员函数列表? 参考方案 get_class_methods()是你的朋友

php ziparchive类源代码 - php

Improve this question 我如何获取ziparchive类本身的源代码。 参考方案 假设您在谈论PHP ZipArchive class:下载PHP source code并查找适当的文件。如果您希望源代码是PHP代码,您可能会感到失望,因为源代码是用C语言编写的。或者,也可以在PHP Github Development Reposito…

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…

PHP-如何建议搜索字词,“你是说……?” - php

当使用不检索任何结果的术语搜索数据库时,我想允许“您是不是……”建议(例如Google)。例如,如果有人寻找“ jquyer””,它将输出“ did you mean jquery?”当然,建议结果必须与数据库内部的值匹配(我正在使用mysql)。您知道可以做到这一点的图书馆吗?我已经用谷歌搜索过,但是没有找到任何好的结果。或者,也许您有一个想法,该如何独自…