mirror of https://github.com/openssl/openssl.git
				
				
				
			
		
			
				
	
	
		
			243 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			243 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
=pod
 | 
						|
{- OpenSSL::safe::output_do_not_edit_headers(); -}
 | 
						|
 | 
						|
=head1 NAME
 | 
						|
 | 
						|
openssl-rsautl - RSA command
 | 
						|
 | 
						|
=head1 SYNOPSIS
 | 
						|
 | 
						|
B<openssl> B<rsautl>
 | 
						|
[B<-help>]
 | 
						|
[B<-in> I<file>]
 | 
						|
[B<-passin> I<arg>]
 | 
						|
[B<-rev>]
 | 
						|
[B<-out> I<file>]
 | 
						|
[B<-inkey> I<filename>|I<uri>]
 | 
						|
[B<-keyform> B<DER>|B<PEM>|B<P12>|B<ENGINE>]
 | 
						|
[B<-pubin>]
 | 
						|
[B<-certin>]
 | 
						|
[B<-sign>]
 | 
						|
[B<-verify>]
 | 
						|
[B<-encrypt>]
 | 
						|
[B<-decrypt>]
 | 
						|
[B<-pkcs>]
 | 
						|
[B<-x931>]
 | 
						|
[B<-oaep>]
 | 
						|
[B<-raw>]
 | 
						|
[B<-hexdump>]
 | 
						|
[B<-asn1parse>]
 | 
						|
{- $OpenSSL::safe::opt_engine_synopsis -}{- $OpenSSL::safe::opt_r_synopsis -}
 | 
						|
{- $OpenSSL::safe::opt_provider_synopsis -}
 | 
						|
 | 
						|
=head1 DESCRIPTION
 | 
						|
 | 
						|
This command has been deprecated.
 | 
						|
The L<openssl-pkeyutl(1)> command should be used instead.
 | 
						|
 | 
						|
This command can be used to sign, verify, encrypt and decrypt
 | 
						|
data using the RSA algorithm.
 | 
						|
 | 
						|
=head1 OPTIONS
 | 
						|
 | 
						|
=over 4
 | 
						|
 | 
						|
=item B<-help>
 | 
						|
 | 
						|
Print out a usage message.
 | 
						|
 | 
						|
=item B<-in> I<filename>
 | 
						|
 | 
						|
This specifies the input filename to read data from or standard input
 | 
						|
if this option is not specified.
 | 
						|
 | 
						|
=item B<-passin> I<arg>
 | 
						|
 | 
						|
The passphrase used in the output file.
 | 
						|
See see L<openssl-passphrase-options(1)>.
 | 
						|
 | 
						|
=item B<-rev>
 | 
						|
 | 
						|
Reverse the order of the input.
 | 
						|
 | 
						|
=item B<-out> I<filename>
 | 
						|
 | 
						|
Specifies the output filename to write to or standard output by
 | 
						|
default.
 | 
						|
 | 
						|
=item B<-inkey> I<filename>|I<uri>
 | 
						|
 | 
						|
The input key, by default it should be an RSA private key.
 | 
						|
 | 
						|
=item B<-keyform> B<DER>|B<PEM>|B<P12>|B<ENGINE>
 | 
						|
 | 
						|
The key format; unspecified by default.
 | 
						|
See L<openssl-format-options(1)> for details.
 | 
						|
 | 
						|
=item B<-pubin>
 | 
						|
 | 
						|
The input file is an RSA public key.
 | 
						|
 | 
						|
=item B<-certin>
 | 
						|
 | 
						|
The input is a certificate containing an RSA public key.
 | 
						|
 | 
						|
=item B<-sign>
 | 
						|
 | 
						|
Sign the input data and output the signed result. This requires
 | 
						|
an RSA private key.
 | 
						|
 | 
						|
=item B<-verify>
 | 
						|
 | 
						|
Verify the input data and output the recovered data.
 | 
						|
 | 
						|
=item B<-encrypt>
 | 
						|
 | 
						|
Encrypt the input data using an RSA public key.
 | 
						|
 | 
						|
=item B<-decrypt>
 | 
						|
 | 
						|
Decrypt the input data using an RSA private key.
 | 
						|
 | 
						|
=item B<-pkcs>, B<-oaep>, B<-x931> B<-raw>
 | 
						|
 | 
						|
The padding to use: PKCS#1 v1.5 (the default), PKCS#1 OAEP,
 | 
						|
ANSI X9.31, or no padding, respectively.
 | 
						|
For signatures, only B<-pkcs> and B<-raw> can be used.
 | 
						|
 | 
						|
=item B<-hexdump>
 | 
						|
 | 
						|
Hex dump the output data.
 | 
						|
 | 
						|
=item B<-asn1parse>
 | 
						|
 | 
						|
Parse the ASN.1 output data, this is useful when combined with the
 | 
						|
B<-verify> option.
 | 
						|
 | 
						|
{- $OpenSSL::safe::opt_engine_item -}
 | 
						|
 | 
						|
{- $OpenSSL::safe::opt_r_item -}
 | 
						|
 | 
						|
{- $OpenSSL::safe::opt_provider_item -}
 | 
						|
 | 
						|
=back
 | 
						|
 | 
						|
=head1 NOTES
 | 
						|
 | 
						|
Since this command uses the RSA algorithm directly, it can only be
 | 
						|
used to sign or verify small pieces of data.
 | 
						|
 | 
						|
=head1 EXAMPLES
 | 
						|
 | 
						|
Examples equivalent to these can be found in the documentation for the
 | 
						|
non-deprecated L<openssl-pkeyutl(1)> command.
 | 
						|
 | 
						|
Sign some data using a private key:
 | 
						|
 | 
						|
 openssl rsautl -sign -in file -inkey key.pem -out sig
 | 
						|
 | 
						|
Recover the signed data
 | 
						|
 | 
						|
 openssl rsautl -verify -in sig -inkey key.pem
 | 
						|
 | 
						|
Examine the raw signed data:
 | 
						|
 | 
						|
 openssl rsautl -verify -in sig -inkey key.pem -raw -hexdump
 | 
						|
 | 
						|
 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
 | 
						|
 | 
						|
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.
 | 
						|
 | 
						|
It is possible to analyse the signature of certificates using this
 | 
						|
command in conjunction with L<openssl-asn1parse(1)>. Consider the self signed
 | 
						|
example in F<certs/pca-cert.pem>. Running L<openssl-asn1parse(1)> as follows
 | 
						|
yields:
 | 
						|
 | 
						|
 openssl asn1parse -in pca-cert.pem
 | 
						|
 | 
						|
    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
 | 
						|
 | 
						|
 | 
						|
The final BIT STRING contains the actual signature. It can be extracted with:
 | 
						|
 | 
						|
 openssl asn1parse -in pca-cert.pem -out sig -noout -strparse 614
 | 
						|
 | 
						|
The certificate public key can be extracted with:
 | 
						|
 | 
						|
 openssl x509 -in test/testx509.pem -pubkey -noout >pubkey.pem
 | 
						|
 | 
						|
The signature can be analysed with:
 | 
						|
 | 
						|
 openssl rsautl -in sig -verify -asn1parse -inkey pubkey.pem -pubin
 | 
						|
 | 
						|
    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%..
 | 
						|
 | 
						|
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:
 | 
						|
 | 
						|
 openssl asn1parse -in pca-cert.pem -out tbs -noout -strparse 4
 | 
						|
 | 
						|
and its digest computed with:
 | 
						|
 | 
						|
 openssl md5 -c tbs
 | 
						|
 MD5(tbs)= f3:46:9e:aa:1a:4a:73:c9:37:ea:93:00:48:25:08:b5
 | 
						|
 | 
						|
which it can be seen agrees with the recovered value above.
 | 
						|
 | 
						|
=head1 SEE ALSO
 | 
						|
 | 
						|
L<openssl(1)>,
 | 
						|
L<openssl-pkeyutl(1)>,
 | 
						|
L<openssl-dgst(1)>,
 | 
						|
L<openssl-rsa(1)>,
 | 
						|
L<openssl-genrsa(1)>
 | 
						|
 | 
						|
=head1 HISTORY
 | 
						|
 | 
						|
This command was deprecated in OpenSSL 3.0.
 | 
						|
 | 
						|
The B<-engine> option was deprecated in OpenSSL 3.0.
 | 
						|
 | 
						|
=head1 COPYRIGHT
 | 
						|
 | 
						|
Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved.
 | 
						|
 | 
						|
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
 | 
						|
L<https://www.openssl.org/source/license.html>.
 | 
						|
 | 
						|
=cut
 |