jsrsasign ECDSA网页示例与OpenSSL工具签名验证失败问题
问题:ECDSA签名OpenSSL验证失败排查
操作流程
- 生成EC密钥对
openssl ecparam -genkey -name secp256r1 -out k.pem
执行后得到提示:
"using curve name prime256v1 instead of secp256r1"
- 查看密钥详情
openssl ec -in k.pem -noout -text
输出内容:
read EC key Private-Key: (256 bit) priv: f5:01:5a:53:76:9d:b2:85:05:fc:0f:1f:70:ea:f1: a3:ec:59:ef:69:23:74:cf:bf:4d:7f:31:c3:8d:1b: 96:bb pub: 04:e5:8c:01:e7:1a:a7:67:cd:5a:ec:d1:5b:8e:40: 1b:98:d2:e1:db:92:dc:a0:22:07:4b:ea:17:71:c6: b6:f0:3f:81:2d:7e:b4:b4:d1:51:50:82:d6:36:f2: 81:ec:65:e9:77:e1:12:59:43:25:94:1b:dc:94:48: 31:a1:bb:86:17 ASN1 OID: prime256v1 NIST CURVE: P-256
- 网页生成签名
- 提取私钥十六进制值(
f5015a53769db28505fc0f1f70eaf1a3ec59ef692374cfbf4d7f31c38d1b96bb)填入网页EC私钥栏 - 提取公钥十六进制值(
04e58c01e71aa767cd5aecd15b8e401b98d2e1db92dca022074bea1771c6b6f03f812d7eb4b4d1515082d636f281ec65e977e112594325941bdc944831a1bb8617)填入EC公钥栏 - 设置消息为
aaa,曲线名称选择secp256r1,签名算法选择SHA256with ECDSA - 点击签名后得到十六进制签名值:
3045022035721330a91c3c6d861c7a23815ea22a4eba12c8dc892800b6493364e24ec266022100de0fc18d0eed05e204786732de1c44b2e78cd53ecbf6e110c501d94ebd36f162
- 准备验证文件
# 将十六进制签名转为二进制文件 printf "3045022035721330a91c3c6d861c7a23815ea22a4eba12c8dc892800b6493364e24ec266022100de0fc18d0eed05e204786732de1c44b2e78cd53ecbf6e110c501d94ebd36f162" | xxd -r -p > web_sign.bin # 生成消息文件 echo "aaa" > message.txt # 导出公钥文件 openssl ec -in k.pem -pubout -out pk.pem
- OpenSSL验证签名
openssl dgst -sha256 -verify pk.pem -signature web_sign.bin message.txt
执行后得到结果:
Verification failure
求助
已调试多时仍未定位问题,请求协助排查。
内容的提问来源于stack exchange,提问作者Xinwei Gong
相关产品推荐
相关产品推荐

