从PKCS11密钥库提取公钥后OpenSSL验签失败求助
SoftHSM生成RSA密钥对后OpenSSL验签失败的解决方法
我在SoftHSM密钥库中生成了RSA密钥对,并用其为软件签名。提取公钥到目标设备后,使用pkcs11-tool可正常完成签名和验签,但用OpenSSL验签时失败,报错信息如下:
80DB511C4A7F0000:error:02000068:rsa routines:ossl_rsa_verify:bad signature:../crypto/rsa/rsa_sign.c:430:
我使用的密钥生成及验签命令序列如下:
softhsm2-util --init-token --free --label "token-label" --so-pin mysecret1 --pin mysecret1 pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --login --login-type so --so-pin mysecret1 --init-pin --new-pin mysecret1 # 创建RSA密钥对 pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so -l --token-label token-label -k --key-type rsa:2048 --usage-sign --id 1002 --label rsatest --pin mysecret1 # 读取公钥到DER文件(原命令存在拼写错误:--modul 应为 --module) pkcs11-tool --modul /usr/lib/softhsm/libsofthsm2.so --id 1002 --read-object --type pubkey -o rsa.der # 转换公钥格式(原命令工具错误:用EC密钥工具处理RSA密钥) openssl ec -pubin -inform DER -in rsa.der -outform PEM -out rsa.pem # 签名文件 pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --login --pin mysecret1 --sign --id 1002 -m RSA-PKCS --input text.txt --output /tmp/rsa.signature # pkcs11-tool验签(正常通过) pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --id 1002 --verify -m RSA-PKCS --input-file text.txt --signature-file /tmp/rsa.signature # OpenSSL验签(失败) openssl dgst -sha512 -keyform PEM -verify rsa.pem -signature /tmp/rsa.signature text.txt
我尝试过多种PEM和DER格式组合,也修改过-sha512参数,但问题仍未解决。
解决步骤
问题源于两个关键错误,修正后即可正常验签:
修正公钥转换工具:你生成的是RSA密钥,但误用了椭圆曲线密钥工具
openssl ec转换公钥,导致生成的PEM公钥无效。替换为RSA专用工具:openssl rsa -pubin -inform DER -in rsa.der -outform PEM -out rsa.pem统一签名与验签的哈希算法:pkcs11-tool使用
RSA-PKCS模式时默认用SHA-1签名,但你验签时指定了SHA-512,算法不匹配导致失败。签名时需明确指定哈希算法:pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --login --pin mysecret1 --sign --id 1002 -m RSA-PKCS -s SHA512 --input text.txt --output /tmp/rsa.signature
同时记得修正pkcs11-tool命令里的拼写错误:--modul改为--module,确保能正确读取公钥。
内容的提问来源于stack exchange,提问作者Kjeld Flarup
相关产品推荐
相关产品推荐

