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

0kjbasz6  于 2022-11-02  发布在  PHP
关注(0)|答案(2)|浏览(391)

我得到错误Error message "error:0308010C:digital envelope routines::unsupported"时,试图打开一个.pfx文件:

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

在终端(Ubuntu 22.04)中:

  1. user@user-tp:~$ php -i | grep -i openssl
  2. SSL Version => OpenSSL/3.0.2
  3. libSSH Version => libssh/0.9.6/openssl/zlib
  4. openssl
  5. OpenSSL support => enabled
  6. OpenSSL Library Version => OpenSSL 3.0.2 15 Mar 2022
  7. OpenSSL Header Version => OpenSSL 3.0.2 15 Mar 2022
  8. Openssl default config => /usr/lib/ssl/openssl.cnf
  9. openssl.cafile => no value => no value
  10. openssl.capath => no value => no value
  11. Native OpenSSL support => enabled

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

  1. openssl pkcs12 -in file.pfx -nodes

但是如果我使用-legacy参数,它就可以正常工作。
如何在PHP中使用它而不出错?

izj3ouym

izj3ouym1#

您可以启用Openssl 3的旧版选项:
找到并打开位于/etc/ssl/openssl.cnf的文件
[default_sect]部分,将其更改为以下内容:

  1. [default_sect]
  2. activate = 1
  3. [legacy_sect]
  4. activate = 1

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

  1. [provider_sect]
  2. default = default_sect
  3. legacy = legacy_sect

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

ymzxtsji

ymzxtsji2#

我也遇到了同样的问题,这是由于OpenSSL在Ubuntu 22. 04中升级到了版本3。这个问题发生在使用P12文件的Google日历API集成上。
我试着把它降级到OpenSSL 1.1(改变应用程序本身不是一个选择),但没有成功。
最后的解决方案是在一个新的服务器上重新部署我的应用程序与Ubuntu 20. 04 ...工作的开箱即用。

相关问题