Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Certificate 如何将HCRYPTKEY或PRIVATEKEYBLOB导出到PFX文件_Certificate_Cryptoapi - Fatal编程技术网

Certificate 如何将HCRYPTKEY或PRIVATEKEYBLOB导出到PFX文件

Certificate 如何将HCRYPTKEY或PRIVATEKEYBLOB导出到PFX文件,certificate,cryptoapi,Certificate,Cryptoapi,我有一个以前生成的RSA私有签名密钥,它存储为。为了更好地管理密钥,我正在尝试将其移动到新证书中。如何将这个blob转换为.pfx证书 我有一个HCRYPTPROV(使用MS_ENHANCED_PROV和PROV_RSA_FULL)。 我可以从CryptImportKey获得HCRYPTKEY PFXExportCertStoreEx似乎是将其导出到PFX blob(我假设我会将其写入文件)的函数,但我不知道如何将密钥放入其中。如果我正确理解您的问题,您将证书和相应的私钥作为数据blob,并且两

我有一个以前生成的RSA私有签名密钥,它存储为。为了更好地管理密钥,我正在尝试将其移动到新证书中。如何将这个blob转换为.pfx证书

我有一个HCRYPTPROV(使用MS_ENHANCED_PROV和PROV_RSA_FULL)。 我可以从CryptImportKey获得HCRYPTKEY


PFXExportCertStoreEx似乎是将其导出到PFX blob(我假设我会将其写入文件)的函数,但我不知道如何将密钥放入其中。

如果我正确理解您的问题,您将证书和相应的私钥作为数据blob,并且两者都是分开的。如果您使用CryptoAPI,重要的是要了解API主要面向使用存储在证书存储中的证书和存储在密钥容器中的私钥。类似的函数遵循这种方法,允许您将所有证书从一个证书存储导出到数据blob,该数据blob可以保存为扩展名为.PFX的文件

因此,您可以执行以下操作:

  • 使用
    CERT\u store\u PROV\u MEMORY
    参数创建临时证书存储
  • 使用函数将证书blob放置到存储区
  • 使用with
    CRYPT\u NEWKEYSET
    选项创建新密钥容器。您应该为容器指定一些唯一的名称(请参见函数的
    pszContainer
    参数)
  • 将当前拥有的
    PRIVATEKEYBLOB
    中有关功能的信息导入密钥容器
  • 将证书存储区中的证书绑定到密钥容器。为此,您应该使用设置
    CERT\u KEY\u PROV\u INFO\u PROP\u ID
    ,这就是证书的扩展属性。重要的是要理解扩展属性不是 X.509规范。扩展属性允许您将与证书相关联的一些附加信息存储在证书存储中(而不是证书本身)。如果是
    CERT\u KEY\u PROV\u INFO\u PROP\u ID
    您可以存储密钥容器中描述的完整信息()
  • 现在,可以使用将临时证书存储(它只保存一个证书,并且具有到密钥容器的链接)导出到内存blob,然后将内存blob保存在.PFX文件中
  • 您应该删除在步骤3中创建的密钥容器。为此,您需要使用with
    CRYPT\u DELETEKEYSET
    选项打开密钥容器

  • 我所拥有的只是私钥blob,我想将其存储在一个新证书中。我怀疑我需要将
    CertAddIncodedCertificateTostore
    与创建空白证书的东西交换,但我找不到一个函数来执行此操作。您可以从密钥创建自签名证书,将您刚刚创建的证书链接到密钥并导出该证书。自签名证书代码示例: