OpenSSL

加密和 SSL/TLS 工具包

openssl-rsautl

名称

openssl-rsautl - RSA 命令

语法

openssl rsautl [-help] [-in 文件] [-passin 参数] [-rev] [-out 文件] [-inkey 文件名|uri] [-keyform DER|PEM|P12|ENGINE] [-pubin] [-certin] [-sign] [-verify] [-encrypt] [-decrypt] [-pkcs] [-x931] [-oaep] [-raw] [-hexdump] [-asn1parse] [-engine id] [-rand 文件] [-writerand 文件] [-provider 名称] [-provider-path 路径] [-propquery propq]

描述

此命令已弃用。建议使用 openssl-pkeyutl(1) 命令。

此命令可用于使用 RSA 算法对数据进行签名、验证、加密和解密。

选项

-help

打印用法信息。

-in 文件名

指定要从中读取数据的输入文件名,如果未指定此选项,则为标准输入。

-passin 参数

输出文件中使用的密码。请参阅 openssl-passphrase-options(1)

-rev

反转输入顺序。

-out 文件名

指定要写入的输出文件名,默认为标准输出。

-inkey 文件名|uri

输入密钥,默认情况下应为 RSA 私钥。

-keyform DER|PEM|P12|ENGINE

密钥格式;默认为未指定。有关详细信息,请参阅 openssl-format-options(1)

-pubin

默认情况下,从密钥输入读取私钥。使用此选项时,将改为读取公钥。如果输入不包含公钥但包含私钥,则使用其公钥部分。

-certin

输入是包含 RSA 公钥的证书。

-sign

对输入数据进行签名并输出签名结果。这需要 RSA 私钥。

-verify

验证输入数据并输出恢复的数据。

-encrypt

使用 RSA 公钥加密输入数据。

-decrypt

使用 RSA 私钥解密输入数据。

-pkcs-oaep-x931-raw

要使用的填充:PKCS#1 v1.5(默认)、PKCS#1 OAEP、ANSI X9.31 或无填充。对于签名,只能使用-pkcs-raw

注意:由于针对 Bleichenbacher 攻击的保护,在填充检查失败的情况下,使用 PKCS#1 v1.5 模式解密不会返回错误。使用-raw 并手动检查返回值以检查填充是否正确。

-hexdump

十六进制转储输出数据。

-asn1parse

解析 ASN.1 输出数据,这在与-verify 选项结合使用时非常有用。

-engine id

请参阅 openssl(1) 中的“引擎选项”。此选项已弃用。

-rand 文件-writerand 文件

有关详细信息,请参阅 openssl(1) 中的“随机状态选项”

-provider 名称
-provider-path 路径
-propquery propq

请参阅 openssl(1) 中的“提供程序选项”provider(7)property(7)

注意

由于此命令直接使用 RSA 算法,因此它只能用于对少量数据进行签名或验证。

示例

等效于这些的示例可以在非弃用 openssl-pkeyutl(1) 命令的文档中找到。

使用私钥对一些数据进行签名

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

恢复签名数据

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

检查原始签名数据

openssl rsautl -verify -in sig -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(第二个字节)并且会显示随机填充数据而不是 0xff 字节。

可以结合使用此命令和 openssl-asn1parse(1) 来分析证书的签名。考虑 certs/pca-cert.pem 中的自签名示例。按如下方式运行 openssl-asn1parse(1) 将产生

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 DigestInfo 结构的解析版本。可以看出使用的摘要是 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(1)openssl-pkeyutl(1)openssl-dgst(1)openssl-rsa(1)openssl-genrsa(1)

历史

此命令在 OpenSSL 3.0 中已弃用。

-engine 选项在 OpenSSL 3.0 中已弃用。

版权所有 2000-2023 OpenSSL 项目作者。保留所有权利。

根据 Apache 许可证 2.0(“许可证”)获得许可。除非符合许可证,否则您不得使用此文件。您可以在源代码分发中的 LICENSE 文件或 https://www.openssl.org/source/license.html 中获取副本。