| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | =pod | 
					
						
							| 
									
										
										
										
											2019-10-31 11:35:08 +08:00
										 |  |  | {- OpenSSL::safe::output_do_not_edit_headers(); -} | 
					
						
							| 
									
										
										
										
											2019-10-13 05:45:56 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | =head1 NAME | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-19 00:52:12 +08:00
										 |  |  | openssl-pkcs8 - PKCS#8 format private key conversion command | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 SYNOPSIS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | B<openssl> B<pkcs8> | 
					
						
							| 
									
										
										
										
											2016-02-06 00:58:45 +08:00
										 |  |  | [B<-help>] | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | [B<-topk8>] | 
					
						
							| 
									
										
										
										
											2019-09-26 03:20:11 +08:00
										 |  |  | [B<-inform> B<DER>|B<PEM>] | 
					
						
							|  |  |  | [B<-outform> B<DER>|B<PEM>] | 
					
						
							|  |  |  | [B<-in> I<filename>] | 
					
						
							|  |  |  | [B<-passin> I<arg>] | 
					
						
							|  |  |  | [B<-out> I<filename>] | 
					
						
							|  |  |  | [B<-passout> I<arg>] | 
					
						
							|  |  |  | [B<-iter> I<count>] | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | [B<-noiter>] | 
					
						
							|  |  |  | [B<-nocrypt>] | 
					
						
							| 
									
										
										
										
											2016-05-17 21:15:20 +08:00
										 |  |  | [B<-traditional>] | 
					
						
							| 
									
										
										
										
											2019-10-02 23:13:03 +08:00
										 |  |  | [B<-v2> I<alg>] | 
					
						
							|  |  |  | [B<-v2prf> I<alg>] | 
					
						
							|  |  |  | [B<-v1> I<alg>] | 
					
						
							| 
									
										
										
										
											2015-05-21 21:17:32 +08:00
										 |  |  | [B<-scrypt>] | 
					
						
							| 
									
										
										
										
											2019-09-26 03:20:11 +08:00
										 |  |  | [B<-scrypt_N> I<N>] | 
					
						
							|  |  |  | [B<-scrypt_r> I<r>] | 
					
						
							|  |  |  | [B<-scrypt_p> I<p>] | 
					
						
							| 
									
										
										
										
											2019-10-13 05:45:56 +08:00
										 |  |  | {- $OpenSSL::safe::opt_r_synopsis -} | 
					
						
							| 
									
										
										
										
											2020-09-21 17:56:01 +08:00
										 |  |  | {- $OpenSSL::safe::opt_engine_synopsis -}{- $OpenSSL::safe::opt_provider_synopsis -} | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 DESCRIPTION | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
											
												Command docs: fix up command references
Almost all OpenSSL commands are in reality 'openssl cmd', so make sure
they are refered to like that and not just as the sub-command.
Self-references are avoided as much as is possible, and replaced with
"this command".  In some cases, we even avoid that with a slight
rewrite of the sentence or paragrah they were in.  However, in the few
cases where a self-reference is still admissible, they are done in
bold, i.e. openssl-speed.pod references itself like this:
    B<openssl speed>
References to other commands are done as manual links, i.e. CA.pl.pod
references 'openssl req' like this: L<openssl-req(1)>
Some commands are examples rather than references; we enclose those in
C<>.
While we are it, we abolish "utility", replacing it with "command", or
remove it entirely in some cases.
Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org>
(Merged from https://github.com/openssl/openssl/pull/10065)
											
										 
											2019-10-02 01:43:36 +08:00
										 |  |  | This command processes private keys in PKCS#8 format. It can handle | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | both unencrypted PKCS#8 PrivateKeyInfo format and EncryptedPrivateKeyInfo | 
					
						
							|  |  |  | format with a variety of PKCS#5 (v1.5 and v2.0) and PKCS#12 algorithms. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-13 00:14:40 +08:00
										 |  |  | =head1 OPTIONS | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =over 4 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-06 00:58:45 +08:00
										 |  |  | =item B<-help> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Print out a usage message. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | =item B<-topk8> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-17 21:15:20 +08:00
										 |  |  | Normally a PKCS#8 private key is expected on input and a private key will be | 
					
						
							|  |  |  | written to the output file. With the B<-topk8> option the situation is | 
					
						
							|  |  |  | reversed: it reads a private key and writes a PKCS#8 format key. | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-10 09:48:33 +08:00
										 |  |  | =item B<-inform> B<DER>|B<PEM>, B<-outform> B<DER>|B<PEM> | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-10 09:48:33 +08:00
										 |  |  | The input and formats; the default is B<PEM>. | 
					
						
							| 
									
										
										
										
											2020-12-10 04:56:51 +08:00
										 |  |  | See L<openssl-format-options(1)> for details. | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-10 09:48:33 +08:00
										 |  |  | If a key is being converted from PKCS#8 form (i.e. the B<-topk8> option is | 
					
						
							|  |  |  | not used) then the input file must be in PKCS#8 format. An encrypted | 
					
						
							|  |  |  | key is expected unless B<-nocrypt> is included. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If B<-topk8> is not used and B<PEM> mode is set the output file will be an | 
					
						
							|  |  |  | unencrypted private key in PKCS#8 format. If the B<-traditional> option is | 
					
						
							|  |  |  | used then a traditional format private key is written instead. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If B<-topk8> is not used and B<DER> mode is set the output file will be an | 
					
						
							|  |  |  | unencrypted private key in traditional DER format. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If B<-topk8> is used then any supported private key can be used for the input | 
					
						
							|  |  |  | file in a format specified by B<-inform>. The output file will be encrypted | 
					
						
							|  |  |  | PKCS#8 format using the specified encryption parameters unless B<-nocrypt> | 
					
						
							|  |  |  | is included. | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-17 21:15:20 +08:00
										 |  |  | =item B<-traditional> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | When this option is present and B<-topk8> is not a traditional format private | 
					
						
							|  |  |  | key is written. | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-26 03:20:11 +08:00
										 |  |  | =item B<-in> I<filename> | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | This specifies the input filename to read a key from or standard input if this | 
					
						
							|  |  |  | option is not specified. If the key is encrypted a pass phrase will be | 
					
						
							|  |  |  | prompted for. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-09 01:10:04 +08:00
										 |  |  | =item B<-passin> I<arg>, B<-passout> I<arg> | 
					
						
							| 
									
										
										
										
											2000-01-02 00:42:49 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-09 01:10:04 +08:00
										 |  |  | The password source for the input and output file. | 
					
						
							|  |  |  | For more information about the format of B<arg> | 
					
						
							| 
									
										
										
										
											2020-12-10 04:56:51 +08:00
										 |  |  | see L<openssl-passphrase-options(1)>. | 
					
						
							| 
									
										
										
										
											2000-01-02 00:42:49 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-26 03:20:11 +08:00
										 |  |  | =item B<-out> I<filename> | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | This specifies the output filename to write a key to or standard output by | 
					
						
							| 
									
										
										
										
											1999-11-11 08:48:39 +08:00
										 |  |  | default. If any encryption options are set then a pass phrase will be | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | prompted for. The output filename should B<not> be the same as the input | 
					
						
							|  |  |  | filename. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-26 03:20:11 +08:00
										 |  |  | =item B<-iter> I<count> | 
					
						
							| 
									
										
										
										
											2014-06-04 06:24:49 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-14 03:27:57 +08:00
										 |  |  | When creating new PKCS#8 containers, use a given number of iterations on | 
					
						
							|  |  |  | the password in deriving the encryption key for the PKCS#8 output. | 
					
						
							|  |  |  | High values increase the time required to brute-force a PKCS#8 container. | 
					
						
							| 
									
										
										
										
											2021-05-17 17:04:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =item B<-noiter> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | When creating new PKCS#8 containers, use 1 as iteration count. | 
					
						
							| 
									
										
										
										
											2014-06-04 06:24:49 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-11-11 08:48:39 +08:00
										 |  |  | =item B<-nocrypt> | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-11-11 08:48:39 +08:00
										 |  |  | PKCS#8 keys generated or input are normally PKCS#8 EncryptedPrivateKeyInfo | 
					
						
							|  |  |  | structures using an appropriate password based encryption algorithm. With | 
					
						
							|  |  |  | this option an unencrypted PrivateKeyInfo structure is expected or output. | 
					
						
							|  |  |  | This option does not encrypt private keys at all and should only be used | 
					
						
							|  |  |  | when absolutely necessary. Certain software such as some versions of Java | 
					
						
							|  |  |  | code signing software used unencrypted private keys. | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-02 23:13:03 +08:00
										 |  |  | =item B<-v2> I<alg> | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-11 19:41:58 +08:00
										 |  |  | This option sets the PKCS#5 v2.0 algorithm. | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-02 00:16:29 +08:00
										 |  |  | The I<alg> argument is the encryption algorithm to use, valid values include | 
					
						
							| 
									
										
										
										
											2016-05-11 19:41:58 +08:00
										 |  |  | B<aes128>, B<aes256> and B<des3>. If this option isn't specified then B<aes256> | 
					
						
							|  |  |  | is used. | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-02 23:13:03 +08:00
										 |  |  | =item B<-v2prf> I<alg> | 
					
						
							| 
									
										
										
										
											2014-03-01 01:23:54 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | This option sets the PRF algorithm to use with PKCS#5 v2.0. A typical value | 
					
						
							| 
									
										
										
										
											2016-05-11 19:41:58 +08:00
										 |  |  | value would be B<hmacWithSHA256>. If this option isn't set then the default | 
					
						
							|  |  |  | for the cipher is used or B<hmacWithSHA256> if there is no default. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Some implementations may not support custom PRF algorithms and may require | 
					
						
							|  |  |  | the B<hmacWithSHA1> option to work. | 
					
						
							| 
									
										
										
										
											2014-03-01 01:23:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-02 23:13:03 +08:00
										 |  |  | =item B<-v1> I<alg> | 
					
						
							| 
									
										
										
										
											1999-12-23 10:02:42 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-11 19:41:58 +08:00
										 |  |  | This option indicates a PKCS#5 v1.5 or PKCS#12 algorithm should be used.  Some | 
					
						
							|  |  |  | older implementations may not support PKCS#5 v2.0 and may require this option. | 
					
						
							| 
									
										
										
										
											2016-05-17 21:15:20 +08:00
										 |  |  | If not specified PKCS#5 v2.0 form is used. | 
					
						
							| 
									
										
										
										
											1999-12-23 10:02:42 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-21 21:17:32 +08:00
										 |  |  | =item B<-scrypt> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-30 05:38:30 +08:00
										 |  |  | Uses the B<scrypt> algorithm for private key encryption using default | 
					
						
							| 
									
										
										
										
											2016-03-05 07:28:45 +08:00
										 |  |  | parameters: currently N=16384, r=8 and p=1 and AES in CBC mode with a 256 bit | 
					
						
							| 
									
										
										
										
											2015-05-21 21:17:32 +08:00
										 |  |  | key. These parameters can be modified using the B<-scrypt_N>, B<-scrypt_r>, | 
					
						
							|  |  |  | B<-scrypt_p> and B<-v2> options. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-26 03:20:11 +08:00
										 |  |  | =item B<-scrypt_N> I<N>, B<-scrypt_r> I<r>, B<-scrypt_p> I<p> | 
					
						
							| 
									
										
										
										
											2015-05-21 21:17:32 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-02 00:16:29 +08:00
										 |  |  | Sets the scrypt I<N>, I<r> or I<p> parameters. | 
					
						
							| 
									
										
										
										
											2015-05-21 21:17:32 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-13 05:45:56 +08:00
										 |  |  | {- $OpenSSL::safe::opt_r_item -} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-13 05:45:56 +08:00
										 |  |  | {- $OpenSSL::safe::opt_engine_item -} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-25 12:29:30 +08:00
										 |  |  | {- $OpenSSL::safe::opt_provider_item -} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-11-11 08:48:39 +08:00
										 |  |  | =back | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-11-11 08:48:39 +08:00
										 |  |  | =head1 NOTES | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-11 19:41:58 +08:00
										 |  |  | By default, when converting a key to PKCS#8 format, PKCS#5 v2.0 using 256 bit | 
					
						
							|  |  |  | AES with HMAC and SHA256 is used. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Some older implementations do not support PKCS#5 v2.0 format and require | 
					
						
							|  |  |  | the older PKCS#5 v1.5 form instead, possibly also requiring insecure weak | 
					
						
							|  |  |  | encryption algorithms such as 56 bit DES. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-11-11 08:48:39 +08:00
										 |  |  | Private keys encrypted using PKCS#5 v2.0 algorithms and high iteration | 
					
						
							|  |  |  | counts are more secure that those encrypted using the traditional | 
					
						
							|  |  |  | SSLeay compatible formats. So if additional security is considered | 
					
						
							|  |  |  | important the keys should be converted. | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-11-11 08:48:39 +08:00
										 |  |  | It is possible to write out DER encoded encrypted private keys in | 
					
						
							|  |  |  | PKCS#8 format because the encryption details are included at an ASN1 | 
					
						
							|  |  |  | level whereas the traditional format includes them at a PEM level. | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-16 20:34:16 +08:00
										 |  |  | =head1 PKCS#5 V1.5 AND PKCS#12 ALGORITHMS | 
					
						
							| 
									
										
										
										
											1999-12-23 10:02:42 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Various algorithms can be used with the B<-v1> command line option, | 
					
						
							|  |  |  | including PKCS#5 v1.5 and PKCS#12. These are described in more detail | 
					
						
							|  |  |  | below. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =over 4 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item B<PBE-MD2-DES PBE-MD5-DES> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | These algorithms were included in the original PKCS#5 v1.5 specification. | 
					
						
							|  |  |  | They only offer 56 bits of protection since they both use DES. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-04 00:45:14 +08:00
										 |  |  | =item B<PBE-SHA1-RC2-64>, B<PBE-MD2-RC2-64>, B<PBE-MD5-RC2-64>, B<PBE-SHA1-DES> | 
					
						
							| 
									
										
										
										
											1999-12-23 10:02:42 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | These algorithms are not mentioned in the original PKCS#5 v1.5 specification | 
					
						
							|  |  |  | but they use the same key derivation algorithm and are supported by some | 
					
						
							| 
									
										
										
										
											2000-01-09 03:05:47 +08:00
										 |  |  | software. They are mentioned in PKCS#5 v2.0. They use either 64 bit RC2 or | 
					
						
							| 
									
										
										
										
											1999-12-23 10:02:42 +08:00
										 |  |  | 56 bit DES. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-04 00:45:14 +08:00
										 |  |  | =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> | 
					
						
							| 
									
										
										
										
											1999-12-23 10:02:42 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | These algorithms use the PKCS#12 password based encryption algorithm and | 
					
						
							|  |  |  | allow strong encryption algorithms like triple DES or 128 bit RC2 to be used. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =back | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | =head1 EXAMPLES | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-17 21:15:20 +08:00
										 |  |  | Convert a private key to PKCS#8 format using default parameters (AES with | 
					
						
							|  |  |  | 256 bit key and B<hmacWithSHA256>): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  openssl pkcs8 -in key.pem -topk8 -out enckey.pem | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Convert a private key to PKCS#8 unencrypted format: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  openssl pkcs8 -in key.pem -topk8 -nocrypt -out enckey.pem | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Convert a private key to PKCS#5 v2.0 format using triple DES: | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-11-11 08:48:39 +08:00
										 |  |  |  openssl pkcs8 -in key.pem -topk8 -v2 des3 -out enckey.pem | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-17 21:15:20 +08:00
										 |  |  | Convert a private key to PKCS#5 v2.0 format using AES with 256 bits in CBC | 
					
						
							|  |  |  | mode and B<hmacWithSHA512> PRF: | 
					
						
							| 
									
										
										
										
											2014-03-01 01:23:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-17 21:15:20 +08:00
										 |  |  |  openssl pkcs8 -in key.pem -topk8 -v2 aes-256-cbc -v2prf hmacWithSHA512 -out enckey.pem | 
					
						
							| 
									
										
										
										
											2014-03-01 01:23:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-11-11 08:48:39 +08:00
										 |  |  | Convert a private key to PKCS#8 using a PKCS#5 1.5 compatible algorithm | 
					
						
							|  |  |  | (DES): | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-17 21:15:20 +08:00
										 |  |  |  openssl pkcs8 -in key.pem -topk8 -v1 PBE-MD5-DES -out enckey.pem | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-12-23 10:02:42 +08:00
										 |  |  | Convert a private key to PKCS#8 using a PKCS#12 compatible algorithm | 
					
						
							|  |  |  | (3DES): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  openssl pkcs8 -in key.pem -topk8 -out enckey.pem -v1 PBE-SHA1-3DES | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-11-11 08:48:39 +08:00
										 |  |  | Read a DER unencrypted PKCS#8 format private key: | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-11-11 08:48:39 +08:00
										 |  |  |  openssl pkcs8 -inform DER -nocrypt -in key.der -out key.pem | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-17 21:15:20 +08:00
										 |  |  | Convert a private key from any PKCS#8 encrypted format to traditional format: | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-17 21:15:20 +08:00
										 |  |  |  openssl pkcs8 -in pk8.pem -traditional -out key.pem | 
					
						
							| 
									
										
										
										
											2016-05-11 19:41:58 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Convert a private key to PKCS#8 format, encrypting with AES-256 and with | 
					
						
							| 
									
										
										
										
											2014-06-04 06:24:49 +08:00
										 |  |  | one million iterations of the password: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-17 21:15:20 +08:00
										 |  |  |  openssl pkcs8 -in key.pem -topk8 -v2 aes-256-cbc -iter 1000000 -out pk8.pem | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-11-11 08:48:39 +08:00
										 |  |  | =head1 STANDARDS | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-06 05:07:56 +08:00
										 |  |  | Test vectors from this PKCS#5 v2.0 implementation were posted to the | 
					
						
							|  |  |  | pkcs-tng mailing list using triple DES, DES and RC2 with high iteration | 
					
						
							|  |  |  | counts, several people confirmed that they could decrypt the private | 
					
						
							| 
									
										
										
										
											2020-06-30 03:13:07 +08:00
										 |  |  | keys produced and therefore, it can be assumed that the PKCS#5 v2.0 | 
					
						
							| 
									
										
										
										
											2000-02-06 05:07:56 +08:00
										 |  |  | implementation is reasonably accurate at least as far as these | 
					
						
							|  |  |  | algorithms are concerned. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The format of PKCS#8 DSA (and other) private keys is not well documented: | 
					
						
							| 
									
										
										
										
											2000-02-08 21:37:08 +08:00
										 |  |  | it is hidden away in PKCS#11 v2.01, section 11.9. OpenSSL's default DSA | 
					
						
							|  |  |  | PKCS#8 private key format complies with this standard. | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 BUGS | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-11-11 08:48:39 +08:00
										 |  |  | There should be an option that prints out the encryption algorithm | 
					
						
							|  |  |  | in use and other details such as the iteration count. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | =head1 SEE ALSO | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-22 07:04:41 +08:00
										 |  |  | L<openssl(1)>, | 
					
						
							|  |  |  | L<openssl-dsa(1)>, | 
					
						
							|  |  |  | L<openssl-rsa(1)>, | 
					
						
							|  |  |  | L<openssl-genrsa(1)>, | 
					
						
							|  |  |  | L<openssl-gendsa(1)> | 
					
						
							| 
									
										
										
										
											1999-11-10 10:52:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-14 03:27:57 +08:00
										 |  |  | =head1 HISTORY | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-09 08:02:36 +08:00
										 |  |  | The B<-iter> option was added in OpenSSL 1.1.0. | 
					
						
							| 
									
										
										
										
											2015-05-14 03:27:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-25 09:27:51 +08:00
										 |  |  | The B<-engine> option was deprecated in OpenSSL 3.0. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | =head1 COPYRIGHT | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-20 21:22:33 +08:00
										 |  |  | Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-06 21:04:11 +08:00
										 |  |  | Licensed under the Apache License 2.0 (the "License").  You may not use | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | 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 |