Home | History | Annotate | Line # | Download | only in man1
      1  1.1  christos =pod
      2  1.1  christos 
      3  1.1  christos =head1 NAME
      4  1.1  christos 
      5  1.1  christos openssl-pkcs8,
      6  1.1  christos pkcs8 - PKCS#8 format private key conversion tool
      7  1.1  christos 
      8  1.1  christos =head1 SYNOPSIS
      9  1.1  christos 
     10  1.1  christos B<openssl> B<pkcs8>
     11  1.1  christos [B<-help>]
     12  1.1  christos [B<-topk8>]
     13  1.1  christos [B<-inform PEM|DER>]
     14  1.1  christos [B<-outform PEM|DER>]
     15  1.1  christos [B<-in filename>]
     16  1.1  christos [B<-passin arg>]
     17  1.1  christos [B<-out filename>]
     18  1.1  christos [B<-passout arg>]
     19  1.1  christos [B<-iter count>]
     20  1.1  christos [B<-noiter>]
     21  1.1  christos [B<-rand file...>]
     22  1.1  christos [B<-writerand file>]
     23  1.1  christos [B<-nocrypt>]
     24  1.1  christos [B<-traditional>]
     25  1.1  christos [B<-v2 alg>]
     26  1.1  christos [B<-v2prf alg>]
     27  1.1  christos [B<-v1 alg>]
     28  1.1  christos [B<-engine id>]
     29  1.1  christos [B<-scrypt>]
     30  1.1  christos [B<-scrypt_N N>]
     31  1.1  christos [B<-scrypt_r r>]
     32  1.1  christos [B<-scrypt_p p>]
     33  1.1  christos 
     34  1.1  christos =head1 DESCRIPTION
     35  1.1  christos 
     36  1.1  christos The B<pkcs8> command processes private keys in PKCS#8 format. It can handle
     37  1.1  christos both unencrypted PKCS#8 PrivateKeyInfo format and EncryptedPrivateKeyInfo
     38  1.1  christos format with a variety of PKCS#5 (v1.5 and v2.0) and PKCS#12 algorithms.
     39  1.1  christos 
     40  1.1  christos =head1 OPTIONS
     41  1.1  christos 
     42  1.1  christos =over 4
     43  1.1  christos 
     44  1.1  christos =item B<-help>
     45  1.1  christos 
     46  1.1  christos Print out a usage message.
     47  1.1  christos 
     48  1.1  christos =item B<-topk8>
     49  1.1  christos 
     50  1.1  christos Normally a PKCS#8 private key is expected on input and a private key will be
     51  1.1  christos written to the output file. With the B<-topk8> option the situation is
     52  1.1  christos reversed: it reads a private key and writes a PKCS#8 format key.
     53  1.1  christos 
     54  1.1  christos =item B<-inform DER|PEM>
     55  1.1  christos 
     56  1.1  christos This specifies the input format: see L<KEY FORMATS> for more details. The default
     57  1.1  christos format is PEM.
     58  1.1  christos 
     59  1.1  christos =item B<-outform DER|PEM>
     60  1.1  christos 
     61  1.1  christos This specifies the output format: see L<KEY FORMATS> for more details. The default
     62  1.1  christos format is PEM.
     63  1.1  christos 
     64  1.1  christos =item B<-traditional>
     65  1.1  christos 
     66  1.1  christos When this option is present and B<-topk8> is not a traditional format private
     67  1.1  christos key is written.
     68  1.1  christos 
     69  1.1  christos =item B<-in filename>
     70  1.1  christos 
     71  1.1  christos This specifies the input filename to read a key from or standard input if this
     72  1.1  christos option is not specified. If the key is encrypted a pass phrase will be
     73  1.1  christos prompted for.
     74  1.1  christos 
     75  1.1  christos =item B<-passin arg>
     76  1.1  christos 
     77  1.1  christos The input file password source. For more information about the format of B<arg>
     78  1.1  christos see L<openssl(1)/Pass Phrase Options>.
     79  1.1  christos 
     80  1.1  christos =item B<-out filename>
     81  1.1  christos 
     82  1.1  christos This specifies the output filename to write a key to or standard output by
     83  1.1  christos default. If any encryption options are set then a pass phrase will be
     84  1.1  christos prompted for. The output filename should B<not> be the same as the input
     85  1.1  christos filename.
     86  1.1  christos 
     87  1.1  christos =item B<-passout arg>
     88  1.1  christos 
     89  1.1  christos The output file password source. For more information about the format of B<arg>
     90  1.1  christos see L<openssl(1)/Pass Phrase Options>.
     91  1.1  christos 
     92  1.1  christos =item B<-iter count>
     93  1.1  christos 
     94  1.1  christos When creating new PKCS#8 containers, use a given number of iterations on
     95  1.1  christos the password in deriving the encryption key for the PKCS#8 output.
     96  1.1  christos High values increase the time required to brute-force a PKCS#8 container.
     97  1.1  christos 
     98  1.1  christos =item B<-nocrypt>
     99  1.1  christos 
    100  1.1  christos PKCS#8 keys generated or input are normally PKCS#8 EncryptedPrivateKeyInfo
    101  1.1  christos structures using an appropriate password based encryption algorithm. With
    102  1.1  christos this option an unencrypted PrivateKeyInfo structure is expected or output.
    103  1.1  christos This option does not encrypt private keys at all and should only be used
    104  1.1  christos when absolutely necessary. Certain software such as some versions of Java
    105  1.1  christos code signing software used unencrypted private keys.
    106  1.1  christos 
    107  1.1  christos =item B<-rand file...>
    108  1.1  christos 
    109  1.1  christos A file or files containing random data used to seed the random number
    110  1.1  christos generator.
    111  1.1  christos Multiple files can be specified separated by an OS-dependent character.
    112  1.1  christos The separator is B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for
    113  1.1  christos all others.
    114  1.1  christos 
    115  1.1  christos =item [B<-writerand file>]
    116  1.1  christos 
    117  1.1  christos Writes random data to the specified I<file> upon exit.
    118  1.1  christos This can be used with a subsequent B<-rand> flag.
    119  1.1  christos 
    120  1.1  christos =item B<-v2 alg>
    121  1.1  christos 
    122  1.1  christos This option sets the PKCS#5 v2.0 algorithm.
    123  1.1  christos 
    124  1.1  christos The B<alg> argument is the encryption algorithm to use, valid values include
    125  1.1  christos B<aes128>, B<aes256> and B<des3>. If this option isn't specified then B<aes256>
    126  1.1  christos is used.
    127  1.1  christos 
    128  1.1  christos =item B<-v2prf alg>
    129  1.1  christos 
    130  1.1  christos This option sets the PRF algorithm to use with PKCS#5 v2.0. A typical value
    131  1.1  christos value would be B<hmacWithSHA256>. If this option isn't set then the default
    132  1.1  christos for the cipher is used or B<hmacWithSHA256> if there is no default.
    133  1.1  christos 
    134  1.1  christos Some implementations may not support custom PRF algorithms and may require
    135  1.1  christos the B<hmacWithSHA1> option to work.
    136  1.1  christos 
    137  1.1  christos =item B<-v1 alg>
    138  1.1  christos 
    139  1.1  christos This option indicates a PKCS#5 v1.5 or PKCS#12 algorithm should be used.  Some
    140  1.1  christos older implementations may not support PKCS#5 v2.0 and may require this option.
    141  1.1  christos If not specified PKCS#5 v2.0 form is used.
    142  1.1  christos 
    143  1.1  christos =item B<-engine id>
    144  1.1  christos 
    145  1.1  christos Specifying an engine (by its unique B<id> string) will cause B<pkcs8>
    146  1.1  christos to attempt to obtain a functional reference to the specified engine,
    147  1.1  christos thus initialising it if needed. The engine will then be set as the default
    148  1.1  christos for all available algorithms.
    149  1.1  christos 
    150  1.1  christos =item B<-scrypt>
    151  1.1  christos 
    152  1.1  christos Uses the B<scrypt> algorithm for private key encryption using default
    153  1.1  christos parameters: currently N=16384, r=8 and p=1 and AES in CBC mode with a 256 bit
    154  1.1  christos key. These parameters can be modified using the B<-scrypt_N>, B<-scrypt_r>,
    155  1.1  christos B<-scrypt_p> and B<-v2> options.
    156  1.1  christos 
    157  1.1  christos =item B<-scrypt_N N> B<-scrypt_r r> B<-scrypt_p p>
    158  1.1  christos 
    159  1.1  christos Sets the scrypt B<N>, B<r> or B<p> parameters.
    160  1.1  christos 
    161  1.1  christos =back
    162  1.1  christos 
    163  1.1  christos =head1 KEY FORMATS
    164  1.1  christos 
    165  1.1  christos Various different formats are used by the pkcs8 utility. These are detailed
    166  1.1  christos below.
    167  1.1  christos 
    168  1.1  christos If a key is being converted from PKCS#8 form (i.e. the B<-topk8> option is
    169  1.1  christos not used) then the input file must be in PKCS#8 format. An encrypted
    170  1.1  christos key is expected unless B<-nocrypt> is included.
    171  1.1  christos 
    172  1.1  christos If B<-topk8> is not used and B<PEM> mode is set the output file will be an
    173  1.1  christos unencrypted private key in PKCS#8 format. If the B<-traditional> option is
    174  1.1  christos used then a traditional format private key is written instead.
    175  1.1  christos 
    176  1.1  christos If B<-topk8> is not used and B<DER> mode is set the output file will be an
    177  1.1  christos unencrypted private key in traditional DER format.
    178  1.1  christos 
    179  1.1  christos If B<-topk8> is used then any supported private key can be used for the input
    180  1.1  christos file in a format specified by B<-inform>. The output file will be encrypted
    181  1.1  christos PKCS#8 format using the specified encryption parameters unless B<-nocrypt>
    182  1.1  christos is included.
    183  1.1  christos 
    184  1.1  christos =head1 NOTES
    185  1.1  christos 
    186  1.1  christos By default, when converting a key to PKCS#8 format, PKCS#5 v2.0 using 256 bit
    187  1.1  christos AES with HMAC and SHA256 is used.
    188  1.1  christos 
    189  1.1  christos Some older implementations do not support PKCS#5 v2.0 format and require
    190  1.1  christos the older PKCS#5 v1.5 form instead, possibly also requiring insecure weak
    191  1.1  christos encryption algorithms such as 56 bit DES.
    192  1.1  christos 
    193  1.1  christos The encrypted form of a PEM encode PKCS#8 files uses the following
    194  1.1  christos headers and footers:
    195  1.1  christos 
    196  1.1  christos  -----BEGIN ENCRYPTED PRIVATE KEY-----
    197  1.1  christos  -----END ENCRYPTED PRIVATE KEY-----
    198  1.1  christos 
    199  1.1  christos The unencrypted form uses:
    200  1.1  christos 
    201  1.1  christos  -----BEGIN PRIVATE KEY-----
    202  1.1  christos  -----END PRIVATE KEY-----
    203  1.1  christos 
    204  1.1  christos Private keys encrypted using PKCS#5 v2.0 algorithms and high iteration
    205  1.1  christos counts are more secure that those encrypted using the traditional
    206  1.1  christos SSLeay compatible formats. So if additional security is considered
    207  1.1  christos important the keys should be converted.
    208  1.1  christos 
    209  1.1  christos It is possible to write out DER encoded encrypted private keys in
    210  1.1  christos PKCS#8 format because the encryption details are included at an ASN1
    211  1.1  christos level whereas the traditional format includes them at a PEM level.
    212  1.1  christos 
    213  1.1  christos =head1 PKCS#5 v1.5 and PKCS#12 algorithms.
    214  1.1  christos 
    215  1.1  christos Various algorithms can be used with the B<-v1> command line option,
    216  1.1  christos including PKCS#5 v1.5 and PKCS#12. These are described in more detail
    217  1.1  christos below.
    218  1.1  christos 
    219  1.1  christos =over 4
    220  1.1  christos 
    221  1.1  christos =item B<PBE-MD2-DES PBE-MD5-DES>
    222  1.1  christos 
    223  1.1  christos These algorithms were included in the original PKCS#5 v1.5 specification.
    224  1.1  christos They only offer 56 bits of protection since they both use DES.
    225  1.1  christos 
    226  1.1  christos =item B<PBE-SHA1-RC2-64>, B<PBE-MD2-RC2-64>, B<PBE-MD5-RC2-64>, B<PBE-SHA1-DES>
    227  1.1  christos 
    228  1.1  christos These algorithms are not mentioned in the original PKCS#5 v1.5 specification
    229  1.1  christos but they use the same key derivation algorithm and are supported by some
    230  1.1  christos software. They are mentioned in PKCS#5 v2.0. They use either 64 bit RC2 or
    231  1.1  christos 56 bit DES.
    232  1.1  christos 
    233  1.1  christos =item B<PBE-SHA1-RC4-128>, B<PBE-SHA1-RC4-40>, B<PBE-SHA1-3DES>, B<PBE-SHA1-2DES>, B<PBE-SHA1-RC2-128>, B<PBE-SHA1-RC2-40>
    234  1.1  christos 
    235  1.1  christos These algorithms use the PKCS#12 password based encryption algorithm and
    236  1.1  christos allow strong encryption algorithms like triple DES or 128 bit RC2 to be used.
    237  1.1  christos 
    238  1.1  christos =back
    239  1.1  christos 
    240  1.1  christos =head1 EXAMPLES
    241  1.1  christos 
    242  1.1  christos Convert a private key to PKCS#8 format using default parameters (AES with
    243  1.1  christos 256 bit key and B<hmacWithSHA256>):
    244  1.1  christos 
    245  1.1  christos  openssl pkcs8 -in key.pem -topk8 -out enckey.pem
    246  1.1  christos 
    247  1.1  christos Convert a private key to PKCS#8 unencrypted format:
    248  1.1  christos 
    249  1.1  christos  openssl pkcs8 -in key.pem -topk8 -nocrypt -out enckey.pem
    250  1.1  christos 
    251  1.1  christos Convert a private key to PKCS#5 v2.0 format using triple DES:
    252  1.1  christos 
    253  1.1  christos  openssl pkcs8 -in key.pem -topk8 -v2 des3 -out enckey.pem
    254  1.1  christos 
    255  1.1  christos Convert a private key to PKCS#5 v2.0 format using AES with 256 bits in CBC
    256  1.1  christos mode and B<hmacWithSHA512> PRF:
    257  1.1  christos 
    258  1.1  christos  openssl pkcs8 -in key.pem -topk8 -v2 aes-256-cbc -v2prf hmacWithSHA512 -out enckey.pem
    259  1.1  christos 
    260  1.1  christos Convert a private key to PKCS#8 using a PKCS#5 1.5 compatible algorithm
    261  1.1  christos (DES):
    262  1.1  christos 
    263  1.1  christos  openssl pkcs8 -in key.pem -topk8 -v1 PBE-MD5-DES -out enckey.pem
    264  1.1  christos 
    265  1.1  christos Convert a private key to PKCS#8 using a PKCS#12 compatible algorithm
    266  1.1  christos (3DES):
    267  1.1  christos 
    268  1.1  christos  openssl pkcs8 -in key.pem -topk8 -out enckey.pem -v1 PBE-SHA1-3DES
    269  1.1  christos 
    270  1.1  christos Read a DER unencrypted PKCS#8 format private key:
    271  1.1  christos 
    272  1.1  christos  openssl pkcs8 -inform DER -nocrypt -in key.der -out key.pem
    273  1.1  christos 
    274  1.1  christos Convert a private key from any PKCS#8 encrypted format to traditional format:
    275  1.1  christos 
    276  1.1  christos  openssl pkcs8 -in pk8.pem -traditional -out key.pem
    277  1.1  christos 
    278  1.1  christos Convert a private key to PKCS#8 format, encrypting with AES-256 and with
    279  1.1  christos one million iterations of the password:
    280  1.1  christos 
    281  1.1  christos  openssl pkcs8 -in key.pem -topk8 -v2 aes-256-cbc -iter 1000000 -out pk8.pem
    282  1.1  christos 
    283  1.1  christos =head1 STANDARDS
    284  1.1  christos 
    285  1.1  christos Test vectors from this PKCS#5 v2.0 implementation were posted to the
    286  1.1  christos pkcs-tng mailing list using triple DES, DES and RC2 with high iteration
    287  1.1  christos counts, several people confirmed that they could decrypt the private
    288  1.1  christos keys produced and therefore, it can be assumed that the PKCS#5 v2.0
    289  1.1  christos implementation is reasonably accurate at least as far as these
    290  1.1  christos algorithms are concerned.
    291  1.1  christos 
    292  1.1  christos The format of PKCS#8 DSA (and other) private keys is not well documented:
    293  1.1  christos it is hidden away in PKCS#11 v2.01, section 11.9. OpenSSL's default DSA
    294  1.1  christos PKCS#8 private key format complies with this standard.
    295  1.1  christos 
    296  1.1  christos =head1 BUGS
    297  1.1  christos 
    298  1.1  christos There should be an option that prints out the encryption algorithm
    299  1.1  christos in use and other details such as the iteration count.
    300  1.1  christos 
    301  1.1  christos =head1 SEE ALSO
    302  1.1  christos 
    303  1.1  christos L<dsa(1)>, L<rsa(1)>, L<genrsa(1)>,
    304  1.1  christos L<gendsa(1)>
    305  1.1  christos 
    306  1.1  christos =head1 HISTORY
    307  1.1  christos 
    308  1.1  christos The B<-iter> option was added in OpenSSL 1.1.0.
    309  1.1  christos 
    310  1.1  christos =head1 COPYRIGHT
    311  1.1  christos 
    312  1.1  christos Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved.
    313  1.1  christos 
    314  1.1  christos Licensed under the OpenSSL license (the "License").  You may not use
    315  1.1  christos this file except in compliance with the License.  You can obtain a copy
    316  1.1  christos in the file LICENSE in the source distribution or at
    317  1.1  christos L<https://www.openssl.org/source/license.html>.
    318  1.1  christos 
    319  1.1  christos =cut
    320