PHP openssl_pkcs12_read“错误:0308010C:数字信封例程::不支持”

Fan*_*mic 10 php ubuntu openssl laravel

Error message "error:0308010C:digital envelope routines::unsupported"我在尝试打开文件时收到错误.pfx

$result = openssl_pkcs12_read($content, $certdata, $pass);
$error = openssl_error_string(); // "error:0308010C:digital envelope routines::unsupported"
Run Code Online (Sandbox Code Playgroud)

在终端(Ubuntu 22.04)中:

user@user-tp:~$ php -i | grep -i openssl
SSL Version => OpenSSL/3.0.2
libSSH Version => libssh/0.9.6/openssl/zlib
openssl
OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 3.0.2 15 Mar 2022
OpenSSL Header Version => OpenSSL 3.0.2 15 Mar 2022
Openssl default config => /usr/lib/ssl/openssl.cnf
openssl.cafile => no value => no value
openssl.capath => no value => no value
Native OpenSSL support => enabled
Run Code Online (Sandbox Code Playgroud)

如果我尝试在终端中打开文件,我会收到相同的错误:

openssl pkcs12 -in file.pfx -nodes
Run Code Online (Sandbox Code Playgroud)

但如果我使用-legacy参数它工作正常。

如何在 PHP 中使用它而不出现错误?

Mar*_*der 23

您可以启用 Openssl 3 的旧版选项:

查找并打开该文件/etc/ssl/openssl.cnf

[default_sect]部分将其更改为以下内容:

[default_sect]
activate = 1
[legacy_sect]
activate = 1
Run Code Online (Sandbox Code Playgroud)

然后找到[provider_sect]并更改为以下内容:

[provider_sect]
default = default_sect
legacy = legacy_sect
Run Code Online (Sandbox Code Playgroud)

之后保存文件并重新启动 PHP 应用程序,它应该可以正常工作。