blob: 038f00be44d13100ebd14fb4e7c69fd06bfbcf35 [file] [log] [blame]
Dr. Stephen Hensonbbb72002000-09-05 22:30:38 +00001=pod
2
3=head1 NAME
4
5rsautl - RSA utility
6
7=head1 SYNOPSIS
8
9B<openssl> B<rsautl>
A J Mohan Rao169394d2016-02-05 11:58:45 -050010[B<-help>]
Dr. Stephen Hensonbbb72002000-09-05 22:30:38 +000011[B<-in file>]
12[B<-out file>]
13[B<-inkey file>]
Viktor Dukhovni0c208022016-02-02 00:37:41 -050014[B<-keyform PEM|DER|ENGINE>]
Dr. Stephen Hensonbbb72002000-09-05 22:30:38 +000015[B<-pubin>]
16[B<-certin>]
17[B<-sign>]
18[B<-verify>]
19[B<-encrypt>]
20[B<-decrypt>]
21[B<-pkcs>]
22[B<-ssl>]
23[B<-raw>]
24[B<-hexdump>]
25[B<-asn1parse>]
26
27=head1 DESCRIPTION
28
29The B<rsautl> command can be used to sign, verify, encrypt and decrypt
30data using the RSA algorithm.
31
Rich Salz3dfda1a2016-12-12 11:14:40 -050032=head1 OPTIONS
Dr. Stephen Hensonbbb72002000-09-05 22:30:38 +000033
34=over 4
35
A J Mohan Rao169394d2016-02-05 11:58:45 -050036=item B<-help>
37
38Print out a usage message.
39
Dr. Stephen Hensonbbb72002000-09-05 22:30:38 +000040=item B<-in filename>
41
42This specifies the input filename to read data from or standard input
43if this option is not specified.
44
45=item B<-out filename>
46
47specifies the output filename to write to or standard output by
48default.
49
50=item B<-inkey file>
51
52the input key file, by default it should be an RSA private key.
53
Viktor Dukhovni0c208022016-02-02 00:37:41 -050054=item B<-keyform PEM|DER|ENGINE>
55
56the key format PEM, DER or ENGINE.
57
Dr. Stephen Hensonbbb72002000-09-05 22:30:38 +000058=item B<-pubin>
59
A J Mohan Rao169394d2016-02-05 11:58:45 -050060the input file is an RSA public key.
Dr. Stephen Hensonbbb72002000-09-05 22:30:38 +000061
62=item B<-certin>
63
Rich Salz1bc74512016-05-20 08:11:46 -040064the input is a certificate containing an RSA public key.
Dr. Stephen Hensonbbb72002000-09-05 22:30:38 +000065
66=item B<-sign>
67
68sign the input data and output the signed result. This requires
Soheil Rashidi9f07c402015-10-29 02:01:06 +033069an RSA private key.
Dr. Stephen Hensonbbb72002000-09-05 22:30:38 +000070
71=item B<-verify>
72
73verify the input data and output the recovered data.
74
75=item B<-encrypt>
76
77encrypt the input data using an RSA public key.
78
79=item B<-decrypt>
80
81decrypt the input data using an RSA private key.
82
Bodo Möller2b406602000-09-06 11:49:43 +000083=item B<-pkcs, -oaep, -ssl, -raw>
Dr. Stephen Hensonbbb72002000-09-05 22:30:38 +000084
Bodo Möller2b406602000-09-06 11:49:43 +000085the padding to use: PKCS#1 v1.5 (the default), PKCS#1 OAEP,
86special padding used in SSL v2 backwards compatible handshakes,
87or no padding, respectively.
88For signatures, only B<-pkcs> and B<-raw> can be used.
Dr. Stephen Hensonbbb72002000-09-05 22:30:38 +000089
90=item B<-hexdump>
91
92hex dump the output data.
93
94=item B<-asn1parse>
95
96asn1parse the output data, this is useful when combined with the
97B<-verify> option.
98
99=back
100
101=head1 NOTES
102
103B<rsautl> because it uses the RSA algorithm directly can only be
104used to sign or verify small pieces of data.
105
106=head1 EXAMPLES
107
Bodo Möller2b406602000-09-06 11:49:43 +0000108Sign some data using a private key:
Dr. Stephen Hensonbbb72002000-09-05 22:30:38 +0000109
110 openssl rsautl -sign -in file -inkey key.pem -out sig
111
112Recover the signed data
113
Lutz Jänicke0ea65942001-04-25 15:24:47 +0000114 openssl rsautl -verify -in sig -inkey key.pem
Dr. Stephen Hensonbbb72002000-09-05 22:30:38 +0000115
116Examine the raw signed data:
117
Lutz Jänicke0ea65942001-04-25 15:24:47 +0000118 openssl rsautl -verify -in file -inkey key.pem -raw -hexdump
Dr. Stephen Hensonbbb72002000-09-05 22:30:38 +0000119
120 0000 - 00 01 ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................
121 0010 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................
122 0020 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................
123 0030 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................
124 0040 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................
125 0050 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................
126 0060 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................
127 0070 - ff ff ff ff 00 68 65 6c-6c 6f 20 77 6f 72 6c 64 .....hello world
128
129The PKCS#1 block formatting is evident from this. If this was done using
130encrypt and decrypt the block would have been of type 2 (the second byte)
131and random padding data visible instead of the 0xff bytes.
132
133It is possible to analyse the signature of certificates using this
134utility in conjunction with B<asn1parse>. Consider the self signed
135example in certs/pca-cert.pem . Running B<asn1parse> as follows yields:
136
137 openssl asn1parse -in pca-cert.pem
138
Rich Salz1bc74512016-05-20 08:11:46 -0400139 0:d=0 hl=4 l= 742 cons: SEQUENCE
140 4:d=1 hl=4 l= 591 cons: SEQUENCE
141 8:d=2 hl=2 l= 3 cons: cont [ 0 ]
Dr. Stephen Hensonbbb72002000-09-05 22:30:38 +0000142 10:d=3 hl=2 l= 1 prim: INTEGER :02
143 13:d=2 hl=2 l= 1 prim: INTEGER :00
Rich Salz1bc74512016-05-20 08:11:46 -0400144 16:d=2 hl=2 l= 13 cons: SEQUENCE
Dr. Stephen Hensonbbb72002000-09-05 22:30:38 +0000145 18:d=3 hl=2 l= 9 prim: OBJECT :md5WithRSAEncryption
Rich Salz1bc74512016-05-20 08:11:46 -0400146 29:d=3 hl=2 l= 0 prim: NULL
147 31:d=2 hl=2 l= 92 cons: SEQUENCE
148 33:d=3 hl=2 l= 11 cons: SET
149 35:d=4 hl=2 l= 9 cons: SEQUENCE
Dr. Stephen Hensonbbb72002000-09-05 22:30:38 +0000150 37:d=5 hl=2 l= 3 prim: OBJECT :countryName
151 42:d=5 hl=2 l= 2 prim: PRINTABLESTRING :AU
152 ....
Rich Salz1bc74512016-05-20 08:11:46 -0400153 599:d=1 hl=2 l= 13 cons: SEQUENCE
Dr. Stephen Hensonbbb72002000-09-05 22:30:38 +0000154 601:d=2 hl=2 l= 9 prim: OBJECT :md5WithRSAEncryption
Rich Salz1bc74512016-05-20 08:11:46 -0400155 612:d=2 hl=2 l= 0 prim: NULL
156 614:d=1 hl=3 l= 129 prim: BIT STRING
Dr. Stephen Hensonbbb72002000-09-05 22:30:38 +0000157
158
159The final BIT STRING contains the actual signature. It can be extracted with:
160
161 openssl asn1parse -in pca-cert.pem -out sig -noout -strparse 614
162
163The certificate public key can be extracted with:
Rich Salz1bc74512016-05-20 08:11:46 -0400164
Dr. Stephen Hensona529a802007-09-17 17:54:31 +0000165 openssl x509 -in test/testx509.pem -pubkey -noout >pubkey.pem
Dr. Stephen Hensonbbb72002000-09-05 22:30:38 +0000166
167The signature can be analysed with:
168
169 openssl rsautl -in sig -verify -asn1parse -inkey pubkey.pem -pubin
170
Rich Salz1bc74512016-05-20 08:11:46 -0400171 0:d=0 hl=2 l= 32 cons: SEQUENCE
172 2:d=1 hl=2 l= 12 cons: SEQUENCE
Dr. Stephen Hensonbbb72002000-09-05 22:30:38 +0000173 4:d=2 hl=2 l= 8 prim: OBJECT :md5
Rich Salz1bc74512016-05-20 08:11:46 -0400174 14:d=2 hl=2 l= 0 prim: NULL
175 16:d=1 hl=2 l= 16 prim: OCTET STRING
Dr. Stephen Hensonbbb72002000-09-05 22:30:38 +0000176 0000 - f3 46 9e aa 1a 4a 73 c9-37 ea 93 00 48 25 08 b5 .F...Js.7...H%..
177
178This is the parsed version of an ASN1 DigestInfo structure. It can be seen that
179the digest used was md5. The actual part of the certificate that was signed can
180be extracted with:
181
182 openssl asn1parse -in pca-cert.pem -out tbs -noout -strparse 4
183
184and its digest computed with:
185
186 openssl md5 -c tbs
187 MD5(tbs)= f3:46:9e:aa:1a:4a:73:c9:37:ea:93:00:48:25:08:b5
188
189which it can be seen agrees with the recovered value above.
190
191=head1 SEE ALSO
192
Rich Salz9b869742015-08-17 15:21:33 -0400193L<dgst(1)>, L<rsa(1)>, L<genrsa(1)>
Rich Salz99ec4fd2016-05-18 10:16:40 -0400194
Rich Salze2f92612016-05-18 11:44:05 -0400195=head1 COPYRIGHT
196
197Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
198
199Licensed under the OpenSSL license (the "License"). You may not use
200this file except in compliance with the License. You can obtain a copy
201in the file LICENSE in the source distribution or at
202L<https://www.openssl.org/source/license.html>.
203
204=cut