Security PFXImportCertStore-问题-加密API
我使用Security PFXImportCertStore-问题-加密API,security,cryptography,digital-signature,cryptoapi,pfx,Security,Cryptography,Digital Signature,Cryptoapi,Pfx,我使用PFXImportCertStore导入了第三方CA颁发的PFX证书。成功导入后,PCERT\u KEY\u PROV\u INFO\u PROP\u ID通过default通过同一调用,PFXImportCertStore 为什么dwKeySpec被识别为AT\u密钥交换密钥类型而不是AT\u签名 为什么将pwszProvName设置为Microsoft基本加密提供程序v1.0 首先,颁发证书只是为了进行数字签名。但密钥使用字段表明证书可用于数字签名、不可否认性、密钥加密、数据加密
PFXImportCertStore
导入了第三方CA颁发的PFX证书。成功导入后,PCERT\u KEY\u PROV\u INFO\u PROP\u ID
通过default通过同一调用,PFXImportCertStore
dwKeySpec
被识别为AT\u密钥交换
密钥类型而不是AT\u签名
pwszProvName
设置为Microsoft基本加密提供程序v1.0
CryptSignMessage
对数据进行签名。内部调用无法获取用于签名的私钥的上下文。对我如何回避这个问题有什么建议吗?
我可以使用我生成的自签名PFX证书进行签名。您认为我可以将私钥导出到新容器中,并将其属性设置为AT_SIGNATURE
,将csp提供程序类型设置为PROV_RSA_AES
,这是我需要的SHA256
我正在使用XP sp3
感谢回答1:密钥在密钥交换处自动分类为
,因为它的用途也是加密会话密钥等。也就是说,虽然我的应用程序的主要目的是对数据进行数字签名,但CA已经定义了密钥使用策略以包括加密,这将强制CryptoAPI将密钥类型映射到密钥交换处的
回答2:我假设它是这台机器中的默认csp,那么。。。?有更好的解释吗
回答3:从加密谷歌集团的许多人的回复中,密钥也可以用于对数据进行签名,前提是您的证书的密钥使用允许您进行数字签名。第三方CA签发可用于多种目的的证书似乎是一种常见做法。因此,第三方CA已正确颁发证书
回答4:我设法用第三方颁发的相同证书使用CryptSignMessage
对数据进行签名。我将PCERT_KEY_PROV_INFO_PROP_ID
中的dwProvType
更改为PROV_RSA_AES
,并将pwsProvName
传递为空。执行此更改时,首先使用CertGetCertificateContextProperty
获取属性,然后使用CertSetCertificateContextProperty
设置您选择的属性。这解决了签名问题。现在我可以使用/RSA1024,在_-KEYEXCHANGE
密钥进行签名。回答1:密钥自动分类为
在_-KEYEXCHANGE
,因为它的用途也是加密会话密钥等。也就是说,虽然我的应用程序的主要目的是对数据进行数字签名,但CA已经定义了密钥使用策略,包括加密,这将强制CryptoAPI将密钥类型映射到密钥交换处的
回答2:我假设它是这台机器中的默认csp,那么。。。?有更好的解释吗
回答3:从加密谷歌集团的许多人的回复中,密钥也可以用于对数据进行签名,前提是您的证书的密钥使用允许您进行数字签名。第三方CA签发可用于多种目的的证书似乎是一种常见做法。因此,第三方CA已正确颁发证书
回答4:我设法用第三方颁发的相同证书使用CryptSignMessage
对数据进行签名。我将PCERT_KEY_PROV_INFO_PROP_ID
中的dwProvType
更改为PROV_RSA_AES
,并将pwsProvName
传递为空。执行此更改时,首先使用CertGetCertificateContextProperty
获取属性,然后使用CertSetCertificateContextProperty
设置您选择的属性。这解决了签名问题。现在我可以用/RSA1024,在交换键上签名了