使用openssl命令行进行签名和验证

RSA签名验证的一般流程

发行者
  • 对被签名文件(假设为App.txt)计算hash,一般用SHA256
  • 用RSA私钥(假设为RSA.key)对hash值签名,得到二进制签名文件(假设为App.sig.bin),对其结果进行base64编码,保存到签名文件(假设为App.sig)
  • 将App.txt,公钥文件(假设为App.pub),App.sig递交给用户
使用者
  • 对App.txt计算hash,需与签名时使用的算法相同
  • 对App.sig进行base64解码,得到二进制签名(假设为App.sig.bin)
  • 使用hash,App.sig.bin,App.pub进行验证

使用openssl命令行实现

发行者
  • 使用私钥进行签名
    openssl dgst -sha256 -sign RSA.key -out App.sig.bin App.txt
  • 对签名文件进行base64编码,便于查看对比和分发
    openssl base64 -in App.sig.bin -out App.sig
使用者
  • 对签名文件进行base64解码
    cat App.sig | base64 -d > App.sig.bin
  • 校验
    openssl dgst -sha256 -verify App.pub -signature App.sig.bin App.txt
  • 校验成功会返回“Verified OK”

注意事项

  • 如果公钥为RSA PKCS#1格式,需要转换为RSA PKCS#8格式
    openssl rsa -RSAPublicKey_in -in App.pub -pubout > App.pub8
  • PKCS#1格式的公钥以-----BEGIN RSA PUBLIC KEY-----开头
  • PKCS#8格式的公钥以-----BEGIN PUBLIC KEY-----开头

其他

  • 公钥也可以保存在x509证书中(假设为RSA.pem),从x509证书提取公钥使用如下命令:
    openssl x509 -inform PEM -in RSA.pem -outform PEM -pubkey -out RSA.pub8
  • PKCS#8格式公钥转 PKCS#1格式
    openssl rsa -in RSA.pub8 -pubin -RSAPublicKey_out -out RSA.pub1
  • 另一种使用x509证书签名和验证的方法
    使用私钥和证书进行签名,生成的签名文件为PKCS#7格式。
    openssl smime -sign -binary -in App.txt -signer RSA.pem -inkey RSA.key -outform PEM -out App.sig7
    使用证书进行签名验证,如果是windows下将/dev/null换成nul即可。
    openssl smime -verify -binary -inform PEM -in App.sig7 -content App.txt -certfile RSA.pem -nointern -noverify > /dev/null
posted @ 2022-04-13 18:09  bert_qin  阅读(7596)  评论(1编辑  收藏  举报