OpenSSL

密碼學和 SSL/TLS 工具包

openssl-pkcs12

名稱

openssl-pkcs12 - PKCS#12 檔案指令

語法

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 輸入(剖析)選項: [-info] [-nomacver] [-clcerts] [-cacerts]

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

PKCS#12 輸出(匯出)選項

[-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。

遇到載入舊版 PKCS#12 檔案的問題時,例如涉及 RC2-40-CBC,請嘗試使用 -legacy 選項,如果需要,請使用 -provider-path 選項。

-help

列印使用訊息。

-passin arg

輸入的密碼來源,以及用於加密任何輸出的私密金鑰。如需有關 arg 格式的更多資訊,請參閱 openssl-passphrase-options(1)

-passout arg

輸出檔案的密碼來源。

-password arg

使用 -export 時,-password 等同於 -passout,否則等同於 -passin

-twopass

提示輸入個別的完整性和加密密碼:大多數軟體總是假設這些密碼相同,因此這個選項會使此類 PKCS#12 檔案無法讀取。無法與選項 -password、從 PKCS#12 匯入時的 -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

請參閱 openssl(1) 中的「引擎選項」。此選項已棄用。

-provider name
-provider-path path
-propquery propq

請參閱 openssl(1) 中的「提供者選項」provider(7)property(7)

-rand files, -writerand file

請參閱 openssl(1) 中的「隨機狀態選項」 以取得詳細資訊。

PKCS#12 輸入(剖析)選項

-in filename|uri

此選項指定輸入檔案名稱或 URI。預設使用標準輸入。如果不使用 -export 選項,則此選項必須是要剖析的 PKCS#12 檔案。若要與 -export 選項搭配使用,請參閱 「PKCS#12 輸出(匯出)選項」 部分。

-out filename

預設為標準輸出,寫入憑證和私鑰的檔案名稱。它們都以 PEM 格式寫入。

-info

輸出有關 PKCS#12 檔案結構、使用的演算法和反覆運算次數的附加資訊。

-nomacver

不要嘗試驗證完整性 MAC。

-clcerts

僅輸出用戶端憑證(不輸出 CA 憑證)。

-cacerts

僅輸出 CA 憑證(不輸出用戶端憑證)。

-aes128-aes192-aes256

在輸出之前使用 AES 加密私鑰。

-aria128-aria192-aria256

在輸出之前使用 ARIA 加密私鑰。

-camellia128-camellia192-camellia256

在輸出之前使用 Camellia 加密私鑰。

-des

在輸出之前使用 DES 加密私鑰。

-des3

在輸出之前使用三重 DES 加密私鑰。

-idea

在輸出之前使用 IDEA 加密私鑰。

-noenc

完全不加密私鑰。

-nodes

此選項已於 OpenSSL 3.0 中棄用;請改用 -noenc

PKCS#12 輸出(匯出)選項

-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 檔名

如果給定 -export 選項,一個輸入檔案包含額外的憑證,將會新增到 PKCS#12 輸出。

-passcerts arg

憑證輸入的密碼來源,例如 -certfile-untrusted。有關 arg 格式的更多資訊,請參閱 openssl-passphrase-options(1)

-chain

如果存在此選項,則會建立終端實體憑證的憑證鏈,並包含在 PKCS#12 輸出檔案中。如果未提供金鑰,終端實體憑證是從 -in 檔案讀取的第一個憑證;否則,是與給定金鑰相符的第一個憑證。標準 CA 信任儲存庫用於建立鏈,以及任何使用 -untrusted 選項提供的不可信 CA 憑證。

-untrusted 檔名

一個不可信憑證的輸入檔案,可用於建立鏈,這僅與使用 -export 選項建立 PKCS#12 檔案,且同時給定 -chain 選項時相關。實際上是鏈一部分的任何憑證都會新增到輸出。

-CAfile 檔案, -no-CAfile, -CApath 目錄, -no-CApath, -CAstore uri, -no-CAstore

有關詳細資訊,請參閱 openssl-verification-options(1) 中的「受信任憑證選項」

-name 友善名稱

這會指定憑證和私密金鑰的「友善名稱」。此名稱通常會顯示在匯入檔案的軟體的清單方塊中。

-caname 友善名稱

這會指定其他憑證的「友善名稱」。此選項可用於多次指定所有憑證的名稱,順序為其出現順序。Netscape 會忽略其他憑證上的友善名稱,而 MSIE 會顯示它們。

-CSP 名稱

名稱寫為 Microsoft CSP 名稱。輸入的密碼來源,以及用於加密任何輸出私密金鑰。有關 arg 格式的更多資訊,請參閱 openssl-passphrase-options(1)

-LMK

將「本機金鑰組」識別碼新增到屬性。

-keyex|-keysig

指定私密金鑰要使用於金鑰交換或僅簽署。此選項僅由 MSIE 和類似的 MS 軟體詮釋。一般來說,「匯出等級」軟體只會允許使用 512 位元 RSA 金鑰進行加密,但簽署可以使用任意長度的金鑰。-keysig 選項標記金鑰僅供簽署。僅簽署金鑰可用於 S/MIME 簽署、Authenticode(ActiveX 控制項簽署)和 SSL 客戶端驗證,但是,由於錯誤,只有 MSIE 5.0 和更新版本支援僅簽署金鑰用於 SSL 客戶端驗證。

-keypbe 演算法, -certpbe 演算法

這些選項允許選擇用於加密私密金鑰和憑證的演算法。可以使用任何 PKCS#5 v1.5 或 PKCS#12 PBE 演算法名稱(有關更多資訊,請參閱 「附註」 部分)。如果指定密碼名稱(由 openssl list -cipher-algorithms 輸出),則會與 PKCS#5 v2.0 一起使用。基於互通性的考量,建議僅使用 PKCS#12 演算法。

特殊值 NONE 會停用私密金鑰和憑證的加密。

-descert

使用三重 DES 加密憑證。預設情況下,除非使用「-legacy」選項,否則會使用 AES-256-CBC 加密私密金鑰和憑證。如果將「-descert」與「-legacy」一起使用,則私密金鑰和憑證都會使用三重 DES 加密。

-macalg 摘要

指定 MAC 摘要演算法。如果未包含,則會使用 SHA256。

-iter 計數

此選項指定加密金鑰和 MAC 的反覆運算計數。預設值為 2048。

為了避免使用常見密碼的大型字典進行攻擊,從密碼衍生金鑰的演算法可以套用反覆運算計數:這會導致演算法的某個部分重複執行,並降低速度。MAC 用於檢查檔案完整性,但由於它通常會與金鑰和憑證使用相同的密碼,因此也可能受到攻擊。

-noiter, -nomaciter

預設情況下,加密和 MAC 反覆運算計數都設定為 2048,使用這些選項可以將 MAC 和加密反覆運算計數設定為 1,由於這會降低檔案安全性,因此除非您真的有需要,否則不應使用這些選項。大多數軟體都支援 MAC 和加密反覆運算計數。MSIE 4.0 不支援 MAC 反覆運算計數,因此需要使用 -nomaciter 選項。

-maciter

此選項包含在內以與先前版本相容,過去需要使用 MAC 反覆運算計數,但現在預設會使用。

-macsaltlen

此選項指定 MAC 的鹽長度(以位元組為單位)。根據 NIST SP 800-132,鹽長度應至少為 16 位元組。預設值為 8 位元組,以維持向下相容性。

-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 演算法允許指定私鑰和憑證的精確加密演算法。通常,預設值很理想,但偶爾軟體無法處理三重 DES 加密的私鑰,則可以使用選項 -keypbe PBE-SHA1-RC2-40 將私鑰加密降低到 40 位元 RC2。所有演算法的完整說明包含在 openssl-pkcs8(1) 中。

在 1.1 版之前,包含非 ASCII 字元的密碼以不符合規定的方式編碼,這限制了互操作性,尤其是與 Windows 的互操作性。但切換到符合標準的密碼編碼會造成存取受損壞編碼保護的舊資料的問題。因此,在讀取資料時,甚至會嘗試使用舊式編碼。如果您在生產應用程式中使用 PKCS#12 檔案,建議您轉換資料,因為實作的啟發式方法並非 MT 安全,其唯一目標是透過此命令簡化資料升級。

範例

剖析 PKCS#12 檔案並將其輸出到 PEM 檔案

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

僅將用戶端憑證輸出到檔案

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

不要加密私鑰

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

列印有關 PKCS#12 檔案的一些資訊

openssl pkcs12 -in file.p12 -info -noout

以舊式模式列印有關 PKCS#12 檔案的一些資訊

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

從可能包含金鑰和憑證的 PEM 檔案建立 PKCS#12 檔案

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

包含一些額外憑證

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

從憑證 PEM 檔案和包含金鑰的另一個 PEM 檔案匯出 PKCS#12 檔案,使用舊式提供者中的預設演算法

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

另請參閱

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

歷程

-engine 選項已在 OpenSSL 3.0 中棄用。-nodes 選項也在 OpenSSL 3.0 中棄用;請改用 -noenc

版權所有 2000-2021 The OpenSSL Project Authors。保留所有權利。

根據 Apache 授權條款 2.0(「授權條款」)授權。您只能在遵守授權條款的情況下使用此檔案。您可以在原始程式碼散佈中的 LICENSE 檔案或 https://www.openssl.org/source/license.html 中取得副本。