Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Command line 用于验证签名的openssl命令行_Command Line_Ubuntu_Openssl_Digital Signature - Fatal编程技术网

Command line 用于验证签名的openssl命令行

Command line 用于验证签名的openssl命令行,command-line,ubuntu,openssl,digital-signature,Command Line,Ubuntu,Openssl,Digital Signature,嗨,我已经生成了一个密钥对,并使用私钥生成了一个签名 openssl rsautl -sign -in helloworld.txt -inkey aa.pem -out sig 但是,我无法使用公钥验证签名: openssl rsautl -verify -in helloworld.txt -inkey aa.pub -sigfile sig 我知道有-sigfile已被弃用。而且openssl.org上的一些在线文档是错误的 我应该使用什么命令来验证带有公钥的sig?您可以检查文档中的

嗨,我已经生成了一个密钥对,并使用私钥生成了一个签名

openssl rsautl -sign -in helloworld.txt -inkey aa.pem -out sig
但是,我无法使用公钥验证签名:

openssl rsautl -verify -in helloworld.txt -inkey aa.pub -sigfile sig
我知道有-sigfile已被弃用。而且openssl.org上的一些在线文档是错误的

我应该使用什么命令来验证带有公钥的sig?

您可以检查文档中的

在您的示例中,这将给出:

openssl rsautl -verify -in sig -inkey aa.pem
我已在下面复制了我的全部历史记录:

echo "plop" > "helloworld.txt"
openssl rsautl -sign -in helloworld.txt -inkey aa.pem -out sig
openssl rsautl -verify -in sig -inkey aa.pem
> plop

我找到了两种解决你问题的方法

您可以这样使用rsautl:(使用私钥:my.key和公钥my pub.pem)

使用此方法,所有文档都包含在签名文件中,并由最终命令输出

但在我的例子中,我的证书上写着:签名算法:sha1withrsa加密。 因此,我建议您分4步使用签署文档的标准方法:(此方法用于所有不对称电子签名,以避免对签名文件和/或CPU使用收取过高费用)

  • 创建要签名的文档摘要(发件人)
  • 使用私钥签署摘要(发件人)
  • 创建要验证的文档摘要(收件人)
  • 使用公钥验证签名(收件人)
  • OpenSSL通过两个步骤实现这一点:

    $ openssl dgst -sha256 -sign my.key -out in.txt.sha256 in.txt 
    Enter pass phrase for my.key:
    $ openssl dgst -sha256 -verify my-pub.pem -signature in.txt.sha256 in.txt  
    Verified OK
    

    使用此方法,您向收件人发送了两个文档:原始文件纯文本,签名文件签名摘要。注意:签名文件不包括整个文件!只有摘要。你的方法基本上是正确的。您错过的是通过添加“-pubin”告诉rsautl inut密钥文件是一个公钥。 “-pubin”OpenSSL rsautl文档项不准确 " -普宾 输入文件是RSA公钥。 " 应该是 " -普宾 输入密钥文件是RSA公钥。 "
    因为输入文件应该是签名文件。

    请使用公钥验证

    echo "plop" > "helloworld.txt"
    openssl rsautl -sign -in hello.txt -inkey private.pem -out sig
    openssl rsautl -verify -in sig -inkey public.pem -pubin
    > plop
    

    您好,谢谢,我确实阅读了手册,但我需要使用公钥进行验证。不是私钥。使用-pubin并将公钥作为参数传递给-inkey您的方法是正确的,我缺少摘要部分,正在尝试对整个文档进行签名!谢谢你的帮助!我还发现了一些有用的链接,我用它来做X.509CA的事情:当使用这个命令行来验证给定数据的签名时,我得到以下错误输出:
    验证失败\n dgst中的错误
    这是否意味着验证失败是因为错误还是因为文件不正确匹配?签名解码失败没有真正的原因,所以我想说不匹配。您知道签名的格式是否重要吗?我认为格式
    .sign
    没有得到处理。你应该仔细看看文档。签名文件是文本文件,扩展名并不重要。是的,文件的内容有一个格式,但是如果不看它,我就不能说它是否合适。首先用我放在这里的命令和一个随机文本文件测试它,它应该可以工作,然后测试您自己的文件。
    echo "plop" > "helloworld.txt"
    openssl rsautl -sign -in hello.txt -inkey private.pem -out sig
    openssl rsautl -verify -in sig -inkey public.pem -pubin
    > plop