【发布时间】:2013-02-15 18:54:50
【问题描述】:
我正在尝试与我无法通过 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,但我在其列表中看不到类似的选项。我找到了一个名为 stream options 的东西,但我不清楚它们是如何或是否与 CURL 一起使用的,而且我再次看到与我需要的选项不匹配。
PHP manual on openssl 似乎只涉及处理密钥和证书的函数。
然后,有 HttpRequest setSslOptions,但同样,这似乎与 CURL 上下文的选项非常匹配。
更新
在“user2076645”对禁用压缩选项的响应后,我 git 克隆了 PHP 的源代码并环顾四周。
具体来说,我找到了这段代码:
#if OPENSSL_VERSION_NUMBER >= 0x0090605fL
ssl_ctx_options &= ~SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS;
#endif
明确禁用我需要的选项。我也查看了提交消息,这是对可能对 SSL 的攻击的修复。
所以,我猜它目前无法通过 PHP 完成 :-(
【问题讨论】: