1 =pod 2 {- OpenSSL::safe::output_do_not_edit_headers(); -} 3 4 =head1 NAME 5 6 openssl-rsautl - RSA command 7 8 =head1 SYNOPSIS 9 10 B<openssl> B<rsautl> 11 [B<-help>] 12 [B<-in> I<file>] 13 [B<-passin> I<arg>] 14 [B<-rev>] 15 [B<-out> I<file>] 16 [B<-inkey> I<filename>|I<uri>] 17 [B<-keyform> B<DER>|B<PEM>|B<P12>|B<ENGINE>] 18 [B<-pubin>] 19 [B<-certin>] 20 [B<-sign>] 21 [B<-verify>] 22 [B<-encrypt>] 23 [B<-decrypt>] 24 [B<-pkcs>] 25 [B<-x931>] 26 [B<-oaep>] 27 [B<-raw>] 28 [B<-hexdump>] 29 [B<-asn1parse>] 30 {- $OpenSSL::safe::opt_engine_synopsis -}{- $OpenSSL::safe::opt_r_synopsis -} 31 {- $OpenSSL::safe::opt_provider_synopsis -} 32 33 =head1 DESCRIPTION 34 35 This command has been deprecated. 36 The L<openssl-pkeyutl(1)> command should be used instead. 37 38 This command can be used to sign, verify, encrypt and decrypt 39 data using the RSA algorithm. 40 41 =head1 OPTIONS 42 43 =over 4 44 45 =item B<-help> 46 47 Print out a usage message. 48 49 =item B<-in> I<filename> 50 51 This specifies the input filename to read data from or standard input 52 if this option is not specified. 53 54 =item B<-passin> I<arg> 55 56 The passphrase used in the output file. 57 See see L<openssl-passphrase-options(1)>. 58 59 =item B<-rev> 60 61 Reverse the order of the input. 62 63 =item B<-out> I<filename> 64 65 Specifies the output filename to write to or standard output by 66 default. 67 68 =item B<-inkey> I<filename>|I<uri> 69 70 The input key, by default it should be an RSA private key. 71 72 =item B<-keyform> B<DER>|B<PEM>|B<P12>|B<ENGINE> 73 74 The key format; unspecified by default. 75 See L<openssl-format-options(1)> for details. 76 77 =item B<-pubin> 78 79 By default a private key is read from the key input. 80 With this option a public key is read instead. 81 If the input contains no public key but a private key, its public part is used. 82 83 =item B<-certin> 84 85 The input is a certificate containing an RSA public key. 86 87 =item B<-sign> 88 89 Sign the input data and output the signed result. This requires 90 an RSA private key. 91 92 =item B<-verify> 93 94 Verify the input data and output the recovered data. 95 96 =item B<-encrypt> 97 98 Encrypt the input data using an RSA public key. 99 100 =item B<-decrypt> 101 102 Decrypt the input data using an RSA private key. 103 104 =item B<-pkcs>, B<-oaep>, B<-x931>, B<-raw> 105 106 The padding to use: PKCS#1 v1.5 (the default), PKCS#1 OAEP, 107 ANSI X9.31, or no padding, respectively. 108 For signatures, only B<-pkcs> and B<-raw> can be used. 109 110 Note: because of protection against Bleichenbacher attacks, decryption 111 using PKCS#1 v1.5 mode will not return errors in case padding check failed. 112 Use B<-raw> and inspect the returned value manually to check if the 113 padding is correct. 114 115 =item B<-hexdump> 116 117 Hex dump the output data. 118 119 =item B<-asn1parse> 120 121 Parse the ASN.1 output data, this is useful when combined with the 122 B<-verify> option. 123 124 {- $OpenSSL::safe::opt_engine_item -} 125 126 {- $OpenSSL::safe::opt_r_item -} 127 128 {- $OpenSSL::safe::opt_provider_item -} 129 130 =back 131 132 =head1 NOTES 133 134 Since this command uses the RSA algorithm directly, it can only be 135 used to sign or verify small pieces of data. 136 137 =head1 EXAMPLES 138 139 Examples equivalent to these can be found in the documentation for the 140 non-deprecated L<openssl-pkeyutl(1)> command. 141 142 Sign some data using a private key: 143 144 openssl rsautl -sign -in file -inkey key.pem -out sig 145 146 Recover the signed data 147 148 openssl rsautl -verify -in sig -inkey key.pem 149 150 Examine the raw signed data: 151 152 openssl rsautl -verify -in sig -inkey key.pem -raw -hexdump 153 154 0000 - 00 01 ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................ 155 0010 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................ 156 0020 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................ 157 0030 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................ 158 0040 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................ 159 0050 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................ 160 0060 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................ 161 0070 - ff ff ff ff 00 68 65 6c-6c 6f 20 77 6f 72 6c 64 .....hello world 162 163 The PKCS#1 block formatting is evident from this. If this was done using 164 encrypt and decrypt the block would have been of type 2 (the second byte) 165 and random padding data visible instead of the 0xff bytes. 166 167 It is possible to analyse the signature of certificates using this 168 command in conjunction with L<openssl-asn1parse(1)>. Consider the self signed 169 example in F<certs/pca-cert.pem>. Running L<openssl-asn1parse(1)> as follows 170 yields: 171 172 openssl asn1parse -in pca-cert.pem 173 174 0:d=0 hl=4 l= 742 cons: SEQUENCE 175 4:d=1 hl=4 l= 591 cons: SEQUENCE 176 8:d=2 hl=2 l= 3 cons: cont [ 0 ] 177 10:d=3 hl=2 l= 1 prim: INTEGER :02 178 13:d=2 hl=2 l= 1 prim: INTEGER :00 179 16:d=2 hl=2 l= 13 cons: SEQUENCE 180 18:d=3 hl=2 l= 9 prim: OBJECT :md5WithRSAEncryption 181 29:d=3 hl=2 l= 0 prim: NULL 182 31:d=2 hl=2 l= 92 cons: SEQUENCE 183 33:d=3 hl=2 l= 11 cons: SET 184 35:d=4 hl=2 l= 9 cons: SEQUENCE 185 37:d=5 hl=2 l= 3 prim: OBJECT :countryName 186 42:d=5 hl=2 l= 2 prim: PRINTABLESTRING :AU 187 .... 188 599:d=1 hl=2 l= 13 cons: SEQUENCE 189 601:d=2 hl=2 l= 9 prim: OBJECT :md5WithRSAEncryption 190 612:d=2 hl=2 l= 0 prim: NULL 191 614:d=1 hl=3 l= 129 prim: BIT STRING 192 193 194 The final BIT STRING contains the actual signature. It can be extracted with: 195 196 openssl asn1parse -in pca-cert.pem -out sig -noout -strparse 614 197 198 The certificate public key can be extracted with: 199 200 openssl x509 -in test/testx509.pem -pubkey -noout >pubkey.pem 201 202 The signature can be analysed with: 203 204 openssl rsautl -in sig -verify -asn1parse -inkey pubkey.pem -pubin 205 206 0:d=0 hl=2 l= 32 cons: SEQUENCE 207 2:d=1 hl=2 l= 12 cons: SEQUENCE 208 4:d=2 hl=2 l= 8 prim: OBJECT :md5 209 14:d=2 hl=2 l= 0 prim: NULL 210 16:d=1 hl=2 l= 16 prim: OCTET STRING 211 0000 - f3 46 9e aa 1a 4a 73 c9-37 ea 93 00 48 25 08 b5 .F...Js.7...H%.. 212 213 This is the parsed version of an ASN1 DigestInfo structure. It can be seen that 214 the digest used was md5. The actual part of the certificate that was signed can 215 be extracted with: 216 217 openssl asn1parse -in pca-cert.pem -out tbs -noout -strparse 4 218 219 and its digest computed with: 220 221 openssl md5 -c tbs 222 MD5(tbs)= f3:46:9e:aa:1a:4a:73:c9:37:ea:93:00:48:25:08:b5 223 224 which it can be seen agrees with the recovered value above. 225 226 =head1 SEE ALSO 227 228 L<openssl(1)>, 229 L<openssl-pkeyutl(1)>, 230 L<openssl-dgst(1)>, 231 L<openssl-rsa(1)>, 232 L<openssl-genrsa(1)> 233 234 =head1 HISTORY 235 236 This command was deprecated in OpenSSL 3.0. 237 238 The B<-engine> option was deprecated in OpenSSL 3.0. 239 240 =head1 COPYRIGHT 241 242 Copyright 2000-2023 The OpenSSL Project Authors. All Rights Reserved. 243 244 Licensed under the Apache License 2.0 (the "License"). You may not use 245 this file except in compliance with the License. You can obtain a copy 246 in the file LICENSE in the source distribution or at 247 L<https://www.openssl.org/source/license.html>. 248 249 =cut 250