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)
评论()
编辑
收藏
举报