用途:
本命令能够测试所支持的密钥算法的性能。
用法:
openssl rsautl [-in file] [-out file] [-sigfile file] [-inkey file] [-passin arg] [-keyform PEM|DER] [-peerkey file] [-peerform PEM|DER] [-pubin] [-certin] [-rev] [-sign] [-verify] [-verifyrecover ] [-encrypt] [-decrypt] [-derive] [-pkeyopt opt:value] [-asn1parse] [-engine e]
选项说明:
-in filename:需要处理的文件,默认为标准输入。
-out filename:指定输出文件名,默认为标准输出。
-sigfile file:签名文件的保存位置,默认为标准输入。
-inkey file:指定我们的私有密钥文件,格式必须是RSA私有密钥文件。
-passin arg:指定私钥包含口令存放方式。比如用户将私钥的保护口令写入一个文件,采用此选项指定此文件,可以免去用户输入口令的操作。比如用户将口令写入文件“pwd.txt”,输入的参数为:-passin file:pwd.txt。
-keyform PEM|DER|NET:证书私钥的格式。
-peerkey file:对方的证书文件,用于证书引出(一致性)操作。
-peerform PEM|DER:对方的证书格式,一般为PEM、DER或ENGINE。
-pubin:表明我们输入的是一个公钥文件,默认输入为私钥文件。
-certin:表明我们输入的是一个证书文件。
-rev:数据是否倒序。它主要用于一些库需要小端处理数据。
-sign:给输入的数据签名。需要我们的私有密钥文件。
-verify:对输入的数据进行验证。
-verifyrecover:验证输入的数据并输出转换后的数据内容。
-encrypt:用我们的公共密钥对输入的数据进行加密。
-decrypt:用RSA的私有密钥对输入的数据进行解密。
-derive:用对方的证书得到一个共同的密钥。
-pkeyopt opt:value:公钥参数选项。
-asn1parse:对输出的数据进行ASN1分析。该指令一般和-verify一起用的时候威力大。
-hexdump:用十六进制输出数据。
-engine e:硬件引擎。
注意:
该命令的操作和选项根据密钥算法的改变而改变。
相对应的密钥算法如下:
RSA算法:
RSA算法支持加密、解密、签名、验证签名以及验证恢复操作。一些填充模式仅仅支持这些操作中的一部分。
B<rsa_padding_mode:mode>:
RSA中的参数rsa_padding_mode:mode设置RSA的填充模式,支持的填充模式有:用PKCS#1来设置PKCS#1填充模式,用sslv23来设置SSLv23填充模式,用none来设置no填充模式,用oaep来设置OAEP填充模式,用x931来设置X9.31填充模式以及用pss来设置PSS。
对PKCS#1来说,没有计算消息摘要,并用签名或验证来代替DigestInfo结构。如果一个摘要值被设置并用了DigestInfo结构,则它的长度必须与摘要算法的长度一致。
OAEP填充模式仅仅支持加密、解密操作。
对X9.31填充模式来说,一个摘要算法被设置,并将它用于格式块数据,否则第一个字节必须要用X9.31摘要ID。它支持签名、验证签名以及验证恢复操作。
PSS填充模式仅仅支持签名和验证,必须指定摘要算法。
B<rsa_pss_saltlen:len>:
对B<pss>模式来说,它必须要指定填充长度值。它支持两个值:-1设置填充字节为摘要字节。当签名的时候,-2表示为填充字节为最大的可允许的字节数。当验证的时候,-2表示填充字节由块结构体来决定。
DSA 算法:
DSA算法它仅仅支持签名和验证签名操作。对摘要命令来说,目前它没有更多的附加选项。它仅仅支持sha1摘要,摘要算法还要是默认的。
DH算法:
DH算法仅仅支持密钥引出操作。没有相对应的附加选项。
EC算法:
它支持签名、验证以及密钥引出操作。签名和验证用ECDSA算法,密钥引出用ECDH算法。对摘要命令来说,目前它没有更多的附加选项。它仅仅支持sha1摘要,摘要算法还要是默认的。
实例:
用一个私钥对数据进行签名:
openssl pkeyutl -sign -in file -inkey key.pem -out sig
恢复签名数据(用RSA密钥):
openssl pkeyutl -verifyrecover -in sig -inkey key.pem
用DSA算法来验证签名:
openssl pkeyutl -verify -in file -sigfile sig -inkey key.pem
对一个消息的摘要值进行签名(仅仅支持RSA):
openssl pkeyutl -sign -in file -inkey key.pem -out sig -pkeyopt digest:sha256
引出一个共享的密钥:
openssl pkeyutl -derive -inkey key.pem -peerkey pubkey.pem -out secret