openssl-pkcs12
名字
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 (解析PKCS12文件) options: [-info] [-nomacver] [-clcerts] [-cacerts]
[-aes128] [-aes192] [-aes256] [-aria128] [-aria192] [-aria256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-noenc] [-nodes]
PKCS#12 output (输出PKCS12文件) 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]
描述
此命令允许创建和解析 PKCS#12 文件(有时称为 PFX 文件)。PKCS#12 文件被多个程序使用,包括 Netscape、MSIE 和 MS Outlook。
通用选项
有很多选项,其中一些选项的含义取决于是在创建还是解析 PKCS#12 文件。默认情况下,将解析 PKCS#12 文件。可以使用 -export 选项创建 PKCS#12 文件(见下文)。PKCS#12 导出时的加密和 MAC 选项(例如 -certpbe 和 -iter)以及许多其他选项(例如 -chain)仅与 -export 相关。相反,输出(读取并显示)PKCS#12 时有关私钥加密的选项仅在未给出 -export 选项时相关。
默认加密算法为 AES-256-CBC,使用 PBKDF2 进行密钥派生。
当加载涉及 RC2-40-CBC 等的旧版 PKCS#12 文件时遇到问题时,请尝试使用 -legacy 选项,如果需要,还可以使用 -provider-path 选项。
- -help
Print out a usage message.
-
-passin arg
输入文件的密码,用于读取加密的私钥
-
-passout arg
输出文件的密码
-
-password arg
和 -export一起时等于 -passout, 其它情况等于 -passin.
-
-twopass
完整性和加密密码分开输入,大部分软件不支持两个密码是不同的,这种情况会导致文件无法读取。不能与-password,-passin,-passout一起使用。
-
-nokeys
不导出私钥
-
-nocerts
不导出证书
-
-noout
此选项禁止所有凭证输出,因此仅验证输入。
-
-legacy
使用旧式操作模式并自动加载旧式提供程序。如果未在系统范围内安装 OpenSSL,则还需要使用例如 -provider-path ./providers 或设置环境变量 OPENSSL_MODULES 以指向可以找到提供程序的目录。
在旧式模式下,证书加密的默认算法是 RC2_CBC 或 3DES_CBC,具体取决于构建中是否启用了 RC2 密码。私钥加密的默认算法是 3DES_CBC。如果未指定旧式选项,则不会加载旧式提供程序,证书和私钥的默认加密算法都是 AES_256_CBC,并使用 PBKDF2 进行密钥派生。 -
-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
这指定输入文件名或 URI。默认情况下使用标准输入。如果没有 -export 选项,则表示解析 PKCS#12 文件。有关使用 -export 选项的信息,请参阅“PKCS#12 输出(导出)选项”部分。
-
-out filename
写入证书和私钥的文件名,默认为标准输出。它们都以 PEM 格式写入。
-
-info
输出有关 PKCS#12 文件结构、使用的算法和迭代计数的附加信息。
-
-nomacver
不验证完整性MAC
-
-clcerts
仅输出客户证书(not CA certificates).
-
-cacerts
仅输出CA证书(不包括客户证书)
-
-aes128, -aes192, -aes256
使用AES加密输出(PEM格式)的私钥
-
-aria128, -aria192, -aria256
使用ARIA加密输出(PEM格式)的私钥
-
-camellia128, -camellia192, -camellia256
使用Camellia加密输出的私钥
-
-des
使用DES加密输出的私钥
-
-des3
使用3DES加密输出的私钥
-
-idea
使用 IDEA 加密输出的私钥
-
-noenc
不加密私钥
-
-nodes
同-noenc,已废弃
PKCS#12 output (export) options
-
-export
指定创建而不是解析PKCS#12文件
-
-out filename
写入的PKCS#12文件,默认是标准输出
-
-in filename|uri
这指定输入文件名或 URI。默认情况下使用标准输入。使用 -export 选项,这是一个包含证书和密钥的文件,或引用通过引擎访问的密钥的 URI。文件中凭证的顺序无关紧要,但应该有一个私钥及其对应的证书。如果存在其他证书,它们也将包含在 PKCS#12 输出文件中。
-
-inkey filename|uri
PKCS12 输出的私钥输入。如果未指定此选项,则输入文件(-in 参数)必须包含私钥。如果未使用引擎,则参数将被视为文件。如果使用 -engine 选项或 URI 具有前缀 org.openssl.engine:,则 URI 的其余部分将被视为给定引擎的密钥标识符。
-
-certfile filename
如果给出了 -export 选项,则包含额外证书的输入文件将被添加到 PKCS#12 输出。
-
-passcerts arg
输入证书的密码,比如-certfile,-untrusted指定的证书
-
-chain
如果存在此选项,则会构建最终实体证书的证书链并将其包含在 PKCS#12 输出文件中。如果未提供密钥,则最终实体证书是从 -in 文件读取的第一个证书,否则是第一个与给定密钥匹配的证书。标准 CA trust store用于链构建,以及使用 -untrusted 选项提供的任何不受信任的 CA 证书。
-
-untrusted filename
可用于构建链的不受信任证书的输入文件,仅当使用 -export 选项创建 PKCS#12 文件并且同时指定 -chain 选项时才相关。实际上属于链的任何证书都将添加到输出中。
-
-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
PKCS12中证书的friendlyName,相当于证书的别名。导入软件通常会在列表中框中显示。
-
-caname friendlyname
指定其他证书的“friendlyName”。此选项可多次使用,按证书出现的顺序指定所有证书的名称。Netscape 会忽略其他证书的friendlyName,而 MSIE 会显示这些名称。
-
-CSP name
Write name as a Microsoft CSP(Cloud Solution Provider program?) 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
指定私钥用于密钥交换或仅用于签名。此选项仅由 MSIE 和类似的 MS 软件解释。通常,“export grad”软件只允许使用 512 位 RSA 密钥进行加密,但允许使用任意长度的密钥进行签名。-keysig 选项标记密钥仅用于签名。仅签名密钥可用于 S/MIME 签名、Authenticode(ActiveX 控件签名)和 SSL 客户端身份验证,但是,由于存在错误,只有 MSIE 5.0 及更高版本支持使用仅签名密钥进行 SSL 客户端身份验证。
-
-keypbe alg, -certpbe alg
这些选项允许选择用于加密私钥和证书的算法。可以使用任何 PKCS#5 v1.5 或 PKCS#12 PBE 算法名称(有关详细信息,请参阅“注释”部分)。如果指定了密码名称(如 openssl list -cipher-algorithms 输出),则它将与 PKCS#5 v2.0 一起使用。出于互操作性原因,建议仅使用 PKCS#12 算法。
指定NONE值则禁用私钥和证书加密。
一般默认即可,除非需要使用特殊的加密算法。 -
-descert
使用3DES 加密证书。默认情况下,私钥和证书使用 AES-256-CBC 加密,除非使用“-legacy”选项。如果将“-descert”与“-legacy”一起使用,则私钥和证书均使用3DES 加密。
-
-macalg digest
指定MAC摘要算法,如果不指定则使用SHA256
-
-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
不要尝试提供 MAC 完整性。这对于 FIPS 提供商很有用,因为 PKCS12 MAC 需要 PKCS12KDF,而这不是经批准的 FIPS 算法,并且不受 FIPS 提供商支持。
-
-jdktrust
以与 Java 密钥库使用兼容的格式导出 pkcs12 文件。此选项接受一个字符串参数,指示要授予与其关联的证书的信任 oid 名称。当前仅定义了“anyExtendedKeyUsage”。请注意,由于 Java 密钥库不接受具有受信任证书和密钥对的 PKCS12 文件(不能包含私钥),因此使用此选项意味着设置 -nokeys 选项
注意
尽管有大量选项,但大多数选项很少使用。对于 PKCS#12 文件解析,只需要使用 -in 和 -out,对于创建 PKCS#12 文件,还需要使用 -export 和 -name。
如果不存在 -clcerts、-cacerts 或 -nocerts 选项,则所有证书将按照它们在输入 PKCS#12 文件中出现的顺序输出。不能保证第一个存在的证书是与私钥相对应的证书。某些试图获取私钥和相应证书的软件可能会假设文件中的第一个证书是与私钥相对应的证书,但情况可能并非总是如此。使用 -clcerts 选项将通过仅输出与私钥相对应的证书来解决此问题。如果需要 CA 证书,则可以使用 -nokeys -cacerts 选项将它们输出到单独的文件中,以仅输出 CA 证书。
-keypbe 和 -certpbe 算法允许指定私钥和证书的精确加密算法。通常情况下,默认设置就足够了,但有时软件无法处理3DES 加密的私钥,则可以使用选项 -keypbe PBE-SHA1-RC2-40 将私钥加密减少到 40 位 RC2。所有算法的完整描述包含在 openssl-pkcs8(1) 中。
1.1 版之前的密码包含非 ASCII 字符,采用不合规方式编码,这限制了与 Windows 的互操作性。但切换到符合标准的密码编码会导致访问受损坏编码保护的旧数据出现问题。因此,在读取数据时甚至会尝试使用旧编码。如果您在生产应用程序中使用 PKCS#12 文件,建议您转换数据,因为这种启发式读取策略(heuristic approach)不是 MT-safe的,其唯一目标是使用此命令促进数据升级(兼容旧数据)。
示例
从p12文件导出nginx使用的证书文件
需要server证书是证书链中的第一个证书,如果不是需要手动调整顺序
openssl pkcs12 -in .\ejbca.ca.com.p12 -noenc -nokeys -out fullchain.cer
openssl pkcs12 -in .\ejbca.ca.com.p12 -noenc -nocerts -out ejbca.hetao.me.key
转换jks格式到pkcs12格式
keytool -importkeystore -srckeystore server.jks -destkeystore server.p12 -deststoretype pkcs12
要用openssl处理keytool生成的p12文件需要加-legacy选项
Views: 0
发表回复
要发表评论,您必须先登录。