我使用PFXImportCertStore导入了第三方CA颁发的PFX证书。在成功导入时,PCERT_KEY_PROV_INFO_PROP_ID被默认设置为以下值,并通过相同的调用PFXImportCertStore

为什么AT_SIGNATURE被认为是AT_KEYEXCHANGE键类型而不是AT_KEYEXCHANGE键类型?
pwszProvName设置为Microsoft密码提供程序v1.0?

4.由于这些问题,我无法使用CryptSignMessage签署数据。内部调用无法获取用于签名的私钥的上下文。关于我如何解决这个问题,有什么建议吗?我能够签署一个自我签署的PFX证书,我产生了。您认为我是否可以将私钥导出到新容器,并将其属性设置为AT_SIGNATURE,将csp提供程序类型设置为PROV_RSA_AES,这是因为我需要SHA256。
我正在使用XP sp3。
谢谢
发布于 2011-06-12 18:11:21
答1:密钥被自动归类为AT_KEYEXCHANGE,因为它的用法也是加密会话密钥等等(虽然我的应用程序的主要目的是对数据进行数字签名),CA已经定义了密钥使用策略来包含加密,这迫使CryptoAPI将密钥类型映射到AT_KEYEXCHANGE。
答2:我假设是这台机器中的默认csp,那么.?请给我更好的解释
答案3:来自Crypto的许多人的回复中,AT_KEYEXCHANGE密钥也可以用来签署数据,只要您的证书的密钥使用允许您进行数字签名。第三方CA发出可用于多种用途的证书似乎是一种常见的做法。因此,第三方CA正确地颁发了证书。
答4:我用同一个第三方颁发的证书使用CryptSignMessage对数据进行了签名。我将PCERT_KEY_PROV_INFO_PROP_ID中的PCERT_KEY_PROV_INFO_PROP_ID更改为PROV_RSA_AES,并为pwsProvName传递NULL。执行此更改的方法是首先使用CertGetCertificateContextProperty获取属性,然后使用CertSetCertificateContextProperty设置您选择的属性。这解决了签字问题。现在我可以和SHA256/RSA1024,AT_EXCHANGE key签名了。
https://stackoverflow.com/questions/6317578
复制相似问题