小编Mag*_*gda的帖子

使用CryptoAPI从PFX证书获取X509数据

美好的一天.Stackoverflow以前帮了我很多次,但是我有点困在这个上,希望有人可以给我一些指示.

背景:我需要将证书的X509数据传递给Adobe的SDK CertListCab,以便使用我的Acrobat插件api对PDF进行签名.

我的问题是如何使用CryptoAPI从PFX证书中获取X509数据?

我做了以下事情:

  • 将我的PFX证书转换为内存存储.

    CRYPT_DATA_BLOB data;

  • 打开文件并填充数据.

    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);
    
    Run Code Online (Sandbox Code Playgroud)

    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 …

c++ cryptoapi pfx x509

6
推荐指数
1
解决办法
2459
查看次数

在PDF签名中包含时间戳的步骤

美好的一天,

我正在尝试将时间戳信息嵌入到pdf签名中,以便adobe会向我报告签名是时间戳.目前,我所获得的只是Adobe报告"签名包含嵌入式时间戳,但无法验证",当您查看日期/时间属性时,它表示"时间戳授权"不可用和"显示证书"是灰色的.

显然,我在构建PKCS#7消息时做错了.但我现在不知道.有人可以通过描述我需要采取的步骤来帮助我,以便我的签名有时间戳吗?或者建议一个可以帮我找到问题的工具?

我正在使用Crypto API.我目前遵循的步骤如下:

  1. 使用CryptHashMessage函数(SHA256)创建pdf数据的摘要.
  2. 使用CryptRetrieveTimeStamp函数将此摘要发送到TSA .我已设置*TIMESTAMP_DONT_HASH_DATA*标志,以便不再对哈希值进行哈希处理.
  3. 来自TSA的repsonse被添加到*CRYPT_SIGN_MESSAGE_PARA*结构中作为未经身份验证的属性,并且签名时间被添加为经过身份验证的属性.
  4. 然后我使用CryptSignMessage函数来签署使用上述结构的原始数据.

如何检查数据是否正确,以便adobe可以告诉我签名已被加上时间戳?

此致,玛格达

pdf cryptoapi digital-signature trusted-timestamp

4
推荐指数
1
解决办法
5454
查看次数

标签 统计

cryptoapi ×2

c++ ×1

digital-signature ×1

pdf ×1

pfx ×1

trusted-timestamp ×1

x509 ×1