2013-05-08 8 views
5

おはよう。 Stackoverflowはこれまで何度も私を助けてくれましたが、私はこの1つに固執しており、誰かが私にいくつかの指針を与えることができることを願っています。CryptoAPIを使用してPFX証明書からX509データを取得

背景:AcrobatのプラグインAPIを使用してPDFに署名するには、証明書のX509データをAdobeのSDK CertListCabに渡す必要があります。

私の質問は、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); 
    

    HCERTSTORE hCertStore = PFXImportCertStore(&data, L"password", 0);

  • 証明書を検索します。 1つしかありません。

    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 = (BYTE*)malloc(dwX509Len);

  • CryptGetKeyParam(hCertPubKey,KP_CERTIFICATE,x509Data,&dwX509Len,0);

私は私のプログラムを実行すると、私はCryptGetKeyParamのためのエラーが表示されます。

NTE_BAD_TYPE:dwParamパラメータが未知の値の数を指定します。docsによれば

KP_CERTIFICATE:pbDataは、識別符号化規則(DER)を用いて符号化されたX.509証明書を受け取るバッファのアドレスです。証明書の公開鍵は、対応する署名または交換鍵と一致する必要があります。

私は何か間違っていますか? x509データを入手する別の方法はありますか? ご協力いただければ幸いです。私は問題を過剰に複雑きたよう

よろしく、 マグダ

答えて

2

が見えます。

hContext->pbCertEncoded 
hContext->cbCertEncoded 

私に必要なデータを提供します。 KP_CERTIFICATEを使用すると、X509データを取得しなかった理由

はまだあなたが私の一日保存

+0

...理解していません。ありがとう – nommyravian

関連する問題