PFXImportCertStore

PFX BLOB をインポートし、証明書と関連する秘密鍵を含むストアのハンドルを返す。

PFXImportCertStore pPFX, szPassword, dwFlags

pPFX : [var] エクスポートおよび暗号化された証明書と鍵を含む PFX パケットを含む [CRYPT_DATA_BLOB](/previous-versions/windows/desktop/legacy/aa381414(v=vs.85)) 構造体へのポインタ。
szPassword : [wstr] PFX パケットを復号および検証するために使用される文字列パスワード。長さが 0 より大きい文字列、空文字列、または **NULL** のいずれであっても、この値はパケットを暗号化するために使用された値と完全に同じでなければならない。Windows 8 および Windows Server 2012 以降、PFX パケットが [PFXExportCertStoreEx](nf-wincrypt-pfxexportcertstoreex.md) 関数で **PKCS12_PROTECT_TO_DOMAIN_SIDS** フラグを使用して作成された場合、**PFXImportCertStore** 関数はそれを暗号化するために使用された Active Directory (AD) プリンシパルを使用してパスワードの復号を試みる。AD プリンシパルは *pvPara* パラメータで指定される。**PFXExportCertStoreEx** 関数の *szPassword* パラメータが空文字列または **NULL** で、*dwFlags* パラメータが **PKCS12_PROTECT_TO_DOMAIN_SIDS** に設定されていた場合、その関数はランダムにパスワードを生成し、それを *pvPara* パラメータで指定された AD プリンシパルに暗号化した。その場合、PFX パケットが作成されたときに使用された値 (空文字列または **NULL**) にパスワードを設定する必要がある。**PFXImportCertStore** 関数は AD プリンシパルを使用してランダムなパスワードを復号し、ランダムに生成されたパスワードを使用して PFX 証明書を復号する。パスワードの使用が終了したら、[SecureZeroMemory](/previous-versions/windows/desktop/legacy/aa366877(v=vs.85)) 関数を呼び出してメモリからクリアする。パスワードの保護に関する詳細は [Handling Passwords](/windows/win32/SecBP/handling-passwords) を参照。
dwFlags : [int] 

(プラグイン / モジュール : crypt32.dll)

解説

PFX BLOB をインポートし、証明書と関連する秘密鍵を含むストアのハンドルを返す。

[戻り値]
関数が成功した場合、インポートされた証明書 (利用可能な秘密鍵を含む)
を含む証明書ストアへのハンドルを返す。関数が失敗した場合、つまり、パスワードパラメータがエクスポートされたパケットの暗号化に使用されたパスワードと完全に一致しない場合や、PFX
BLOB の復号時に他の問題があった場合、関数は **NULL**
を返し、[GetLastError](/windows/win32/api/errhandlingapi/nf-errhandlingapi-getlasterror)
関数を呼び出してエラーコードを取得できる。

[備考]
**PFXImportCertStore**
関数は一時ストアを開く。関数が成功した場合、[CertCloseStore](nf-wincrypt-certclosestore.md)
関数を呼び出してストアへのハンドルを閉じる必要がある。PFX パケットから証明書をインポートするとき、CSP/KSP コンテナ名は
PKCS8ShroudedKeyBag SafeBag [bagId: 1.2.840.113549.1.12.10.1.2] の OID
1.3.6.1.4.1.311.17.1 を持つ AttributeId を使用して決定される (この ASN.1 構造の詳細については
[PKCS #12](https://www.rfc-editor.org/rfc/rfc7292) を参照)。*
**AttributeId:** 1.3.6.1.4.1.311.17.1 * **Value:** KSP 名または CSP
名。AttributeId が存在せず、PREFER_CNG フラグが渡された場合、MS_KEY_STORAGE_PROVIDER
が選択される。AttributeId が存在せず、PREFER_CNG フラグが渡されなかった場合、プロバイダ名は公開鍵アルゴリズム
(つまり、公開鍵アルゴリズムは PKCS #8 内の AlgorithmIdentifier によって決定される)
に基づいて決定される。* **RSA:** MS_ENHANCED_PROV_W * **DSA:**
MS_DEF_DSS_DH_PROV_W。同様に、鍵指定は OID 2.5.29.15 (szOID_KEY_USAGE) を持つ
AttributeId を使用して次のように決定される。**CAPI 鍵が使用される場合:** * KEY_ENCIPHERMENT
または DATA_ENCIPHERMENT が設定されている場合、鍵指定は AT_KEYEXCHANGE に設定される。*
DIGITAL_SIGNATURE または CERT_SIGN または CRL_SIGN が設定されている場合、鍵指定は
AT_SIGNATURE に設定される。**CNG 鍵が使用される場合:** * KEY_ENCIPHERMENT または
DATA_ENCIPHERMENT または ENCIPHER_ONLY または DECIPHER_ONLY
が設定されている場合、ncrypt 鍵使用法は ALLOW_DECRYPT に設定される。* DIGITAL_SIGNATURE または
CERT_SIGN または CRL_SIGN が設定されている場合、ncrypt 鍵使用法は ALLOW_SIGN に設定される。*
KEY_AGREEMENT が設定されている場合、ncrypt 鍵使用法は ALLOW_KEY_AGREEMENT
に設定される。AttributeId が存在しない場合、RSA または DH に対して CAPI 鍵の値は AT_KEYEXCHANGE
に設定され、アルゴリズムは PKCS #8 の AlgorithmIdentifier によって決定される。それ以外の場合、アルゴリズムは
AT_SIGNATURE に設定される。CNG 鍵の値については、すべての ncrypt 鍵使用法が設定される。>[!NOTE] >PFX
パケット内に無効なプロバイダ名が存在する場合、または基本または強化暗号プロバイダがこのレジストリキー
(**HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography\\Defaults\\Provider**)
に存在しない場合、このレジストリサブキー
(**HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography\\Defaults\\Provider
Types**) を使用してプロバイダ型によるプロバイダ検索が実行される。Microsoft は PFX のインポートのために次の 2
つの暗号化/ハッシュアルゴリズムのみをサポートする。* TripleDES-SHA1 *
AES256-SHA256。上記のアルゴリズムのいずれにおいても、証明書の暗号化は省略可能。Microsoft は `All Tasks`
> `Yes, export the private key` の選択により、証明書ストアから PFX
をエクスポートできる。そこでは、これら 2 つの選択肢のいずれかに一致する暗号化/ハッシュアルゴリズムを選択できる。次を使用して
PowerShell で PFX をエクスポートできる。
(以下省略)

情報

プラグイン / モジュールcrypt32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の crypt32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_crypt32_gen2.hs