lh | 9ed821d | 2023-04-07 01:36:19 -0700 | [diff] [blame] | 1 | =pod |
| 2 | |
| 3 | =head1 NAME |
| 4 | |
| 5 | openssl-pkcs12, |
| 6 | pkcs12 - PKCS#12 file utility |
| 7 | |
| 8 | =head1 SYNOPSIS |
| 9 | |
| 10 | B<openssl> B<pkcs12> |
| 11 | [B<-help>] |
| 12 | [B<-export>] |
| 13 | [B<-chain>] |
| 14 | [B<-inkey file_or_id>] |
| 15 | [B<-certfile filename>] |
| 16 | [B<-name name>] |
| 17 | [B<-caname name>] |
| 18 | [B<-in filename>] |
| 19 | [B<-out filename>] |
| 20 | [B<-noout>] |
| 21 | [B<-nomacver>] |
| 22 | [B<-nocerts>] |
| 23 | [B<-clcerts>] |
| 24 | [B<-cacerts>] |
| 25 | [B<-nokeys>] |
| 26 | [B<-info>] |
| 27 | [B<-des | -des3 | -idea | -aes128 | -aes192 | -aes256 | -aria128 | -aria192 | -aria256 | -camellia128 | -camellia192 | -camellia256 | -nodes>] |
| 28 | [B<-noiter>] |
| 29 | [B<-maciter | -nomaciter | -nomac>] |
| 30 | [B<-twopass>] |
| 31 | [B<-descert>] |
| 32 | [B<-certpbe cipher>] |
| 33 | [B<-keypbe cipher>] |
| 34 | [B<-macalg digest>] |
| 35 | [B<-keyex>] |
| 36 | [B<-keysig>] |
| 37 | [B<-password arg>] |
| 38 | [B<-passin arg>] |
| 39 | [B<-passout arg>] |
| 40 | [B<-rand file...>] |
| 41 | [B<-writerand file>] |
| 42 | [B<-CAfile file>] |
| 43 | [B<-CApath dir>] |
| 44 | [B<-no-CAfile>] |
| 45 | [B<-no-CApath>] |
| 46 | [B<-CSP name>] |
| 47 | |
| 48 | =head1 DESCRIPTION |
| 49 | |
| 50 | The B<pkcs12> command allows PKCS#12 files (sometimes referred to as |
| 51 | PFX files) to be created and parsed. PKCS#12 files are used by several |
| 52 | programs including Netscape, MSIE and MS Outlook. |
| 53 | |
| 54 | =head1 OPTIONS |
| 55 | |
| 56 | There are a lot of options the meaning of some depends of whether a PKCS#12 file |
| 57 | is being created or parsed. By default a PKCS#12 file is parsed. A PKCS#12 |
| 58 | file can be created by using the B<-export> option (see below). |
| 59 | |
| 60 | =head1 PARSING OPTIONS |
| 61 | |
| 62 | =over 4 |
| 63 | |
| 64 | =item B<-help> |
| 65 | |
| 66 | Print out a usage message. |
| 67 | |
| 68 | =item B<-in filename> |
| 69 | |
| 70 | This specifies filename of the PKCS#12 file to be parsed. Standard input is used |
| 71 | by default. |
| 72 | |
| 73 | =item B<-out filename> |
| 74 | |
| 75 | The filename to write certificates and private keys to, standard output by |
| 76 | default. They are all written in PEM format. |
| 77 | |
| 78 | =item B<-passin arg> |
| 79 | |
| 80 | The PKCS#12 file (i.e. input file) password source. For more information about |
| 81 | the format of B<arg> see L<openssl(1)/Pass Phrase Options>. |
| 82 | |
| 83 | =item B<-passout arg> |
| 84 | |
| 85 | Pass phrase source to encrypt any outputted private keys with. For more |
| 86 | information about the format of B<arg> see L<openssl(1)/Pass Phrase Options>. |
| 87 | |
| 88 | =item B<-password arg> |
| 89 | |
| 90 | With -export, -password is equivalent to -passout. |
| 91 | Otherwise, -password is equivalent to -passin. |
| 92 | |
| 93 | =item B<-noout> |
| 94 | |
| 95 | This option inhibits output of the keys and certificates to the output file |
| 96 | version of the PKCS#12 file. |
| 97 | |
| 98 | =item B<-clcerts> |
| 99 | |
| 100 | Only output client certificates (not CA certificates). |
| 101 | |
| 102 | =item B<-cacerts> |
| 103 | |
| 104 | Only output CA certificates (not client certificates). |
| 105 | |
| 106 | =item B<-nocerts> |
| 107 | |
| 108 | No certificates at all will be output. |
| 109 | |
| 110 | =item B<-nokeys> |
| 111 | |
| 112 | No private keys will be output. |
| 113 | |
| 114 | =item B<-info> |
| 115 | |
| 116 | Output additional information about the PKCS#12 file structure, algorithms |
| 117 | used and iteration counts. |
| 118 | |
| 119 | =item B<-des> |
| 120 | |
| 121 | Use DES to encrypt private keys before outputting. |
| 122 | |
| 123 | =item B<-des3> |
| 124 | |
| 125 | Use triple DES to encrypt private keys before outputting, this is the default. |
| 126 | |
| 127 | =item B<-idea> |
| 128 | |
| 129 | Use IDEA to encrypt private keys before outputting. |
| 130 | |
| 131 | =item B<-aes128>, B<-aes192>, B<-aes256> |
| 132 | |
| 133 | Use AES to encrypt private keys before outputting. |
| 134 | |
| 135 | =item B<-aria128>, B<-aria192>, B<-aria256> |
| 136 | |
| 137 | Use ARIA to encrypt private keys before outputting. |
| 138 | |
| 139 | =item B<-camellia128>, B<-camellia192>, B<-camellia256> |
| 140 | |
| 141 | Use Camellia to encrypt private keys before outputting. |
| 142 | |
| 143 | =item B<-nodes> |
| 144 | |
| 145 | Don't encrypt the private keys at all. |
| 146 | |
| 147 | =item B<-nomacver> |
| 148 | |
| 149 | Don't attempt to verify the integrity MAC before reading the file. |
| 150 | |
| 151 | =item B<-twopass> |
| 152 | |
| 153 | Prompt for separate integrity and encryption passwords: most software |
| 154 | always assumes these are the same so this option will render such |
| 155 | PKCS#12 files unreadable. Cannot be used in combination with the options |
| 156 | -password, -passin (if importing) or -passout (if exporting). |
| 157 | |
| 158 | =back |
| 159 | |
| 160 | =head1 FILE CREATION OPTIONS |
| 161 | |
| 162 | =over 4 |
| 163 | |
| 164 | =item B<-export> |
| 165 | |
| 166 | This option specifies that a PKCS#12 file will be created rather than |
| 167 | parsed. |
| 168 | |
| 169 | =item B<-out filename> |
| 170 | |
| 171 | This specifies filename to write the PKCS#12 file to. Standard output is used |
| 172 | by default. |
| 173 | |
| 174 | =item B<-in filename> |
| 175 | |
| 176 | The filename to read certificates and private keys from, standard input by |
| 177 | default. They must all be in PEM format. The order doesn't matter but one |
| 178 | private key and its corresponding certificate should be present. If additional |
| 179 | certificates are present they will also be included in the PKCS#12 file. |
| 180 | |
| 181 | =item B<-inkey file_or_id> |
| 182 | |
| 183 | File to read private key from. If not present then a private key must be present |
| 184 | in the input file. |
| 185 | If no engine is used, the argument is taken as a file; if an engine is |
| 186 | specified, the argument is given to the engine as a key identifier. |
| 187 | |
| 188 | =item B<-name friendlyname> |
| 189 | |
| 190 | This specifies the "friendly name" for the certificate and private key. This |
| 191 | name is typically displayed in list boxes by software importing the file. |
| 192 | |
| 193 | =item B<-certfile filename> |
| 194 | |
| 195 | A filename to read additional certificates from. |
| 196 | |
| 197 | =item B<-caname friendlyname> |
| 198 | |
| 199 | This specifies the "friendly name" for other certificates. This option may be |
| 200 | used multiple times to specify names for all certificates in the order they |
| 201 | appear. Netscape ignores friendly names on other certificates whereas MSIE |
| 202 | displays them. |
| 203 | |
| 204 | =item B<-pass arg>, B<-passout arg> |
| 205 | |
| 206 | The PKCS#12 file (i.e. output file) password source. For more information about |
| 207 | the format of B<arg> see L<openssl(1)/Pass Phrase Options>. |
| 208 | |
| 209 | =item B<-passin password> |
| 210 | |
| 211 | Pass phrase source to decrypt any input private keys with. For more information |
| 212 | about the format of B<arg> see L<openssl(1)/Pass Phrase Options>. |
| 213 | |
| 214 | =item B<-chain> |
| 215 | |
| 216 | If this option is present then an attempt is made to include the entire |
| 217 | certificate chain of the user certificate. The standard CA store is used |
| 218 | for this search. If the search fails it is considered a fatal error. |
| 219 | |
| 220 | =item B<-descert> |
| 221 | |
| 222 | Encrypt the certificate using triple DES, this may render the PKCS#12 |
| 223 | file unreadable by some "export grade" software. By default the private |
| 224 | key is encrypted using triple DES and the certificate using 40 bit RC2 |
| 225 | unless RC2 is disabled in which case triple DES is used. |
| 226 | |
| 227 | =item B<-keypbe alg>, B<-certpbe alg> |
| 228 | |
| 229 | These options allow the algorithm used to encrypt the private key and |
| 230 | certificates to be selected. Any PKCS#5 v1.5 or PKCS#12 PBE algorithm name |
| 231 | can be used (see B<NOTES> section for more information). If a cipher name |
| 232 | (as output by the B<list-cipher-algorithms> command is specified then it |
| 233 | is used with PKCS#5 v2.0. For interoperability reasons it is advisable to only |
| 234 | use PKCS#12 algorithms. |
| 235 | |
| 236 | =item B<-keyex|-keysig> |
| 237 | |
| 238 | Specifies that the private key is to be used for key exchange or just signing. |
| 239 | This option is only interpreted by MSIE and similar MS software. Normally |
| 240 | "export grade" software will only allow 512 bit RSA keys to be used for |
| 241 | encryption purposes but arbitrary length keys for signing. The B<-keysig> |
| 242 | option marks the key for signing only. Signing only keys can be used for |
| 243 | S/MIME signing, authenticode (ActiveX control signing) and SSL client |
| 244 | authentication, however, due to a bug only MSIE 5.0 and later support |
| 245 | the use of signing only keys for SSL client authentication. |
| 246 | |
| 247 | =item B<-macalg digest> |
| 248 | |
| 249 | Specify the MAC digest algorithm. If not included them SHA1 will be used. |
| 250 | |
| 251 | =item B<-nomaciter>, B<-noiter> |
| 252 | |
| 253 | These options affect the iteration counts on the MAC and key algorithms. |
| 254 | Unless you wish to produce files compatible with MSIE 4.0 you should leave |
| 255 | these options alone. |
| 256 | |
| 257 | To discourage attacks by using large dictionaries of common passwords the |
| 258 | algorithm that derives keys from passwords can have an iteration count applied |
| 259 | to it: this causes a certain part of the algorithm to be repeated and slows it |
| 260 | down. The MAC is used to check the file integrity but since it will normally |
| 261 | have the same password as the keys and certificates it could also be attacked. |
| 262 | By default both MAC and encryption iteration counts are set to 2048, using |
| 263 | these options the MAC and encryption iteration counts can be set to 1, since |
| 264 | this reduces the file security you should not use these options unless you |
| 265 | really have to. Most software supports both MAC and key iteration counts. |
| 266 | MSIE 4.0 doesn't support MAC iteration counts so it needs the B<-nomaciter> |
| 267 | option. |
| 268 | |
| 269 | =item B<-maciter> |
| 270 | |
| 271 | This option is included for compatibility with previous versions, it used |
| 272 | to be needed to use MAC iterations counts but they are now used by default. |
| 273 | |
| 274 | =item B<-nomac> |
| 275 | |
| 276 | Don't attempt to provide the MAC integrity. |
| 277 | |
| 278 | =item B<-rand file...> |
| 279 | |
| 280 | A file or files containing random data used to seed the random number |
| 281 | generator. |
| 282 | Multiple files can be specified separated by an OS-dependent character. |
| 283 | The separator is B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for |
| 284 | all others. |
| 285 | |
| 286 | =item [B<-writerand file>] |
| 287 | |
| 288 | Writes random data to the specified I<file> upon exit. |
| 289 | This can be used with a subsequent B<-rand> flag. |
| 290 | |
| 291 | =item B<-CAfile file> |
| 292 | |
| 293 | CA storage as a file. |
| 294 | |
| 295 | =item B<-CApath dir> |
| 296 | |
| 297 | CA storage as a directory. This directory must be a standard certificate |
| 298 | directory: that is a hash of each subject name (using B<x509 -hash>) should be |
| 299 | linked to each certificate. |
| 300 | |
| 301 | =item B<-no-CAfile> |
| 302 | |
| 303 | Do not load the trusted CA certificates from the default file location. |
| 304 | |
| 305 | =item B<-no-CApath> |
| 306 | |
| 307 | Do not load the trusted CA certificates from the default directory location. |
| 308 | |
| 309 | =item B<-CSP name> |
| 310 | |
| 311 | Write B<name> as a Microsoft CSP name. |
| 312 | |
| 313 | =back |
| 314 | |
| 315 | =head1 NOTES |
| 316 | |
| 317 | Although there are a large number of options most of them are very rarely |
| 318 | used. For PKCS#12 file parsing only B<-in> and B<-out> need to be used |
| 319 | for PKCS#12 file creation B<-export> and B<-name> are also used. |
| 320 | |
| 321 | If none of the B<-clcerts>, B<-cacerts> or B<-nocerts> options are present |
| 322 | then all certificates will be output in the order they appear in the input |
| 323 | PKCS#12 files. There is no guarantee that the first certificate present is |
| 324 | the one corresponding to the private key. Certain software which requires |
| 325 | a private key and certificate and assumes the first certificate in the |
| 326 | file is the one corresponding to the private key: this may not always |
| 327 | be the case. Using the B<-clcerts> option will solve this problem by only |
| 328 | outputting the certificate corresponding to the private key. If the CA |
| 329 | certificates are required then they can be output to a separate file using |
| 330 | the B<-nokeys -cacerts> options to just output CA certificates. |
| 331 | |
| 332 | The B<-keypbe> and B<-certpbe> algorithms allow the precise encryption |
| 333 | algorithms for private keys and certificates to be specified. Normally |
| 334 | the defaults are fine but occasionally software can't handle triple DES |
| 335 | encrypted private keys, then the option B<-keypbe PBE-SHA1-RC2-40> can |
| 336 | be used to reduce the private key encryption to 40 bit RC2. A complete |
| 337 | description of all algorithms is contained in the B<pkcs8> manual page. |
| 338 | |
| 339 | Prior 1.1 release passwords containing non-ASCII characters were encoded |
| 340 | in non-compliant manner, which limited interoperability, in first hand |
| 341 | with Windows. But switching to standard-compliant password encoding |
| 342 | poses problem accessing old data protected with broken encoding. For |
| 343 | this reason even legacy encodings is attempted when reading the |
| 344 | data. If you use PKCS#12 files in production application you are advised |
| 345 | to convert the data, because implemented heuristic approach is not |
| 346 | MT-safe, its sole goal is to facilitate the data upgrade with this |
| 347 | utility. |
| 348 | |
| 349 | =head1 EXAMPLES |
| 350 | |
| 351 | Parse a PKCS#12 file and output it to a file: |
| 352 | |
| 353 | openssl pkcs12 -in file.p12 -out file.pem |
| 354 | |
| 355 | Output only client certificates to a file: |
| 356 | |
| 357 | openssl pkcs12 -in file.p12 -clcerts -out file.pem |
| 358 | |
| 359 | Don't encrypt the private key: |
| 360 | |
| 361 | openssl pkcs12 -in file.p12 -out file.pem -nodes |
| 362 | |
| 363 | Print some info about a PKCS#12 file: |
| 364 | |
| 365 | openssl pkcs12 -in file.p12 -info -noout |
| 366 | |
| 367 | Create a PKCS#12 file: |
| 368 | |
| 369 | openssl pkcs12 -export -in file.pem -out file.p12 -name "My Certificate" |
| 370 | |
| 371 | Include some extra certificates: |
| 372 | |
| 373 | openssl pkcs12 -export -in file.pem -out file.p12 -name "My Certificate" \ |
| 374 | -certfile othercerts.pem |
| 375 | |
| 376 | =head1 SEE ALSO |
| 377 | |
| 378 | L<pkcs8(1)> |
| 379 | |
| 380 | =head1 COPYRIGHT |
| 381 | |
| 382 | Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. |
| 383 | |
| 384 | Licensed under the OpenSSL license (the "License"). You may not use |
| 385 | this file except in compliance with the License. You can obtain a copy |
| 386 | in the file LICENSE in the source distribution or at |
| 387 | L<https://www.openssl.org/source/license.html>. |
| 388 | |
| 389 | =cut |