【问题标题】:How to pass on openssl context options from PHP curl如何从 PHP curl 传递 openssl 上下文选项
【发布时间】: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 完成 :-(

【问题讨论】:

    标签: php curl openssl


    【解决方案1】:

    【讨论】:

    • 哇,谢谢。但是,该提交似乎只有大约 14 天。我想我需要运行一个最前沿的 PHP 版本来获得它:-)
    猜你喜欢
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 2020-03-10
    • 2019-05-29
    • 2020-11-02
    相关资源
    最近更新 更多