PHP openssl_pkcs12_read "error:0308010C:digital envelope routines::unsupported"



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

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

在终端(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

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

openssl pkcs12 -in file.pfx -nodes

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

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

您可以为Openssl 3:启用遗留选项

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

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

[default_sect]
activate = 1
[legacy_sect]
activate = 1

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

[provider_sect]
default = default_sect
legacy = legacy_sect

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

您可以用几个命令处理Marcelo的解决方案(例如,用于Docker构建图像(:

sed -i '/^default = default_sect/a legacy = legacy_sect' /etc/ssl/openssl.cnf
sed -i '/^[default_sect]/a activate = 1' /etc/ssl/openssl.cnf
printf "[legacy_sect]nactivate = 1" >> /etc/ssl/openssl.cnf

Btw。您可以在OpenSSL wiki 上找到有关默认和遗留提供商的更多信息

我遇到了同样的问题,这是由于OpenSSL在Ubuntu 22.04中升级到了版本3。该问题发生在使用P12文件的Google Calendar API集成上。

我尝试将其降级为OpenSSL 1.1(更改应用程序本身不是一个选项(,但没有成功。

最后的解决方案是用Ubuntu 20.04将我的应用程序重新部署到一个新的服务器上……开箱即用。

确保/etc/ssl/openssl.cnf:中有以下配置

[openssl_init]
providers = provider_sect
[provider_sect]
default = default_sect
legacy = legacy_sect
[default_sect]
activate = 1
[legacy_sect]
activate = 1

相关内容

最新更新