当前位置: 首页> 问答> 正文

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

  • gitaspgitasp
  • 问答
  • 2024-12-29 18:15:23
  • 32

我使用的是虚拟主机(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 的设置

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

————————————————

答:

哥们你做的没问题,再重启一下 php-fpm 就解决了

重点就是在默认的 ssl 配置路径下配置你的那个代码

比如我的路径是 /etc/ssl/openssl.cnf

6bM4C153oP.png

然后重启 php-fpm

我一开始和你一样改完了毛用没有,

就去研究自己编译 openssl1.1.1 的 curl 折腾半天,最后 curl 本身没问题,但是 php 拓展的 curl 非得去用 openssl3

最后还是回到这里,只改了配置,重启了一下 php-fpm 好使了

最新文章