manpagez: man pages & more
man openssl-pkcs12(1)
Home | html | info | man
OPENSSL-PKCS12(1ossl)               OpenSSL              OPENSSL-PKCS12(1ossl)


       openssl-pkcs12 - PKCS#12 file command


       openssl pkcs12 [-help] [-passin arg] [-passout arg] [-password arg]
       [-twopass] [-in filename|uri] [-out filename] [-nokeys] [-nocerts]
       [-noout] [-legacy] [-engine id] [-provider name] [-provider-path path]
       [-propquery propq] [-rand files] [-writerand file]

       PKCS#12 input (parsing) options: [-info] [-nomacver] [-clcerts]

       [-aes128] [-aes192] [-aes256] [-aria128] [-aria192] [-aria256]
       [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea]
       [-noenc] [-nodes]

       PKCS#12 output (export) options:

       [-export] [-inkey filename|uri] [-certfile filename] [-passcerts arg]
       [-chain] [-untrusted filename] [-CAfile file] [-no-CAfile] [-CApath
       dir] [-no-CApath] [-CAstore uri] [-no-CAstore] [-name name] [-caname
       name] [-CSP name] [-LMK] [-keyex] [-keysig] [-keypbe cipher] [-certpbe
       cipher] [-descert] [-macalg digest] [-iter count] [-noiter]
       [-nomaciter] [-maciter] [-macsaltlen] [-nomac] [-jdktrust usage]


       This command allows PKCS#12 files (sometimes referred to as PFX files)
       to be created and parsed. PKCS#12 files are used by several programs
       including Netscape, MSIE and MS Outlook.


       There are a lot of options the meaning of some depends of whether a
       PKCS#12 file is being created or parsed. By default a PKCS#12 file is
       parsed.  A PKCS#12 file can be created by using the -export option (see
       below).  The PKCS#12 export encryption and MAC options such as -certpbe
       and -iter and many further options such as -chain are relevant only
       with -export.  Conversely, the options regarding encryption of private
       keys when outputting PKCS#12 input are relevant only when the -export
       option is not given.

       The default encryption algorithm is AES-256-CBC with PBKDF2 for key

       When encountering problems loading legacy PKCS#12 files that involve,
       for example, RC2-40-CBC, try using the -legacy option and, if needed,
       the -provider-path option.

           Print out a usage message.

       -passin arg
           The password source for the input, and for encrypting any private
           keys that are output.  For more information about the format of arg
           see openssl-passphrase-options(1).

       -passout arg
           The password source for output files.

       -password arg
           With -export, -password is equivalent to -passout, otherwise it is
           equivalent to -passin.

           Prompt for separate integrity and encryption passwords: most
           software always assumes these are the same so this option will
           render such PKCS#12 files unreadable. Cannot be used in combination
           with the options -password, -passin if importing from PKCS#12, or
           -passout if exporting.

           No private keys will be output.

           No certificates will be output.

           This option inhibits all credentials output, and so the input is
           just verified.

           Use legacy mode of operation and automatically load the legacy
           provider.  If OpenSSL is not installed system-wide, it is necessary
           to also use, for example, "-provider-path ./providers" or to set
           the environment variable OPENSSL_MODULES to point to the directory
           where the providers can be found.

           In the legacy mode, the default algorithm for certificate
           encryption is RC2_CBC or 3DES_CBC depending on whether the RC2
           cipher is enabled in the build. The default algorithm for private
           key encryption is 3DES_CBC.  If the legacy option is not specified,
           then the legacy provider is not loaded and the default encryption
           algorithm for both certificates and private keys is AES_256_CBC
           with PBKDF2 for key derivation.

       -engine id
           See "Engine Options" in openssl(1).  This option is deprecated.

       -provider name
       -provider-path path
       -propquery propq
           See "Provider Options" in openssl(1), provider(7), and property(7).

       -rand files, -writerand file
           See "Random State Options" in openssl(1) for details.

   PKCS#12 input (parsing) options
       -in filename|uri
           This specifies the input filename or URI. Standard input is used by
           default.  Without the -export option this must be PKCS#12 file to
           be parsed.  For use with the -export option see the "PKCS#12 output
           (export) options" section.

       -out filename
           The filename to write certificates and private keys to, standard
           output by default.  They are all written in PEM format.

           Output additional information about the PKCS#12 file structure,
           algorithms used and iteration counts.

           Don't attempt to verify the integrity MAC.

           Only output client certificates (not CA certificates).

           Only output CA certificates (not client certificates).

       -aes128, -aes192, -aes256
           Use AES to encrypt private keys before outputting.

       -aria128, -aria192, -aria256
           Use ARIA to encrypt private keys before outputting.

       -camellia128, -camellia192, -camellia256
           Use Camellia to encrypt private keys before outputting.

           Use DES to encrypt private keys before outputting.

           Use triple DES to encrypt private keys before outputting.

           Use IDEA to encrypt private keys before outputting.

           Don't encrypt private keys at all.

           This option is deprecated since OpenSSL 3.0; use -noenc instead.

   PKCS#12 output (export) options
           This option specifies that a PKCS#12 file will be created rather
           than parsed.

       -out filename
           This specifies filename to write the PKCS#12 file to. Standard
           output is used by default.

       -in filename|uri
           This specifies the input filename or URI. Standard input is used by
           default.  With the -export option this is a file with certificates
           and a key, or a URI that refers to a key accessed via an engine.
           The order of credentials in a file doesn't matter but one private
           key and its corresponding certificate should be present. If
           additional certificates are present they will also be included in
           the PKCS#12 output file.

       -inkey filename|uri
           The private key input for PKCS12 output.  If this option is not
           specified then the input file (-in argument) must contain a private
           key.  If no engine is used, the argument is taken as a file.  If
           the -engine option is used or the URI has prefix
           "org.openssl.engine:" then the rest of the URI is taken as key
           identifier for the given engine.

       -certfile filename
           An input file with extra certificates to be added to the PKCS#12
           output if the -export option is given.

       -passcerts arg
           The password source for certificate input such as -certfile and
           -untrusted.  For more information about the format of arg see

           If this option is present then the certificate chain of the end
           entity certificate is built and included in the PKCS#12 output
           file.  The end entity certificate is the first one read from the
           -in file if no key is given, else the first certificate matching
           the given key.  The standard CA trust store is used for chain
           building, as well as any untrusted CA certificates given with the
           -untrusted option.

       -untrusted filename
           An input file of untrusted certificates that may be used for chain
           building, which is relevant only when a PKCS#12 file is created
           with the -export option and the -chain option is given as well.
           Any certificates that are actually part of the chain are added to
           the output.

       -CAfile file, -no-CAfile, -CApath dir, -no-CApath, -CAstore uri,
           See "Trusted Certificate Options" in
           openssl-verification-options(1) for details.

       -name friendlyname
           This specifies the "friendly name" for the certificates and private
           key. This name is typically displayed in list boxes by software
           importing the file.

       -caname friendlyname
           This specifies the "friendly name" for other certificates. This
           option may be used multiple times to specify names for all
           certificates in the order they appear. Netscape ignores friendly
           names on other certificates whereas MSIE displays them.

       -CSP name
           Write name as a Microsoft CSP name.  The password source for the
           input, and for encrypting any private keys that are output.  For
           more information about the format of arg see

           Add the "Local Key Set" identifier to the attributes.

           Specifies that the private key is to be used for key exchange or
           just signing.  This option is only interpreted by MSIE and similar
           MS software. Normally "export grade" software will only allow 512
           bit RSA keys to be used for encryption purposes but arbitrary
           length keys for signing. The -keysig option marks the key for
           signing only. Signing only keys can be used for S/MIME signing,
           authenticode (ActiveX control signing)  and SSL client
           authentication, however, due to a bug only MSIE 5.0 and later
           support the use of signing only keys for SSL client authentication.

       -keypbe alg, -certpbe alg
           These options allow the algorithm used to encrypt the private key
           and certificates to be selected. Any PKCS#5 v1.5 or PKCS#12 PBE
           algorithm name can be used (see "NOTES" section for more
           information). If a cipher name (as output by "openssl list
           -cipher-algorithms") is specified then it is used with PKCS#5 v2.0.
           For interoperability reasons it is advisable to only use PKCS#12

           Special value "NONE" disables encryption of the private key and

           Encrypt the certificates using triple DES. By default the private
           key and the certificates are encrypted using AES-256-CBC unless the
           '-legacy' option is used. If '-descert' is used with the '-legacy'
           then both, the private key and the certificates are encrypted using
           triple DES.

       -macalg digest
           Specify the MAC digest algorithm. If not included SHA256 will be

       -iter count
           This option specifies the iteration count for the encryption key
           and MAC. The default value is 2048.

           To discourage attacks by using large dictionaries of common
           passwords the algorithm that derives keys from passwords can have
           an iteration count applied to it: this causes a certain part of the
           algorithm to be repeated and slows it down. The MAC is used to
           check the file integrity but since it will normally have the same
           password as the keys and certificates it could also be attacked.

       -noiter, -nomaciter
           By default both encryption and MAC iteration counts are set to
           2048, using these options the MAC and encryption iteration counts
           can be set to 1, since this reduces the file security you should
           not use these options unless you really have to. Most software
           supports both MAC and encryption iteration counts.  MSIE 4.0
           doesn't support MAC iteration counts so it needs the -nomaciter

           This option is included for compatibility with previous versions,
           it used to be needed to use MAC iterations counts but they are now
           used by default.

           This option specifies the salt length in bytes for the MAC. The
           salt length should be at least 16 bytes as per NIST SP 800-132. The
           default value is 8 bytes for backwards compatibility.

           Do not attempt to provide the MAC integrity. This can be useful
           with the FIPS provider as the PKCS12 MAC requires PKCS12KDF which
           is not an approved FIPS algorithm and cannot be supported by the
           FIPS provider.

           Export pkcs12 file in a format compatible with Java keystore usage.
           This option accepts a string parameter indicating the trust oid
           name to be granted to the certificate it is associated with.
           Currently only "anyExtendedKeyUsage" is defined. Note that, as Java
           keystores do not accept PKCS12 files with both trusted certificates
           and keypairs, use of this option implies the setting of the -nokeys


       Although there are a large number of options most of them are very
       rarely used. For PKCS#12 file parsing only -in and -out need to be used
       for PKCS#12 file creation -export and -name are also used.

       If none of the -clcerts, -cacerts or -nocerts options are present then
       all certificates will be output in the order they appear in the input
       PKCS#12 files. There is no guarantee that the first certificate present
       is the one corresponding to the private key.  Certain software which
       tries to get a private key and the corresponding certificate might
       assume that the first certificate in the file is the one corresponding
       to the private key, but that may not always be the case.  Using the
       -clcerts option will solve this problem by only outputting the
       certificate corresponding to the private key. If the CA certificates
       are required then they can be output to a separate file using the
       -nokeys -cacerts options to just output CA certificates.

       The -keypbe and -certpbe algorithms allow the precise encryption
       algorithms for private keys and certificates to be specified. Normally
       the defaults are fine but occasionally software can't handle triple DES
       encrypted private keys, then the option -keypbe PBE-SHA1-RC2-40 can be
       used to reduce the private key encryption to 40 bit RC2. A complete
       description of all algorithms is contained in openssl-pkcs8(1).

       Prior 1.1 release passwords containing non-ASCII characters were
       encoded in non-compliant manner, which limited interoperability, in
       first hand with Windows. But switching to standard-compliant password
       encoding poses problem accessing old data protected with broken
       encoding. For this reason even legacy encodings is attempted when
       reading the data. If you use PKCS#12 files in production application
       you are advised to convert the data, because implemented heuristic
       approach is not MT-safe, its sole goal is to facilitate the data
       upgrade with this command.


       Parse a PKCS#12 file and output it to a PEM file:

        openssl pkcs12 -in file.p12 -out file.pem

       Output only client certificates to a file:

        openssl pkcs12 -in file.p12 -clcerts -out file.pem

       Don't encrypt the private key:

        openssl pkcs12 -in file.p12 -out file.pem -noenc

       Print some info about a PKCS#12 file:

        openssl pkcs12 -in file.p12 -info -noout

       Print some info about a PKCS#12 file in legacy mode:

        openssl pkcs12 -in file.p12 -info -noout -legacy

       Create a PKCS#12 file from a PEM file that may contain a key and

        openssl pkcs12 -export -in file.pem -out file.p12 -name "My PSE"

       Include some extra certificates:

        openssl pkcs12 -export -in file.pem -out file.p12 -name "My PSE" \
         -certfile othercerts.pem

       Export a PKCS#12 file with data from a certificate PEM file and from a
       further PEM file containing a key, with default algorithms as in the
       legacy provider:

        openssl pkcs12 -export -in cert.pem -inkey key.pem -out file.p12 -legacy


       openssl(1), openssl-pkcs8(1), ossl_store-file(7)


       The -engine option was deprecated in OpenSSL 3.0.  The -nodes option
       was deprecated in OpenSSL 3.0, too; use -noenc instead.


       Copyright 2000-2023 The OpenSSL Project Authors. All Rights Reserved.

       Licensed under the Apache License 2.0 (the "License").  You may not use
       this file except in compliance with the License.  You can obtain a copy
       in the file LICENSE in the source distribution or at

3.2.0                             2023-11-23             OPENSSL-PKCS12(1ossl)

openssl 3.2.0 - Generated Wed Nov 29 08:06:30 CST 2023
© 2000-2024
Individual documents may contain additional copyright information.