xref: /minix3/crypto/external/bsd/openssl/dist/doc/apps/pkcs8.pod (revision ebfedea0ce5bbe81e252ddf32d732e40fb633fae)
1*ebfedea0SLionel Sambuc=pod
2*ebfedea0SLionel Sambuc
3*ebfedea0SLionel Sambuc=head1 NAME
4*ebfedea0SLionel Sambuc
5*ebfedea0SLionel Sambucpkcs8 - PKCS#8 format private key conversion tool
6*ebfedea0SLionel Sambuc
7*ebfedea0SLionel Sambuc=head1 SYNOPSIS
8*ebfedea0SLionel Sambuc
9*ebfedea0SLionel SambucB<openssl> B<pkcs8>
10*ebfedea0SLionel Sambuc[B<-topk8>]
11*ebfedea0SLionel Sambuc[B<-inform PEM|DER>]
12*ebfedea0SLionel Sambuc[B<-outform PEM|DER>]
13*ebfedea0SLionel Sambuc[B<-in filename>]
14*ebfedea0SLionel Sambuc[B<-passin arg>]
15*ebfedea0SLionel Sambuc[B<-out filename>]
16*ebfedea0SLionel Sambuc[B<-passout arg>]
17*ebfedea0SLionel Sambuc[B<-noiter>]
18*ebfedea0SLionel Sambuc[B<-nocrypt>]
19*ebfedea0SLionel Sambuc[B<-nooct>]
20*ebfedea0SLionel Sambuc[B<-embed>]
21*ebfedea0SLionel Sambuc[B<-nsdb>]
22*ebfedea0SLionel Sambuc[B<-v2 alg>]
23*ebfedea0SLionel Sambuc[B<-v1 alg>]
24*ebfedea0SLionel Sambuc[B<-engine id>]
25*ebfedea0SLionel Sambuc
26*ebfedea0SLionel Sambuc=head1 DESCRIPTION
27*ebfedea0SLionel Sambuc
28*ebfedea0SLionel SambucThe B<pkcs8> command processes private keys in PKCS#8 format. It can handle
29*ebfedea0SLionel Sambucboth unencrypted PKCS#8 PrivateKeyInfo format and EncryptedPrivateKeyInfo
30*ebfedea0SLionel Sambucformat with a variety of PKCS#5 (v1.5 and v2.0) and PKCS#12 algorithms.
31*ebfedea0SLionel Sambuc
32*ebfedea0SLionel Sambuc=head1 COMMAND OPTIONS
33*ebfedea0SLionel Sambuc
34*ebfedea0SLionel Sambuc=over 4
35*ebfedea0SLionel Sambuc
36*ebfedea0SLionel Sambuc=item B<-topk8>
37*ebfedea0SLionel Sambuc
38*ebfedea0SLionel SambucNormally a PKCS#8 private key is expected on input and a traditional format
39*ebfedea0SLionel Sambucprivate key will be written. With the B<-topk8> option the situation is
40*ebfedea0SLionel Sambucreversed: it reads a traditional format private key and writes a PKCS#8
41*ebfedea0SLionel Sambucformat key.
42*ebfedea0SLionel Sambuc
43*ebfedea0SLionel Sambuc=item B<-inform DER|PEM>
44*ebfedea0SLionel Sambuc
45*ebfedea0SLionel SambucThis specifies the input format. If a PKCS#8 format key is expected on input
46*ebfedea0SLionel Sambucthen either a B<DER> or B<PEM> encoded version of a PKCS#8 key will be
47*ebfedea0SLionel Sambucexpected. Otherwise the B<DER> or B<PEM> format of the traditional format
48*ebfedea0SLionel Sambucprivate key is used.
49*ebfedea0SLionel Sambuc
50*ebfedea0SLionel Sambuc=item B<-outform DER|PEM>
51*ebfedea0SLionel Sambuc
52*ebfedea0SLionel SambucThis specifies the output format, the options have the same meaning as the
53*ebfedea0SLionel SambucB<-inform> option.
54*ebfedea0SLionel Sambuc
55*ebfedea0SLionel Sambuc=item B<-in filename>
56*ebfedea0SLionel Sambuc
57*ebfedea0SLionel SambucThis specifies the input filename to read a key from or standard input if this
58*ebfedea0SLionel Sambucoption is not specified. If the key is encrypted a pass phrase will be
59*ebfedea0SLionel Sambucprompted for.
60*ebfedea0SLionel Sambuc
61*ebfedea0SLionel Sambuc=item B<-passin arg>
62*ebfedea0SLionel Sambuc
63*ebfedea0SLionel Sambucthe input file password source. For more information about the format of B<arg>
64*ebfedea0SLionel Sambucsee the B<PASS PHRASE ARGUMENTS> section in L<openssl(1)|openssl(1)>.
65*ebfedea0SLionel Sambuc
66*ebfedea0SLionel Sambuc=item B<-out filename>
67*ebfedea0SLionel Sambuc
68*ebfedea0SLionel SambucThis specifies the output filename to write a key to or standard output by
69*ebfedea0SLionel Sambucdefault. If any encryption options are set then a pass phrase will be
70*ebfedea0SLionel Sambucprompted for. The output filename should B<not> be the same as the input
71*ebfedea0SLionel Sambucfilename.
72*ebfedea0SLionel Sambuc
73*ebfedea0SLionel Sambuc=item B<-passout arg>
74*ebfedea0SLionel Sambuc
75*ebfedea0SLionel Sambucthe output file password source. For more information about the format of B<arg>
76*ebfedea0SLionel Sambucsee the B<PASS PHRASE ARGUMENTS> section in L<openssl(1)|openssl(1)>.
77*ebfedea0SLionel Sambuc
78*ebfedea0SLionel Sambuc=item B<-nocrypt>
79*ebfedea0SLionel Sambuc
80*ebfedea0SLionel SambucPKCS#8 keys generated or input are normally PKCS#8 EncryptedPrivateKeyInfo
81*ebfedea0SLionel Sambucstructures using an appropriate password based encryption algorithm. With
82*ebfedea0SLionel Sambucthis option an unencrypted PrivateKeyInfo structure is expected or output.
83*ebfedea0SLionel SambucThis option does not encrypt private keys at all and should only be used
84*ebfedea0SLionel Sambucwhen absolutely necessary. Certain software such as some versions of Java
85*ebfedea0SLionel Sambuccode signing software used unencrypted private keys.
86*ebfedea0SLionel Sambuc
87*ebfedea0SLionel Sambuc=item B<-nooct>
88*ebfedea0SLionel Sambuc
89*ebfedea0SLionel SambucThis option generates RSA private keys in a broken format that some software
90*ebfedea0SLionel Sambucuses. Specifically the private key should be enclosed in a OCTET STRING
91*ebfedea0SLionel Sambucbut some software just includes the structure itself without the
92*ebfedea0SLionel Sambucsurrounding OCTET STRING.
93*ebfedea0SLionel Sambuc
94*ebfedea0SLionel Sambuc=item B<-embed>
95*ebfedea0SLionel Sambuc
96*ebfedea0SLionel SambucThis option generates DSA keys in a broken format. The DSA parameters are
97*ebfedea0SLionel Sambucembedded inside the PrivateKey structure. In this form the OCTET STRING
98*ebfedea0SLionel Sambuccontains an ASN1 SEQUENCE consisting of two structures: a SEQUENCE containing
99*ebfedea0SLionel Sambucthe parameters and an ASN1 INTEGER containing the private key.
100*ebfedea0SLionel Sambuc
101*ebfedea0SLionel Sambuc=item B<-nsdb>
102*ebfedea0SLionel Sambuc
103*ebfedea0SLionel SambucThis option generates DSA keys in a broken format compatible with Netscape
104*ebfedea0SLionel Sambucprivate key databases. The PrivateKey contains a SEQUENCE consisting of
105*ebfedea0SLionel Sambucthe public and private keys respectively.
106*ebfedea0SLionel Sambuc
107*ebfedea0SLionel Sambuc=item B<-v2 alg>
108*ebfedea0SLionel Sambuc
109*ebfedea0SLionel SambucThis option enables the use of PKCS#5 v2.0 algorithms. Normally PKCS#8
110*ebfedea0SLionel Sambucprivate keys are encrypted with the password based encryption algorithm
111*ebfedea0SLionel Sambuccalled B<pbeWithMD5AndDES-CBC> this uses 56 bit DES encryption but it
112*ebfedea0SLionel Sambucwas the strongest encryption algorithm supported in PKCS#5 v1.5. Using
113*ebfedea0SLionel Sambucthe B<-v2> option PKCS#5 v2.0 algorithms are used which can use any
114*ebfedea0SLionel Sambucencryption algorithm such as 168 bit triple DES or 128 bit RC2 however
115*ebfedea0SLionel Sambucnot many implementations support PKCS#5 v2.0 yet. If you are just using
116*ebfedea0SLionel Sambucprivate keys with OpenSSL then this doesn't matter.
117*ebfedea0SLionel Sambuc
118*ebfedea0SLionel SambucThe B<alg> argument is the encryption algorithm to use, valid values include
119*ebfedea0SLionel SambucB<des>, B<des3> and B<rc2>. It is recommended that B<des3> is used.
120*ebfedea0SLionel Sambuc
121*ebfedea0SLionel Sambuc=item B<-v1 alg>
122*ebfedea0SLionel Sambuc
123*ebfedea0SLionel SambucThis option specifies a PKCS#5 v1.5 or PKCS#12 algorithm to use. A complete
124*ebfedea0SLionel Sambuclist of possible algorithms is included below.
125*ebfedea0SLionel Sambuc
126*ebfedea0SLionel Sambuc=item B<-engine id>
127*ebfedea0SLionel Sambuc
128*ebfedea0SLionel Sambucspecifying an engine (by its unique B<id> string) will cause B<pkcs8>
129*ebfedea0SLionel Sambucto attempt to obtain a functional reference to the specified engine,
130*ebfedea0SLionel Sambucthus initialising it if needed. The engine will then be set as the default
131*ebfedea0SLionel Sambucfor all available algorithms.
132*ebfedea0SLionel Sambuc
133*ebfedea0SLionel Sambuc=back
134*ebfedea0SLionel Sambuc
135*ebfedea0SLionel Sambuc=head1 NOTES
136*ebfedea0SLionel Sambuc
137*ebfedea0SLionel SambucThe encrypted form of a PEM encode PKCS#8 files uses the following
138*ebfedea0SLionel Sambucheaders and footers:
139*ebfedea0SLionel Sambuc
140*ebfedea0SLionel Sambuc -----BEGIN ENCRYPTED PRIVATE KEY-----
141*ebfedea0SLionel Sambuc -----END ENCRYPTED PRIVATE KEY-----
142*ebfedea0SLionel Sambuc
143*ebfedea0SLionel SambucThe unencrypted form uses:
144*ebfedea0SLionel Sambuc
145*ebfedea0SLionel Sambuc -----BEGIN PRIVATE KEY-----
146*ebfedea0SLionel Sambuc -----END PRIVATE KEY-----
147*ebfedea0SLionel Sambuc
148*ebfedea0SLionel SambucPrivate keys encrypted using PKCS#5 v2.0 algorithms and high iteration
149*ebfedea0SLionel Sambuccounts are more secure that those encrypted using the traditional
150*ebfedea0SLionel SambucSSLeay compatible formats. So if additional security is considered
151*ebfedea0SLionel Sambucimportant the keys should be converted.
152*ebfedea0SLionel Sambuc
153*ebfedea0SLionel SambucThe default encryption is only 56 bits because this is the encryption
154*ebfedea0SLionel Sambucthat most current implementations of PKCS#8 will support.
155*ebfedea0SLionel Sambuc
156*ebfedea0SLionel SambucSome software may use PKCS#12 password based encryption algorithms
157*ebfedea0SLionel Sambucwith PKCS#8 format private keys: these are handled automatically
158*ebfedea0SLionel Sambucbut there is no option to produce them.
159*ebfedea0SLionel Sambuc
160*ebfedea0SLionel SambucIt is possible to write out DER encoded encrypted private keys in
161*ebfedea0SLionel SambucPKCS#8 format because the encryption details are included at an ASN1
162*ebfedea0SLionel Sambuclevel whereas the traditional format includes them at a PEM level.
163*ebfedea0SLionel Sambuc
164*ebfedea0SLionel Sambuc=head1 PKCS#5 v1.5 and PKCS#12 algorithms.
165*ebfedea0SLionel Sambuc
166*ebfedea0SLionel SambucVarious algorithms can be used with the B<-v1> command line option,
167*ebfedea0SLionel Sambucincluding PKCS#5 v1.5 and PKCS#12. These are described in more detail
168*ebfedea0SLionel Sambucbelow.
169*ebfedea0SLionel Sambuc
170*ebfedea0SLionel Sambuc=over 4
171*ebfedea0SLionel Sambuc
172*ebfedea0SLionel Sambuc=item B<PBE-MD2-DES PBE-MD5-DES>
173*ebfedea0SLionel Sambuc
174*ebfedea0SLionel SambucThese algorithms were included in the original PKCS#5 v1.5 specification.
175*ebfedea0SLionel SambucThey only offer 56 bits of protection since they both use DES.
176*ebfedea0SLionel Sambuc
177*ebfedea0SLionel Sambuc=item B<PBE-SHA1-RC2-64 PBE-MD2-RC2-64 PBE-MD5-RC2-64 PBE-SHA1-DES>
178*ebfedea0SLionel Sambuc
179*ebfedea0SLionel SambucThese algorithms are not mentioned in the original PKCS#5 v1.5 specification
180*ebfedea0SLionel Sambucbut they use the same key derivation algorithm and are supported by some
181*ebfedea0SLionel Sambucsoftware. They are mentioned in PKCS#5 v2.0. They use either 64 bit RC2 or
182*ebfedea0SLionel Sambuc56 bit DES.
183*ebfedea0SLionel Sambuc
184*ebfedea0SLionel Sambuc=item B<PBE-SHA1-RC4-128 PBE-SHA1-RC4-40 PBE-SHA1-3DES PBE-SHA1-2DES PBE-SHA1-RC2-128 PBE-SHA1-RC2-40>
185*ebfedea0SLionel Sambuc
186*ebfedea0SLionel SambucThese algorithms use the PKCS#12 password based encryption algorithm and
187*ebfedea0SLionel Sambucallow strong encryption algorithms like triple DES or 128 bit RC2 to be used.
188*ebfedea0SLionel Sambuc
189*ebfedea0SLionel Sambuc=back
190*ebfedea0SLionel Sambuc
191*ebfedea0SLionel Sambuc=head1 EXAMPLES
192*ebfedea0SLionel Sambuc
193*ebfedea0SLionel SambucConvert a private from traditional to PKCS#5 v2.0 format using triple
194*ebfedea0SLionel SambucDES:
195*ebfedea0SLionel Sambuc
196*ebfedea0SLionel Sambuc openssl pkcs8 -in key.pem -topk8 -v2 des3 -out enckey.pem
197*ebfedea0SLionel Sambuc
198*ebfedea0SLionel SambucConvert a private key to PKCS#8 using a PKCS#5 1.5 compatible algorithm
199*ebfedea0SLionel Sambuc(DES):
200*ebfedea0SLionel Sambuc
201*ebfedea0SLionel Sambuc openssl pkcs8 -in key.pem -topk8 -out enckey.pem
202*ebfedea0SLionel Sambuc
203*ebfedea0SLionel SambucConvert a private key to PKCS#8 using a PKCS#12 compatible algorithm
204*ebfedea0SLionel Sambuc(3DES):
205*ebfedea0SLionel Sambuc
206*ebfedea0SLionel Sambuc openssl pkcs8 -in key.pem -topk8 -out enckey.pem -v1 PBE-SHA1-3DES
207*ebfedea0SLionel Sambuc
208*ebfedea0SLionel SambucRead a DER unencrypted PKCS#8 format private key:
209*ebfedea0SLionel Sambuc
210*ebfedea0SLionel Sambuc openssl pkcs8 -inform DER -nocrypt -in key.der -out key.pem
211*ebfedea0SLionel Sambuc
212*ebfedea0SLionel SambucConvert a private key from any PKCS#8 format to traditional format:
213*ebfedea0SLionel Sambuc
214*ebfedea0SLionel Sambuc openssl pkcs8 -in pk8.pem -out key.pem
215*ebfedea0SLionel Sambuc
216*ebfedea0SLionel Sambuc=head1 STANDARDS
217*ebfedea0SLionel Sambuc
218*ebfedea0SLionel SambucTest vectors from this PKCS#5 v2.0 implementation were posted to the
219*ebfedea0SLionel Sambucpkcs-tng mailing list using triple DES, DES and RC2 with high iteration
220*ebfedea0SLionel Sambuccounts, several people confirmed that they could decrypt the private
221*ebfedea0SLionel Sambuckeys produced and Therefore it can be assumed that the PKCS#5 v2.0
222*ebfedea0SLionel Sambucimplementation is reasonably accurate at least as far as these
223*ebfedea0SLionel Sambucalgorithms are concerned.
224*ebfedea0SLionel Sambuc
225*ebfedea0SLionel SambucThe format of PKCS#8 DSA (and other) private keys is not well documented:
226*ebfedea0SLionel Sambucit is hidden away in PKCS#11 v2.01, section 11.9. OpenSSL's default DSA
227*ebfedea0SLionel SambucPKCS#8 private key format complies with this standard.
228*ebfedea0SLionel Sambuc
229*ebfedea0SLionel Sambuc=head1 BUGS
230*ebfedea0SLionel Sambuc
231*ebfedea0SLionel SambucThere should be an option that prints out the encryption algorithm
232*ebfedea0SLionel Sambucin use and other details such as the iteration count.
233*ebfedea0SLionel Sambuc
234*ebfedea0SLionel SambucPKCS#8 using triple DES and PKCS#5 v2.0 should be the default private
235*ebfedea0SLionel Sambuckey format for OpenSSL: for compatibility several of the utilities use
236*ebfedea0SLionel Sambucthe old format at present.
237*ebfedea0SLionel Sambuc
238*ebfedea0SLionel Sambuc=head1 SEE ALSO
239*ebfedea0SLionel Sambuc
240*ebfedea0SLionel SambucL<dsa(1)|dsa(1)>, L<rsa(1)|rsa(1)>, L<genrsa(1)|genrsa(1)>,
241*ebfedea0SLionel SambucL<gendsa(1)|gendsa(1)>
242*ebfedea0SLionel Sambuc
243*ebfedea0SLionel Sambuc=cut
244