OpenSSL 3.0.2 PKCS12_parse 失败

Vic*_*r C 2 c++ encryption openssl network-programming

我们正在迁移到 Openssl 3.0.2,目前在 3.0.2 服务器和 1.1.1g 客户端之间遇到连接问题。

根据收集的日志,我们似乎在加载旧提供程序时遇到问题。我们按照 OpenSSL 3.0 - 6.2 提供程序 Wiki 中概述的步骤以编程方式加载默认提供程序和旧提供程序,没有出现任何问题。

我们看到以下错误..

错误:0308010C:数字信封例程:inner_evp_generic_fetch:不支持:crypto\evp\evp_fetch.c:346:全局默认库上下文,算法(RC2-40-CBC:0),属性()PKCS12_parse()失败= 183。(使用从errhandlingapi.h中GetLastError,获取183错误码)

值得一提的是,我们仅在服务器是 Windows 2012 服务器时才会看到此问题。

默认和旧版提供程序在启动时都会毫无问题地加载。

Jos*_*rez 6

正如 Liam 所指出的,OpenSSL 3.0 默认情况下不支持传统算法 RC2-40-CBC。

幸运的是,遗留库包含在我的发行版的 bin 文件夹中(https://slproweb.com/products/Win32OpenSSL.html;完整列表https://wiki.openssl.org/index.php/Binaries)。

所以我的解决步骤是

  1. 设置 OPENSSL_MODULES
  2. 添加 -legacy 选项

设置变量 OPENSSL_MODULES

SET OPENSSL_MODULES=C:\Program Files\OpenSSL-Win64\bin
Run Code Online (Sandbox Code Playgroud)

没有 -legacy 选项:

D:\sources\en.Resilience_Temy\config\certificates>openssl pkcs12 -in server.p12 -out saxserver.crt
Enter Import Password:
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
Error outputting keys and certificates
58630000:error:0308010C:digital envelope routines:inner_evp_generic_fetch:unsupported:crypto\evp\evp_fetch.c:349:Global default library context, Algorithm (RC2-40-CBC : 0), Properties ()
Run Code Online (Sandbox Code Playgroud)

使用 -legacy 选项:

D:\sources\en.Resilience_Temy\config\certificates>openssl pkcs12 -in server.p12 -out server.crt -legacy
Enter Import Password:
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
Run Code Online (Sandbox Code Playgroud)

并且文件生成成功。