php 如何使用 OpenSSL 3.0 支持DES-CBC 加密算法

2026-11-02 12:33:00
丁国栋
原创 13
摘要:解决 php 使用 DES-CBC 机密算法时提示error:0308010C:digital envelope routines::unsupported错误的问题。

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); \
        } \
    '

发表评论
验证码 =
博客分类