You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 20.4下OpenSSL 1.1.1自定义引擎:实现命令行摘要签名的方法及可行性咨询

实现自定义OpenSSL引擎支持openssl dgst命令行签名的方案(可行!)

没问题,这个方案完全可行!要让你在Ubuntu 20.04 + OpenSSL 1.1.1环境下开发的自定义OpenSSL引擎支持openssl dgst命令行的摘要签名操作,核心是确保引擎实现了OpenSSL命令行工具依赖的密钥管理和签名回调接口,同时正确完成引擎的注册、加载和命令行参数配置。下面是具体的操作步骤和关键注意事项:

1. 补全引擎的核心接口实现

openssl dgst -sign底层会调用OpenSSL的EVP_PKEY签名框架,所以你的引擎必须实现对应的ECDSA密钥处理和签名/验签回调:

  • 定义并填充EVP_PKEY_METHOD结构体,关联你的自定义ECDSA签名逻辑:
    static const EVP_PKEY_METHOD your_ecdsa_pkey_meth = {
        EVP_PKEY_EC,  // 指定密钥类型为EC
        .sign = your_custom_ecdsa_sign,  // 替换为你的ECDSA签名实现函数
        .verify = your_custom_ecdsa_verify,  // 替换为你的ECDSA验签实现函数
        // 其他必要的字段(如初始化、清理函数)按需填充
    };
    
  • 在引擎的初始化函数中,注册这个密钥方法:
    ENGINE_set_pkey_meths(your_engine_ptr, &your_ecdsa_pkey_meth);
    
    这一步是让OpenSSL知道你的引擎可以处理ECDSA类型的密钥操作。

2. 确保引擎能被OpenSSL命令行加载

  • 安装引擎库:将编译好的引擎.so文件放到OpenSSL默认的引擎目录(Ubuntu 20.04一般是/usr/lib/x86_64-linux-gnu/engines-1.1/),或者通过--prefix参数指定自定义安装路径。
  • 指定引擎ID或路径:如果引擎注册了唯一ID(通过ENGINE_set_id(your_engine_ptr, "your_engine_id");设置),可以直接用-engine your_engine_id调用;如果没安装到默认目录,也可以直接指定引擎库的绝对路径:-engine /path/to/your/engine.so。

3. 正确使用openssl dgst命令行

完整的签名命令格式应该是这样的:

openssl dgst -engine <your_engine_id> -sha256 -sign /path/to/your_ec_private_key.pem -out signature.bin input_file.txt

各参数说明:

  • -engine <your_engine_id>:指定要使用的自定义引擎
  • -sha256:指定摘要算法(如果你的引擎内置了SHA256实现,OpenSSL会自动关联;如果引擎只处理签名,会用OpenSSL原生的SHA256生成摘要后再交给引擎签名)
  • -sign /path/to/your_ec_private_key.pem:指定ECDSA私钥文件(如果你的引擎使用自定义密钥格式,需要额外实现密钥导入逻辑,比如通过openssl engine的控制命令提前加载密钥)
  • -out signature.bin:输出签名结果文件
  • input_file.txt:需要签名的原始文件

如果你的引擎需要先导入密钥,可以先执行:

openssl engine -t -c <your_engine_id> -keyform PEM -in /path/to/private_key.pem

(具体参数取决于你在引擎中实现的ENGINE_ctrl回调逻辑)

4. 调试与验证

  • 遇到错误时,开启OpenSSL调试日志排查:
    export OPENSSL_DEBUG=1
    openssl dgst ...  # 重新执行命令
    
  • 验证签名的命令:
    openssl dgst -engine <your_engine_id> -sha256 -verify /path/to/your_ec_public_key.pem -signature signature.bin input_file.txt
    

5. OpenSSL 1.1.1兼容性提示

OpenSSL 1.1.1的引擎API相比1.0.2有不少变更,确保你的引擎代码使用的是1.1.1的原生API(比如避免使用已废弃的ENGINE_load_private_key等旧接口),否则可能出现加载失败或功能异常。


内容的提问来源于stack exchange,提问作者coolddd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 14:12:28