php 如何使用 OpenSSL 3.0 支持DES-CBC 加密算法
- 2026-11-02 12:33:00
- 丁国栋
- 原创 12
php 执行 openssl_encrypt("test", "DES-CBC", "12345678", OPENSSL_RAW_DATA, "12345678"); 得到 false,通过 openssl_error_string() 函数得知 error:0308010C:digital envelope routines::unsupported 错误。
原因是 OpenSSL 3 将 DES-CBC 移入了 legacy provider,需要启用 legacy provider 才行。
要修复这个错误,需要安装 openssl-provider-legacy 包,且配置 /etc/ssl/openssl.cnf 文件。
[provider_sect] legacy = legacy_sect [default_sect] activate = 1 [legacy_sect] activate = 1命令行修改方式如下(可用于 Dockerfile 等):
apt install -y openssl-provider-legacy \
&& sed -i '/^\[provider_sect\]/a legacy = legacy_sect' /etc/ssl/openssl.cnf \
&& sed -i '/^\[default_sect\]/a [legacy_sect]\nactivate = 1' /etc/ssl/openssl.cnf \
&& sed -i '/^\[default_sect\]/a activate = 1' /etc/ssl/openssl.cnf \
&& php -r '\
if (openssl_encrypt("test", "DES-CBC", "12345678", OPENSSL_RAW_DATA, "12345678") === false) { \
fwrite(STDERR, "DES-CBC encryption check failed: " . openssl_error_string() . PHP_EOL); \
exit(1); \
} \
'
发表评论