美好的一天.Stackoverflow以前帮了我很多次,但是我有点困在这个上,希望有人可以给我一些指示.
背景:我需要将证书的X509数据传递给Adobe的SDK CertListCab,以便使用我的Acrobat插件api对PDF进行签名.
我的问题是如何使用CryptoAPI从PFX证书中获取X509数据?
我做了以下事情:
将我的PFX证书转换为内存存储.
CRYPT_DATA_BLOB data;
打开文件并填充数据.
Run Code Online (Sandbox Code Playgroud)FILE *fIn = fopen("C:\\certificate\\MyPfx.pfx", "rb") fseek(fIn, 0, SEEK_END); data.cbData = ftell(fIn); fseek(fIn, 0, SEEK_SET); data.pbData = (BYTE *)malloc(data.cbData); fread(data.pbData, 1, data.cbData, fIn); fclose(fIn);
HCERTSTORE hCertStore = PFXImportCertStore(&data, L"password", 0);
找到证书.只有一个.
PCCERT_CONTEXT hContext = CertFindCertificateInStore (hCertStore, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0, CERT_FIND_ANY, NULL, NULL);
获取证书的公钥信息.
BOOL bFreeHandle; HCRYPTPROV hProv; DWORD dwKeySpec; HCRYPTKEY hCertPubKey;
CryptAcquireCertificatePrivateKey (hContext, 0, NULL, &hProv, &dwKeySpec, &bFreeHandle);
CryptImportPublicKeyInfo(hProv, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, &hContext->pCertInfo->SubjectPublicKeyInfo, &hCertPubKey));
现在我尝试为X509数据腾出空间.
DWORD dwX509Len;
BYTE *x509Data;
CryptGetKeyParam(hCertPubKey,KP_CERTIFICATE,NULL,&dwX509Len,0);
x509Data …
美好的一天,
我正在尝试将时间戳信息嵌入到pdf签名中,以便adobe会向我报告签名是时间戳.目前,我所获得的只是Adobe报告"签名包含嵌入式时间戳,但无法验证",当您查看日期/时间属性时,它表示"时间戳授权"不可用和"显示证书"是灰色的.
显然,我在构建PKCS#7消息时做错了.但我现在不知道.有人可以通过描述我需要采取的步骤来帮助我,以便我的签名有时间戳吗?或者建议一个可以帮我找到问题的工具?
我正在使用Crypto API.我目前遵循的步骤如下:
如何检查数据是否正确,以便adobe可以告诉我签名已被加上时间戳?
此致,玛格达