0

我正在尝试与我无法通过 PHP+curl 控制 SSL 的错误网络服务器交谈。

我直接针对openssl lib编写了一个小C程序,并通过它确定,如果我在调用SSL_CTX_set_options()时显式启用openssl选项SSL_OP_NO_COMPRESSION和SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS,我可以让它工作。像这样:

SSL_CTX_set_options(ctx,  SSL_OP_NO_COMPRESSION | SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS)

但是,...那是在我孤立的 C 程序中。

当 PHP+curl 建立 SSL 连接时,我可以以某种方式设置这些选项吗?CURL 似乎在更高的层次上运行。

到目前为止,这是我自己的发现:

  • 我知道curl_setopt,但我在其列表中看不到类似的选项。

  • 我找到了一个叫做流选项的东西,但我不清楚它们如何或是否与 CURL 一起使用,而且我再次看到我需要的选项不匹配。

  • openssl 上的 PHP手册似乎只涉及处理密钥和证书的功能。

  • 然后,有HttpRequest setSslOptions,但同样,这似乎与 CURL 上下文的选项非常匹配。


更新

在“user2076645”对禁用压缩选项的响应之后,我 git 克隆了 PHP 的源代码并环顾四周。

具体来说,我发现了这段代码:

#if OPENSSL_VERSION_NUMBER >= 0x0090605fL
    ssl_ctx_options &= ~SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS;
#endif

这明确禁用了我需要的选项。我也查看了提交消息,这是对可能对 SSL 的攻击的修复。

所以,我猜它不能从 PHP 完成,目前:-(

4

1 回答 1

0

不确定它是否有帮助,但有一个选项可以禁用压缩

http://git.php.net/?p=php-src.git;a=commitdiff;h=4a01ddfb5569da1b87dd4cac95c3f709fb607396;hp=bb4d11b405ae1f37a8b0e4db630e80c5678f0746

于 2013-02-15T19:21:43.177 回答