OpenSSL命令---rsautl

用途:

本指令能够使用RSA算法签名,验证身份,加密/解密数据。

用法:

openssl rsautl [-in file] [-out file] [-inkey file] [-passin arg] [-keyform PEM|DER|NET] [-pubin] [-certin]
[-asn1parse] [-hexdump] [-raw] [-oaep] [-ssl] [-pkcs] [-x931] [-sign] [-verify][-encrypt] [-decrypt] [-rev] 
[-engine e] 

选项说明:

-in filename:需要处理的文件,默认为标准输入。

-out filename:指定输出文件名,默认为标准输出。

-inkey file:指定我们的私有密钥文件,格式必须是RSA私有密钥文件。

-passin arg:指定私钥包含口令存放方式。比如用户将私钥的保护口令写入一个文件,采用此选项指定此文件,可以免去用户输入口令的操作。比如用户将口令写入文件“pwd.txt”,输入的参数为:-passin file:pwd.txt

-keyform PEM|DER|NET:证书私钥的格式。

-pubin:表明我们输入的是一个公钥文件,默认输入为私钥文件。

-certin:表明我们输入的是一个证书文件。

-asn1parse:对输出的数据进行ASN1分析。该指令一般和-verify一起用的时候威力大。

-hexdump:用十六进制输出数据。

-pkcs -oaep -ssl -raw-x931:采用的填充模式,上述四个值分别代表:PKCS#1.5(缺省值) PKCS#1 OAEP SSLv2X931里面特定的填充模式,或者不填充。如果要签名,只有-pkcs-raw可以使用。

-sign:给输入的数据签名。需要我们的私有密钥文件。

-verify:对输入的数据进行验证。

-encrypt:用我们的公共密钥对输入的数据进行加密。

-decrypt:用RSA的私有密钥对输入的数据进行解密。

-rev:数据是否倒序。

-engine e:硬件引擎。

注意:

Rsautl命令用RSA算法目录仅仅能够用于签名或验证小块的数据。

实例:

生成RSA密钥:

openssl genrsa -des3 -out prikey.pem


分离出公钥:

openssl genrsa -des3 -out prikey.pem
openssl rsa -in prikey.pem -pubout -out  pubkey.pem


对文件签名:

openssl rsautl -sign -inkey prikey.pem -in a.txt  -hexdump,文件a.txt的内容不能太长;
openssl rsautl -sign -inkey prikey.pem -in a.txt  -out sig.dat

验证签名:

openssl rsautl -verify -inkey prikey.pem -in  sig.dat,验证成功后打印出a.txt的内容;


公钥加密:

openssl rsautl -encrypt -pubin -inkey pubkey.pem -in a.txt -out b.txt


私钥解密:

openssl rsautl -decrypt -inkey prikey.pem -in b.txt


用证书中的公钥加密:

openssl rsautl -encrypt -certin -inkey cert1.pem -in a.txt


用一个私钥对数据进行签名:

openssl rsautl -sign -in file -inkey key.pem -out sig


恢复签名数据:

openssl rsautl -verify -in sig -inkey key.pem


检查未处理的签名数据:

openssl rsautl -verify -in file -inkey key.pem -raw –hexdump

0000 - 00 01 ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................

0010 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................

0020 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................

0030 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................

0040 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................

0050 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................

0060 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................

0070 - ff ff ff ff 00 68 65 6c-6c 6f 20 77 6f 72 6c 64   .....hello world

这个数据明显的是使用PKCS#1填充格式。如果这个执行完后,用加密或解密这个块,将会产生类型2(即2个字节)和随机的填充值来替代0xff字节。

可以使用这个命令结合B<asn1parse>来分析证书的签名值。考虑到certs/pca-cert.pem中的自签名的情况。运行B<asn1parse>,有下面的结果:

openssl asn1parse -in pca-cert.pem

 

    0:d=0  hl=4 l= 742 cons: SEQUENCE         

    4:d=1  hl=4 l= 591 cons:  SEQUENCE         

    8:d=2  hl=2 l=   3 cons:   cont [ 0 ]       

   10:d=3  hl=2 l=   1 prim:    INTEGER           :02

   13:d=2  hl=2 l=   1 prim:   INTEGER           :00

   16:d=2  hl=2 l=  13 cons:   SEQUENCE         

   18:d=3  hl=2 l=   9 prim:    OBJECT            :md5WithRSAEncryption

   29:d=3  hl=2 l=   0 prim:    NULL             

   31:d=2  hl=2 l=  92 cons:   SEQUENCE         

   33:d=3  hl=2 l=  11 cons:    SET              

   35:d=4  hl=2 l=   9 cons:     SEQUENCE         

   37:d=5  hl=2 l=   3 prim:      OBJECT            :countryName

   42:d=5  hl=2 l=   2 prim:      PRINTABLESTRING   :AU

  ....

  599:d=1  hl=2 l=  13 cons:  SEQUENCE         

  601:d=2  hl=2 l=   9 prim:   OBJECT            :md5WithRSAEncryption

  612:d=2  hl=2 l=   0 prim:   NULL             

  614:d=1  hl=3 l= 129 prim:  BIT STRING       

最终的BIT STRING包含了实际的签名数据。可以用下面的命令提取出来:

openssl asn1parse -in pca-cert.pem -out sig -noout -strparse 614

提出出证书公钥值的命令是:

openssl x509 -in test/testx509.pem -pubkey -noout >pubkey.pem

签名值提取:

openssl rsautl -in sig -verify -asn1parse -inkey pubkey.pem -pubin

 

    0:d=0  hl=2 l=  32 cons: SEQUENCE         

    2:d=1  hl=2 l=  12 cons:  SEQUENCE         

    4:d=2  hl=2 l=   8 prim:   OBJECT            :md5

   14:d=2  hl=2 l=   0 prim:   NULL             

   16:d=1  hl=2 l=  16 prim:  OCTET STRING     

      0000 - f3 46 9e aa 1a 4a 73 c9-37 ea 93 00 48 25 08 b5   .F...Js.7...H%..

这是分析的ASN1摘要新结构。可以看见的是用MD5摘要的结果。实际的签名部分可以用下面命令提取出来:

openssl asn1parse -in pca-cert.pem -out tbs -noout -strparse 4

摘要值计算对比:

openssl md5 -c tbs

 MD5(tbs)= f3:46:9e:aa:1a:4a:73:c9:37:ea:93:00:48:25:08:b5

摘要值可以由上面恢复的数据来看到。

你可能感兴趣的:(OpenSSL,rsautl,RSA密钥具体用法)