Merge branch 'vendor/OPENSSL'
[dragonfly.git] / secure / usr.bin / openssl / man / pkcs8.1
CommitLineData
aac4ff6f 1.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32
8b0cefbb
JR
2.\"
3.\" Standard preamble:
4.\" ========================================================================
5.de Sh \" Subsection heading
984263bc
MD
6.br
7.if t .Sp
8.ne 5
9.PP
10\fB\\$1\fR
11.PP
12..
8b0cefbb 13.de Sp \" Vertical space (when we can't use .PP)
984263bc
MD
14.if t .sp .5v
15.if n .sp
16..
8b0cefbb 17.de Vb \" Begin verbatim text
984263bc
MD
18.ft CW
19.nf
20.ne \\$1
21..
8b0cefbb 22.de Ve \" End verbatim text
984263bc 23.ft R
984263bc
MD
24.fi
25..
8b0cefbb
JR
26.\" Set up some character translations and predefined strings. \*(-- will
27.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
aac4ff6f
PA
28.\" double quote, and \*(R" will give a right double quote. | will give a
29.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
30.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
31.\" expand to `' in nroff, nothing in troff, for use with C<>.
32.tr \(*W-|\(bv\*(Tr
8b0cefbb 33.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
984263bc 34.ie n \{\
8b0cefbb
JR
35. ds -- \(*W-
36. ds PI pi
37. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
38. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
39. ds L" ""
40. ds R" ""
41. ds C` ""
42. ds C' ""
984263bc
MD
43'br\}
44.el\{\
8b0cefbb
JR
45. ds -- \|\(em\|
46. ds PI \(*p
47. ds L" ``
48. ds R" ''
984263bc 49'br\}
8b0cefbb
JR
50.\"
51.\" If the F register is turned on, we'll generate index entries on stderr for
52.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
53.\" entries marked with X<> in POD. Of course, you'll have to process the
54.\" output yourself in some meaningful fashion.
55.if \nF \{\
56. de IX
57. tm Index:\\$1\t\\n%\t"\\$2"
984263bc 58..
8b0cefbb
JR
59. nr % 0
60. rr F
984263bc 61.\}
8b0cefbb 62.\"
aac4ff6f
PA
63.\" For nroff, turn off justification. Always turn off hyphenation; it makes
64.\" way too many mistakes in technical documents.
65.hy 0
66.if n .na
67.\"
8b0cefbb
JR
68.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
69.\" Fear. Run. Save yourself. No user-serviceable parts.
70. \" fudge factors for nroff and troff
984263bc 71.if n \{\
8b0cefbb
JR
72. ds #H 0
73. ds #V .8m
74. ds #F .3m
75. ds #[ \f1
76. ds #] \fP
984263bc
MD
77.\}
78.if t \{\
8b0cefbb
JR
79. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
80. ds #V .6m
81. ds #F 0
82. ds #[ \&
83. ds #] \&
984263bc 84.\}
8b0cefbb 85. \" simple accents for nroff and troff
984263bc 86.if n \{\
8b0cefbb
JR
87. ds ' \&
88. ds ` \&
89. ds ^ \&
90. ds , \&
91. ds ~ ~
92. ds /
984263bc
MD
93.\}
94.if t \{\
8b0cefbb
JR
95. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
96. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
97. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
98. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
99. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
100. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
984263bc 101.\}
8b0cefbb 102. \" troff and (daisy-wheel) nroff accents
984263bc
MD
103.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
104.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
105.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
106.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
107.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
108.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
109.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
110.ds ae a\h'-(\w'a'u*4/10)'e
111.ds Ae A\h'-(\w'A'u*4/10)'E
8b0cefbb 112. \" corrections for vroff
984263bc
MD
113.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
114.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
8b0cefbb 115. \" for low resolution devices (crt and lpr)
984263bc
MD
116.if \n(.H>23 .if \n(.V>19 \
117\{\
8b0cefbb
JR
118. ds : e
119. ds 8 ss
120. ds o a
121. ds d- d\h'-1'\(ga
122. ds D- D\h'-1'\(hy
123. ds th \o'bp'
124. ds Th \o'LP'
125. ds ae ae
126. ds Ae AE
984263bc
MD
127.\}
128.rm #[ #] #H #V #F C
8b0cefbb
JR
129.\" ========================================================================
130.\"
131.IX Title "PKCS8 1"
18ed9402 132.TH PKCS8 1 "2008-09-27" "0.9.8i" "OpenSSL"
984263bc
MD
133.SH "NAME"
134pkcs8 \- PKCS#8 format private key conversion tool
135.SH "SYNOPSIS"
8b0cefbb
JR
136.IX Header "SYNOPSIS"
137\&\fBopenssl\fR \fBpkcs8\fR
984263bc
MD
138[\fB\-topk8\fR]
139[\fB\-inform PEM|DER\fR]
140[\fB\-outform PEM|DER\fR]
141[\fB\-in filename\fR]
142[\fB\-passin arg\fR]
143[\fB\-out filename\fR]
144[\fB\-passout arg\fR]
145[\fB\-noiter\fR]
146[\fB\-nocrypt\fR]
147[\fB\-nooct\fR]
148[\fB\-embed\fR]
149[\fB\-nsdb\fR]
150[\fB\-v2 alg\fR]
151[\fB\-v1 alg\fR]
152[\fB\-engine id\fR]
153.SH "DESCRIPTION"
8b0cefbb 154.IX Header "DESCRIPTION"
984263bc
MD
155The \fBpkcs8\fR command processes private keys in PKCS#8 format. It can handle
156both unencrypted PKCS#8 PrivateKeyInfo format and EncryptedPrivateKeyInfo
157format with a variety of PKCS#5 (v1.5 and v2.0) and PKCS#12 algorithms.
158.SH "COMMAND OPTIONS"
8b0cefbb
JR
159.IX Header "COMMAND OPTIONS"
160.IP "\fB\-topk8\fR" 4
161.IX Item "-topk8"
162Normally a PKCS#8 private key is expected on input and a traditional format
984263bc 163private key will be written. With the \fB\-topk8\fR option the situation is
8b0cefbb 164reversed: it reads a traditional format private key and writes a PKCS#8
984263bc 165format key.
8b0cefbb
JR
166.IP "\fB\-inform DER|PEM\fR" 4
167.IX Item "-inform DER|PEM"
168This specifies the input format. If a PKCS#8 format key is expected on input
169then either a \fB\s-1DER\s0\fR or \fB\s-1PEM\s0\fR encoded version of a PKCS#8 key will be
984263bc
MD
170expected. Otherwise the \fB\s-1DER\s0\fR or \fB\s-1PEM\s0\fR format of the traditional format
171private key is used.
8b0cefbb
JR
172.IP "\fB\-outform DER|PEM\fR" 4
173.IX Item "-outform DER|PEM"
984263bc 174This specifies the output format, the options have the same meaning as the
8b0cefbb
JR
175\&\fB\-inform\fR option.
176.IP "\fB\-in filename\fR" 4
177.IX Item "-in filename"
984263bc
MD
178This specifies the input filename to read a key from or standard input if this
179option is not specified. If the key is encrypted a pass phrase will be
180prompted for.
8b0cefbb
JR
181.IP "\fB\-passin arg\fR" 4
182.IX Item "-passin arg"
984263bc 183the input file password source. For more information about the format of \fBarg\fR
8b0cefbb
JR
184see the \fB\s-1PASS\s0 \s-1PHRASE\s0 \s-1ARGUMENTS\s0\fR section in \fIopenssl\fR\|(1).
185.IP "\fB\-out filename\fR" 4
186.IX Item "-out filename"
984263bc
MD
187This specifies the output filename to write a key to or standard output by
188default. If any encryption options are set then a pass phrase will be
189prompted for. The output filename should \fBnot\fR be the same as the input
190filename.
8b0cefbb
JR
191.IP "\fB\-passout arg\fR" 4
192.IX Item "-passout arg"
984263bc 193the output file password source. For more information about the format of \fBarg\fR
8b0cefbb
JR
194see the \fB\s-1PASS\s0 \s-1PHRASE\s0 \s-1ARGUMENTS\s0\fR section in \fIopenssl\fR\|(1).
195.IP "\fB\-nocrypt\fR" 4
196.IX Item "-nocrypt"
197PKCS#8 keys generated or input are normally PKCS#8 EncryptedPrivateKeyInfo
984263bc
MD
198structures using an appropriate password based encryption algorithm. With
199this option an unencrypted PrivateKeyInfo structure is expected or output.
200This option does not encrypt private keys at all and should only be used
201when absolutely necessary. Certain software such as some versions of Java
202code signing software used unencrypted private keys.
8b0cefbb
JR
203.IP "\fB\-nooct\fR" 4
204.IX Item "-nooct"
984263bc
MD
205This option generates \s-1RSA\s0 private keys in a broken format that some software
206uses. Specifically the private key should be enclosed in a \s-1OCTET\s0 \s-1STRING\s0
207but some software just includes the structure itself without the
208surrounding \s-1OCTET\s0 \s-1STRING\s0.
8b0cefbb
JR
209.IP "\fB\-embed\fR" 4
210.IX Item "-embed"
984263bc
MD
211This option generates \s-1DSA\s0 keys in a broken format. The \s-1DSA\s0 parameters are
212embedded inside the PrivateKey structure. In this form the \s-1OCTET\s0 \s-1STRING\s0
213contains an \s-1ASN1\s0 \s-1SEQUENCE\s0 consisting of two structures: a \s-1SEQUENCE\s0 containing
214the parameters and an \s-1ASN1\s0 \s-1INTEGER\s0 containing the private key.
8b0cefbb
JR
215.IP "\fB\-nsdb\fR" 4
216.IX Item "-nsdb"
984263bc
MD
217This option generates \s-1DSA\s0 keys in a broken format compatible with Netscape
218private key databases. The PrivateKey contains a \s-1SEQUENCE\s0 consisting of
219the public and private keys respectively.
8b0cefbb
JR
220.IP "\fB\-v2 alg\fR" 4
221.IX Item "-v2 alg"
222This option enables the use of PKCS#5 v2.0 algorithms. Normally PKCS#8
984263bc 223private keys are encrypted with the password based encryption algorithm
8b0cefbb
JR
224called \fBpbeWithMD5AndDES\-CBC\fR this uses 56 bit \s-1DES\s0 encryption but it
225was the strongest encryption algorithm supported in PKCS#5 v1.5. Using
226the \fB\-v2\fR option PKCS#5 v2.0 algorithms are used which can use any
984263bc 227encryption algorithm such as 168 bit triple \s-1DES\s0 or 128 bit \s-1RC2\s0 however
8b0cefbb 228not many implementations support PKCS#5 v2.0 yet. If you are just using
984263bc
MD
229private keys with OpenSSL then this doesn't matter.
230.Sp
231The \fBalg\fR argument is the encryption algorithm to use, valid values include
8b0cefbb
JR
232\&\fBdes\fR, \fBdes3\fR and \fBrc2\fR. It is recommended that \fBdes3\fR is used.
233.IP "\fB\-v1 alg\fR" 4
234.IX Item "-v1 alg"
235This option specifies a PKCS#5 v1.5 or PKCS#12 algorithm to use. A complete
984263bc 236list of possible algorithms is included below.
8b0cefbb
JR
237.IP "\fB\-engine id\fR" 4
238.IX Item "-engine id"
984263bc
MD
239specifying an engine (by it's unique \fBid\fR string) will cause \fBreq\fR
240to attempt to obtain a functional reference to the specified engine,
241thus initialising it if needed. The engine will then be set as the default
242for all available algorithms.
243.SH "NOTES"
8b0cefbb
JR
244.IX Header "NOTES"
245The encrypted form of a \s-1PEM\s0 encode PKCS#8 files uses the following
984263bc
MD
246headers and footers:
247.PP
248.Vb 2
aac4ff6f
PA
249\& -----BEGIN ENCRYPTED PRIVATE KEY-----
250\& -----END ENCRYPTED PRIVATE KEY-----
984263bc 251.Ve
8b0cefbb 252.PP
984263bc
MD
253The unencrypted form uses:
254.PP
255.Vb 2
aac4ff6f
PA
256\& -----BEGIN PRIVATE KEY-----
257\& -----END PRIVATE KEY-----
984263bc 258.Ve
8b0cefbb 259.PP
984263bc
MD
260Private keys encrypted using PKCS#5 v2.0 algorithms and high iteration
261counts are more secure that those encrypted using the traditional
262SSLeay compatible formats. So if additional security is considered
263important the keys should be converted.
264.PP
265The default encryption is only 56 bits because this is the encryption
266that most current implementations of PKCS#8 will support.
267.PP
268Some software may use PKCS#12 password based encryption algorithms
269with PKCS#8 format private keys: these are handled automatically
270but there is no option to produce them.
271.PP
8b0cefbb
JR
272It is possible to write out \s-1DER\s0 encoded encrypted private keys in
273PKCS#8 format because the encryption details are included at an \s-1ASN1\s0
274level whereas the traditional format includes them at a \s-1PEM\s0 level.
984263bc 275.SH "PKCS#5 v1.5 and PKCS#12 algorithms."
8b0cefbb 276.IX Header "PKCS#5 v1.5 and PKCS#12 algorithms."
984263bc
MD
277Various algorithms can be used with the \fB\-v1\fR command line option,
278including PKCS#5 v1.5 and PKCS#12. These are described in more detail
279below.
8b0cefbb
JR
280.IP "\fB\s-1PBE\-MD2\-DES\s0 \s-1PBE\-MD5\-DES\s0\fR" 4
281.IX Item "PBE-MD2-DES PBE-MD5-DES"
282These algorithms were included in the original PKCS#5 v1.5 specification.
984263bc 283They only offer 56 bits of protection since they both use \s-1DES\s0.
8b0cefbb
JR
284.IP "\fB\s-1PBE\-SHA1\-RC2\-64\s0 \s-1PBE\-MD2\-RC2\-64\s0 \s-1PBE\-MD5\-RC2\-64\s0 \s-1PBE\-SHA1\-DES\s0\fR" 4
285.IX Item "PBE-SHA1-RC2-64 PBE-MD2-RC2-64 PBE-MD5-RC2-64 PBE-SHA1-DES"
286These algorithms are not mentioned in the original PKCS#5 v1.5 specification
984263bc 287but they use the same key derivation algorithm and are supported by some
8b0cefbb 288software. They are mentioned in PKCS#5 v2.0. They use either 64 bit \s-1RC2\s0 or
984263bc 28956 bit \s-1DES\s0.
8b0cefbb
JR
290.IP "\fB\s-1PBE\-SHA1\-RC4\-128\s0 \s-1PBE\-SHA1\-RC4\-40\s0 \s-1PBE\-SHA1\-3DES\s0 \s-1PBE\-SHA1\-2DES\s0 \s-1PBE\-SHA1\-RC2\-128\s0 \s-1PBE\-SHA1\-RC2\-40\s0\fR" 4
291.IX Item "PBE-SHA1-RC4-128 PBE-SHA1-RC4-40 PBE-SHA1-3DES PBE-SHA1-2DES PBE-SHA1-RC2-128 PBE-SHA1-RC2-40"
292These algorithms use the PKCS#12 password based encryption algorithm and
984263bc
MD
293allow strong encryption algorithms like triple \s-1DES\s0 or 128 bit \s-1RC2\s0 to be used.
294.SH "EXAMPLES"
8b0cefbb 295.IX Header "EXAMPLES"
984263bc 296Convert a private from traditional to PKCS#5 v2.0 format using triple
8b0cefbb 297\&\s-1DES:\s0
984263bc
MD
298.PP
299.Vb 1
aac4ff6f 300\& openssl pkcs8 -in key.pem -topk8 -v2 des3 -out enckey.pem
984263bc 301.Ve
8b0cefbb 302.PP
984263bc 303Convert a private key to PKCS#8 using a PKCS#5 1.5 compatible algorithm
8b0cefbb 304(\s-1DES\s0):
984263bc
MD
305.PP
306.Vb 1
aac4ff6f 307\& openssl pkcs8 -in key.pem -topk8 -out enckey.pem
984263bc 308.Ve
8b0cefbb 309.PP
984263bc
MD
310Convert a private key to PKCS#8 using a PKCS#12 compatible algorithm
311(3DES):
312.PP
313.Vb 1
aac4ff6f 314\& openssl pkcs8 -in key.pem -topk8 -out enckey.pem -v1 PBE-SHA1-3DES
984263bc 315.Ve
8b0cefbb
JR
316.PP
317Read a \s-1DER\s0 unencrypted PKCS#8 format private key:
984263bc
MD
318.PP
319.Vb 1
aac4ff6f 320\& openssl pkcs8 -inform DER -nocrypt -in key.der -out key.pem
984263bc 321.Ve
8b0cefbb 322.PP
984263bc
MD
323Convert a private key from any PKCS#8 format to traditional format:
324.PP
325.Vb 1
aac4ff6f 326\& openssl pkcs8 -in pk8.pem -out key.pem
984263bc
MD
327.Ve
328.SH "STANDARDS"
8b0cefbb 329.IX Header "STANDARDS"
984263bc 330Test vectors from this PKCS#5 v2.0 implementation were posted to the
8b0cefbb 331pkcs-tng mailing list using triple \s-1DES\s0, \s-1DES\s0 and \s-1RC2\s0 with high iteration
984263bc
MD
332counts, several people confirmed that they could decrypt the private
333keys produced and Therefore it can be assumed that the PKCS#5 v2.0
334implementation is reasonably accurate at least as far as these
335algorithms are concerned.
336.PP
8b0cefbb
JR
337The format of PKCS#8 \s-1DSA\s0 (and other) private keys is not well documented:
338it is hidden away in PKCS#11 v2.01, section 11.9. OpenSSL's default \s-1DSA\s0
984263bc
MD
339PKCS#8 private key format complies with this standard.
340.SH "BUGS"
8b0cefbb 341.IX Header "BUGS"
984263bc
MD
342There should be an option that prints out the encryption algorithm
343in use and other details such as the iteration count.
344.PP
8b0cefbb 345PKCS#8 using triple \s-1DES\s0 and PKCS#5 v2.0 should be the default private
984263bc
MD
346key format for OpenSSL: for compatibility several of the utilities use
347the old format at present.
348.SH "SEE ALSO"
e3cdf75b 349.IX Header "SEE ALSO"
8b0cefbb 350\&\fIdsa\fR\|(1), \fIrsa\fR\|(1), \fIgenrsa\fR\|(1),
aac4ff6f 351\&\fIgendsa\fR\|(1)