dwww Home | Manual pages | Find package

OPENSSL-PKCS12(1SSL)                OpenSSL                OPENSSL-PKCS12(1SSL)

NAME
       openssl-pkcs12 - PKCS#12 file command

SYNOPSIS
       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]
       [-provparam [name:]key=value] [-propquery propq] [-rand files]
       [-writerand file]

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

       [-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] [-pbmac1_pbkdf2] [-pbmac1_pbkdf2_md digest]
       [-iter count] [-noiter] [-nomaciter] [-maciter] [-macsaltlen] [-nomac]
       [-jdktrust usage]

DESCRIPTION
       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.

OPTIONS
       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
       derivation.

       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.

       -help
           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.

       -twopass
           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.

       -nokeys
           No private keys will be output.

       -nocerts
           No certificates will be output.

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

       -legacy
           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
       -provparam [name:]key=value
       -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.

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

       -nomacver
           Don't attempt to verify the integrity MAC.

       -clcerts
           Only output client certificates (not CA certificates).

       -cacerts
           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.

       -des
           Use DES to encrypt private keys before outputting.

       -des3
           Use triple DES to encrypt private keys before outputting.

       -idea
           Use IDEA to encrypt private keys before outputting.

       -noenc
           Don't encrypt private keys at all.

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

   PKCS#12 output (export) options
       -export
           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
           openssl-passphrase-options(1).

       -chain
           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,
       -no-CAstore
           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
           openssl-passphrase-options(1).

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

       -keyex|-keysig
           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
           algorithms.

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

       -descert
           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
           used.

       -pbmac1_pbkdf2
           Use PBMAC1 with PBKDF2 for MAC protection of the PKCS#12 file.

       -pbmac1_pbkdf2_md digest
           Specify the PBKDF2 KDF digest algorithm. If  not  specified,  SHA256
           will  be used.  Unless "-pbmac1_pbkdf2" is specified, this parameter
           is ignored.

       -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 option.

       -maciter
           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.

       -macsaltlen
           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.

       -nomac
           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.

       -jdktrust
           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
           option

NOTES
       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.

EXAMPLES
       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
       certificates:

        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

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

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

COPYRIGHT
       Copyright 2000-2025 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
       <https://www.openssl.org/source/license.html>.

3.5.4                              2025-09-30              OPENSSL-PKCS12(1SSL)

Generated by dwww version 1.16 on Tue Dec 16 04:55:48 CET 2025.