在使用PHP的CURL时如何使用OPENSSL_CONF自定义OPENSSL的配置?

我使用的是虚拟主机(FreeBSD服务器)

  • PHP 8.1.29
  • CURL 8.8.0
  • OPENSSL 3.0.13

在使用CURL请求网站的时候报错

cURL Error: OpenSSL/3.0.13: error:0A000152:SSL routines::unsafe legacy renegotiation disabled

从网上找个很多内容,发现是OPENSSL3 禁用了不安全的旧版重新协商。

RFC 5746 (2010)规范定义安全重新协商策略,OPENSSL3遵循此规范,安全重新协商失败则报错。

找到解决方案是:创建一个本地的openssl.cnf,并添加如下内容

openssl_conf = openssl_init

[openssl_init]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
Options = UnsafeLegacyServerConnect

在SSH里测试,不报错了。

$ OPENSSL_CONF=~/openssl.cnf curl -I "https://bufftoon.plaync.com"

HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: application/json; charset=utf-8
Content-Length: 12
ETag: W/"c-QETVAhUYmmve97quvZif9EL6tqM"
Date: Sun, 07 Jul 2024 13:51:01 GMT
Connection: keep-alive
Keep-Alive: timeout=5

但我在PHP代码里这样写还是报同样的错误

putenv('OPENSSL_CONF=/usr/home/kingtian/openssl.cnf');
$ch  =  curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://bufftoon.plaync.com');
curl_setopt($ch, CURLOPT_NOBODY, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response  =  curl_exec($ch);

用phpinfo()显示Environment里存在OPENSSL_CONF的设置

请问如何修改代码能实现访问不报错。

讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!