295 lines
10 KiB
HTML
295 lines
10 KiB
HTML
|
<?xml version="1.0" ?>
|
||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||
|
<head>
|
||
|
<title>openssl-rsautl</title>
|
||
|
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
||
|
<link rev="made" href="mailto:root@localhost" />
|
||
|
</head>
|
||
|
|
||
|
<body style="background-color: white">
|
||
|
|
||
|
|
||
|
<!-- INDEX BEGIN -->
|
||
|
<div name="index">
|
||
|
<p><a name="__index__"></a></p>
|
||
|
|
||
|
<ul>
|
||
|
|
||
|
<li><a href="#name">NAME</a></li>
|
||
|
<li><a href="#synopsis">SYNOPSIS</a></li>
|
||
|
<li><a href="#description">DESCRIPTION</a></li>
|
||
|
<li><a href="#options">OPTIONS</a></li>
|
||
|
<li><a href="#notes">NOTES</a></li>
|
||
|
<li><a href="#examples">EXAMPLES</a></li>
|
||
|
<li><a href="#see_also">SEE ALSO</a></li>
|
||
|
<li><a href="#history">HISTORY</a></li>
|
||
|
<li><a href="#copyright">COPYRIGHT</a></li>
|
||
|
</ul>
|
||
|
|
||
|
<hr name="index" />
|
||
|
</div>
|
||
|
<!-- INDEX END -->
|
||
|
|
||
|
<p>
|
||
|
</p>
|
||
|
<hr />
|
||
|
<h1><a name="name">NAME</a></h1>
|
||
|
<p>openssl-rsautl - RSA utility</p>
|
||
|
<p>
|
||
|
</p>
|
||
|
<hr />
|
||
|
<h1><a name="synopsis">SYNOPSIS</a></h1>
|
||
|
<p><strong>openssl</strong> <strong>rsautl</strong>
|
||
|
[<strong>-help</strong>]
|
||
|
[<strong>-in</strong> <em>file</em>]
|
||
|
[<strong>-passin</strong> <em>arg</em>]
|
||
|
[<strong>-rev</strong>]
|
||
|
[<strong>-out</strong> <em>file</em>]
|
||
|
[<strong>-inkey</strong> <em>file</em>]
|
||
|
[<strong>-keyform</strong> <strong>DER</strong>|<strong>PEM</strong>|<strong>ENGINE</strong>]
|
||
|
[<strong>-pubin</strong>]
|
||
|
[<strong>-certin</strong>]
|
||
|
[<strong>-sign</strong>]
|
||
|
[<strong>-verify</strong>]
|
||
|
[<strong>-encrypt</strong>]
|
||
|
[<strong>-decrypt</strong>]
|
||
|
[<strong>-pkcs</strong>]
|
||
|
[<strong>-x931</strong>]
|
||
|
[<strong>-oaep</strong>]
|
||
|
[<strong>-ssl</strong>]
|
||
|
[<strong>-raw</strong>]
|
||
|
[<strong>-pkcs</strong>]
|
||
|
[<strong>-ssl</strong>]
|
||
|
[<strong>-raw</strong>]
|
||
|
[<strong>-hexdump</strong>]
|
||
|
[<strong>-asn1parse</strong>]
|
||
|
[<strong>-engine</strong> <em>id</em>]
|
||
|
[<strong>-rand</strong> <em>files</em>]
|
||
|
[<strong>-writerand</strong> <em>file</em>]</p>
|
||
|
<p>
|
||
|
</p>
|
||
|
<hr />
|
||
|
<h1><a name="description">DESCRIPTION</a></h1>
|
||
|
<p>This command has been deprecated.
|
||
|
The <em>openssl-pkeyutl(1)</em> command should be used instead.</p>
|
||
|
<p>This command can be used to sign, verify, encrypt and decrypt
|
||
|
data using the RSA algorithm.</p>
|
||
|
<p>
|
||
|
</p>
|
||
|
<hr />
|
||
|
<h1><a name="options">OPTIONS</a></h1>
|
||
|
<dl>
|
||
|
<dt><strong><a name="help" class="item"><strong>-help</strong></a></strong></dt>
|
||
|
|
||
|
<dd>
|
||
|
<p>Print out a usage message.</p>
|
||
|
</dd>
|
||
|
<dt><strong><a name="in_filename" class="item"><strong>-in</strong> <em>filename</em></a></strong></dt>
|
||
|
|
||
|
<dd>
|
||
|
<p>This specifies the input filename to read data from or standard input
|
||
|
if this option is not specified.</p>
|
||
|
</dd>
|
||
|
<dt><strong><a name="passin_arg" class="item"><strong>-passin</strong> <em>arg</em></a></strong></dt>
|
||
|
|
||
|
<dd>
|
||
|
<p>The passphrase used in the output file.
|
||
|
See see <em>openssl(1)/Pass Phrase Options</em>.</p>
|
||
|
</dd>
|
||
|
<dt><strong><a name="rev" class="item"><strong>-rev</strong></a></strong></dt>
|
||
|
|
||
|
<dd>
|
||
|
<p>Reverse the order of the input.</p>
|
||
|
</dd>
|
||
|
<dt><strong><a name="out_filename" class="item"><strong>-out</strong> <em>filename</em></a></strong></dt>
|
||
|
|
||
|
<dd>
|
||
|
<p>Specifies the output filename to write to or standard output by
|
||
|
default.</p>
|
||
|
</dd>
|
||
|
<dt><strong><a name="inkey_file" class="item"><strong>-inkey</strong> <em>file</em></a></strong></dt>
|
||
|
|
||
|
<dd>
|
||
|
<p>The input key file, by default it should be an RSA private key.</p>
|
||
|
</dd>
|
||
|
<dt><strong><a name="keyform_der_pem_engine" class="item"><strong>-keyform</strong> <strong>DER</strong>|<strong>PEM</strong>|<strong>ENGINE</strong></a></strong></dt>
|
||
|
|
||
|
<dd>
|
||
|
<p>The key format; the default is <strong>PEM</strong>.
|
||
|
See <em>openssl(1)/Format Options</em> for details.</p>
|
||
|
</dd>
|
||
|
<dt><strong><a name="pubin" class="item"><strong>-pubin</strong></a></strong></dt>
|
||
|
|
||
|
<dd>
|
||
|
<p>The input file is an RSA public key.</p>
|
||
|
</dd>
|
||
|
<dt><strong><a name="certin" class="item"><strong>-certin</strong></a></strong></dt>
|
||
|
|
||
|
<dd>
|
||
|
<p>The input is a certificate containing an RSA public key.</p>
|
||
|
</dd>
|
||
|
<dt><strong><a name="sign" class="item"><strong>-sign</strong></a></strong></dt>
|
||
|
|
||
|
<dd>
|
||
|
<p>Sign the input data and output the signed result. This requires
|
||
|
an RSA private key.</p>
|
||
|
</dd>
|
||
|
<dt><strong><a name="verify" class="item"><strong>-verify</strong></a></strong></dt>
|
||
|
|
||
|
<dd>
|
||
|
<p>Verify the input data and output the recovered data.</p>
|
||
|
</dd>
|
||
|
<dt><strong><a name="encrypt" class="item"><strong>-encrypt</strong></a></strong></dt>
|
||
|
|
||
|
<dd>
|
||
|
<p>Encrypt the input data using an RSA public key.</p>
|
||
|
</dd>
|
||
|
<dt><strong><a name="decrypt" class="item"><strong>-decrypt</strong></a></strong></dt>
|
||
|
|
||
|
<dd>
|
||
|
<p>Decrypt the input data using an RSA private key.</p>
|
||
|
</dd>
|
||
|
<dt><strong><a name="pkcs_oaep_x931_ssl_raw" class="item"><strong>-pkcs</strong>, <strong>-oaep</strong>, <strong>-x931</strong> <strong>-ssl</strong>, <strong>-raw</strong></a></strong></dt>
|
||
|
|
||
|
<dd>
|
||
|
<p>The padding to use: PKCS#1 v1.5 (the default), PKCS#1 OAEP,
|
||
|
ANSI X9.31,
|
||
|
special padding used in SSL v2 backwards compatible handshakes,
|
||
|
or no padding, respectively.
|
||
|
For signatures, only <strong>-pkcs</strong> and <strong>-raw</strong> can be used.</p>
|
||
|
</dd>
|
||
|
<dt><strong><a name="hexdump" class="item"><strong>-hexdump</strong></a></strong></dt>
|
||
|
|
||
|
<dd>
|
||
|
<p>Hex dump the output data.</p>
|
||
|
</dd>
|
||
|
<dt><strong><a name="asn1parse" class="item"><strong>-asn1parse</strong></a></strong></dt>
|
||
|
|
||
|
<dd>
|
||
|
<p>Parse the ASN.1 output data, this is useful when combined with the
|
||
|
<strong>-verify</strong> option.</p>
|
||
|
</dd>
|
||
|
<dt><strong><a name="engine_id" class="item"><strong>-engine</strong> <em>id</em></a></strong></dt>
|
||
|
|
||
|
<dd>
|
||
|
<p>See <em>openssl(1)/Engine Options</em>.</p>
|
||
|
</dd>
|
||
|
<dt><strong><a name="rand_files_writerand_file" class="item"><strong>-rand</strong> <em>files</em>, <strong>-writerand</strong> <em>file</em></a></strong></dt>
|
||
|
|
||
|
<dd>
|
||
|
<p>See <em>openssl(1)/Random State Options</em> for details.</p>
|
||
|
</dd>
|
||
|
</dl>
|
||
|
<p>
|
||
|
</p>
|
||
|
<hr />
|
||
|
<h1><a name="notes">NOTES</a></h1>
|
||
|
<p>Since this command uses the RSA algorithm directly, it can only be
|
||
|
used to sign or verify small pieces of data.</p>
|
||
|
<p>
|
||
|
</p>
|
||
|
<hr />
|
||
|
<h1><a name="examples">EXAMPLES</a></h1>
|
||
|
<p>Examples equivalent to these can be found in the documentation for the
|
||
|
non-deprecated <em>openssl-pkeyutl(1)</em> command.</p>
|
||
|
<p>Sign some data using a private key:</p>
|
||
|
<pre>
|
||
|
openssl rsautl -sign -in file -inkey key.pem -out sig</pre>
|
||
|
<p>Recover the signed data</p>
|
||
|
<pre>
|
||
|
openssl rsautl -verify -in sig -inkey key.pem</pre>
|
||
|
<p>Examine the raw signed data:</p>
|
||
|
<pre>
|
||
|
openssl rsautl -verify -in sig -inkey key.pem -raw -hexdump</pre>
|
||
|
<pre>
|
||
|
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</pre>
|
||
|
<p>The PKCS#1 block formatting is evident from this. If this was done using
|
||
|
encrypt and decrypt the block would have been of type 2 (the second byte)
|
||
|
and random padding data visible instead of the 0xff bytes.</p>
|
||
|
<p>It is possible to analyse the signature of certificates using this
|
||
|
utility in conjunction with <a href="#asn1parse">openssl-asn1parse(1)</a>. Consider the self signed
|
||
|
example in <em class="file">certs/pca-cert.pem</em>. Running <a href="#asn1parse">openssl-asn1parse(1)</a> as follows
|
||
|
yields:</p>
|
||
|
<pre>
|
||
|
openssl asn1parse -in pca-cert.pem</pre>
|
||
|
<pre>
|
||
|
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</pre>
|
||
|
<p>The final BIT STRING contains the actual signature. It can be extracted with:</p>
|
||
|
<pre>
|
||
|
openssl asn1parse -in pca-cert.pem -out sig -noout -strparse 614</pre>
|
||
|
<p>The certificate public key can be extracted with:</p>
|
||
|
<pre>
|
||
|
openssl x509 -in test/testx509.pem -pubkey -noout >pubkey.pem</pre>
|
||
|
<p>The signature can be analysed with:</p>
|
||
|
<pre>
|
||
|
openssl rsautl -in sig -verify -asn1parse -inkey pubkey.pem -pubin</pre>
|
||
|
<pre>
|
||
|
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%..</pre>
|
||
|
<p>This is the parsed version of an ASN1 DigestInfo structure. It can be seen that
|
||
|
the digest used was md5. The actual part of the certificate that was signed can
|
||
|
be extracted with:</p>
|
||
|
<pre>
|
||
|
openssl asn1parse -in pca-cert.pem -out tbs -noout -strparse 4</pre>
|
||
|
<p>and its digest computed with:</p>
|
||
|
<pre>
|
||
|
openssl md5 -c tbs
|
||
|
MD5(tbs)= f3:46:9e:aa:1a:4a:73:c9:37:ea:93:00:48:25:08:b5</pre>
|
||
|
<p>which it can be seen agrees with the recovered value above.</p>
|
||
|
<p>
|
||
|
</p>
|
||
|
<hr />
|
||
|
<h1><a name="see_also">SEE ALSO</a></h1>
|
||
|
<p><em>openssl(1)</em>,
|
||
|
<em>openssl-pkeyutl(1)</em>,
|
||
|
<em>openssl-dgst(1)</em>,
|
||
|
<em>openssl-rsa(1)</em>,
|
||
|
<em>openssl-genrsa(1)</em></p>
|
||
|
<p>
|
||
|
</p>
|
||
|
<hr />
|
||
|
<h1><a name="history">HISTORY</a></h1>
|
||
|
<p>This command was deprecated in OpenSSL 3.0.</p>
|
||
|
<p>
|
||
|
</p>
|
||
|
<hr />
|
||
|
<h1><a name="copyright">COPYRIGHT</a></h1>
|
||
|
<p>Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.</p>
|
||
|
<p>Licensed under the Apache License 2.0 (the "License"). You may not use
|
||
|
this file except in compliance with the License. You can obtain a copy
|
||
|
in the file LICENSE in the source distribution or at
|
||
|
<a href="https://www.openssl.org/source/license.html">https://www.openssl.org/source/license.html</a>.</p>
|
||
|
|
||
|
</body>
|
||
|
|
||
|
</html>
|