Home | History | Annotate | Line # | Download | only in man1
      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 The input file is an RSA public key.
     80 
     81 =item B<-certin>
     82 
     83 The input is a certificate containing an RSA public key.
     84 
     85 =item B<-sign>
     86 
     87 Sign the input data and output the signed result. This requires
     88 an RSA private key.
     89 
     90 =item B<-verify>
     91 
     92 Verify the input data and output the recovered data.
     93 
     94 =item B<-encrypt>
     95 
     96 Encrypt the input data using an RSA public key.
     97 
     98 =item B<-decrypt>
     99 
    100 Decrypt the input data using an RSA private key.
    101 
    102 =item B<-pkcs>, B<-oaep>, B<-x931>, B<-raw>
    103 
    104 The padding to use: PKCS#1 v1.5 (the default), PKCS#1 OAEP,
    105 ANSI X9.31, or no padding, respectively.
    106 For signatures, only B<-pkcs> and B<-raw> can be used.
    107 
    108 =item B<-hexdump>
    109 
    110 Hex dump the output data.
    111 
    112 =item B<-asn1parse>
    113 
    114 Parse the ASN.1 output data, this is useful when combined with the
    115 B<-verify> option.
    116 
    117 {- $OpenSSL::safe::opt_engine_item -}
    118 
    119 {- $OpenSSL::safe::opt_r_item -}
    120 
    121 {- $OpenSSL::safe::opt_provider_item -}
    122 
    123 =back
    124 
    125 =head1 NOTES
    126 
    127 Since this command uses the RSA algorithm directly, it can only be
    128 used to sign or verify small pieces of data.
    129 
    130 =head1 EXAMPLES
    131 
    132 Examples equivalent to these can be found in the documentation for the
    133 non-deprecated L<openssl-pkeyutl(1)> command.
    134 
    135 Sign some data using a private key:
    136 
    137  openssl rsautl -sign -in file -inkey key.pem -out sig
    138 
    139 Recover the signed data
    140 
    141  openssl rsautl -verify -in sig -inkey key.pem
    142 
    143 Examine the raw signed data:
    144 
    145  openssl rsautl -verify -in sig -inkey key.pem -raw -hexdump
    146 
    147  0000 - 00 01 ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
    148  0010 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
    149  0020 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
    150  0030 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
    151  0040 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
    152  0050 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
    153  0060 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
    154  0070 - ff ff ff ff 00 68 65 6c-6c 6f 20 77 6f 72 6c 64   .....hello world
    155 
    156 The PKCS#1 block formatting is evident from this. If this was done using
    157 encrypt and decrypt the block would have been of type 2 (the second byte)
    158 and random padding data visible instead of the 0xff bytes.
    159 
    160 It is possible to analyse the signature of certificates using this
    161 command in conjunction with L<openssl-asn1parse(1)>. Consider the self signed
    162 example in F<certs/pca-cert.pem>. Running L<openssl-asn1parse(1)> as follows
    163 yields:
    164 
    165  openssl asn1parse -in pca-cert.pem
    166 
    167     0:d=0  hl=4 l= 742 cons: SEQUENCE
    168     4:d=1  hl=4 l= 591 cons:  SEQUENCE
    169     8:d=2  hl=2 l=   3 cons:   cont [ 0 ]
    170    10:d=3  hl=2 l=   1 prim:    INTEGER           :02
    171    13:d=2  hl=2 l=   1 prim:   INTEGER           :00
    172    16:d=2  hl=2 l=  13 cons:   SEQUENCE
    173    18:d=3  hl=2 l=   9 prim:    OBJECT            :md5WithRSAEncryption
    174    29:d=3  hl=2 l=   0 prim:    NULL
    175    31:d=2  hl=2 l=  92 cons:   SEQUENCE
    176    33:d=3  hl=2 l=  11 cons:    SET
    177    35:d=4  hl=2 l=   9 cons:     SEQUENCE
    178    37:d=5  hl=2 l=   3 prim:      OBJECT            :countryName
    179    42:d=5  hl=2 l=   2 prim:      PRINTABLESTRING   :AU
    180   ....
    181   599:d=1  hl=2 l=  13 cons:  SEQUENCE
    182   601:d=2  hl=2 l=   9 prim:   OBJECT            :md5WithRSAEncryption
    183   612:d=2  hl=2 l=   0 prim:   NULL
    184   614:d=1  hl=3 l= 129 prim:  BIT STRING
    185 
    186 
    187 The final BIT STRING contains the actual signature. It can be extracted with:
    188 
    189  openssl asn1parse -in pca-cert.pem -out sig -noout -strparse 614
    190 
    191 The certificate public key can be extracted with:
    192 
    193  openssl x509 -in test/testx509.pem -pubkey -noout >pubkey.pem
    194 
    195 The signature can be analysed with:
    196 
    197  openssl rsautl -in sig -verify -asn1parse -inkey pubkey.pem -pubin
    198 
    199     0:d=0  hl=2 l=  32 cons: SEQUENCE
    200     2:d=1  hl=2 l=  12 cons:  SEQUENCE
    201     4:d=2  hl=2 l=   8 prim:   OBJECT            :md5
    202    14:d=2  hl=2 l=   0 prim:   NULL
    203    16:d=1  hl=2 l=  16 prim:  OCTET STRING
    204       0000 - f3 46 9e aa 1a 4a 73 c9-37 ea 93 00 48 25 08 b5   .F...Js.7...H%..
    205 
    206 This is the parsed version of an ASN1 DigestInfo structure. It can be seen that
    207 the digest used was md5. The actual part of the certificate that was signed can
    208 be extracted with:
    209 
    210  openssl asn1parse -in pca-cert.pem -out tbs -noout -strparse 4
    211 
    212 and its digest computed with:
    213 
    214  openssl md5 -c tbs
    215  MD5(tbs)= f3:46:9e:aa:1a:4a:73:c9:37:ea:93:00:48:25:08:b5
    216 
    217 which it can be seen agrees with the recovered value above.
    218 
    219 =head1 SEE ALSO
    220 
    221 L<openssl(1)>,
    222 L<openssl-pkeyutl(1)>,
    223 L<openssl-dgst(1)>,
    224 L<openssl-rsa(1)>,
    225 L<openssl-genrsa(1)>
    226 
    227 =head1 HISTORY
    228 
    229 This command was deprecated in OpenSSL 3.0.
    230 
    231 The B<-engine> option was deprecated in OpenSSL 3.0.
    232 
    233 =head1 COPYRIGHT
    234 
    235 Copyright 2000-2023 The OpenSSL Project Authors. All Rights Reserved.
    236 
    237 Licensed under the Apache License 2.0 (the "License").  You may not use
    238 this file except in compliance with the License.  You can obtain a copy
    239 in the file LICENSE in the source distribution or at
    240 L<https://www.openssl.org/source/license.html>.
    241 
    242 =cut
    243