我在尝试打开.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