Bonne journée. Stackoverflow m'a aidé plusieurs fois auparavant, mais je suis un peu coincé sur celui-ci et j'espère que quelqu'un pourra me donner quelques conseils. Contexte: J'ai besoin de transmettre les données X509 d'un certificat au SDK CertListCab d'Adobe afin de signer le PDF à l'aide de mon API de plugin Adobe.Récupère les données X509 d'un certificat PFX en utilisant CryptoAPI
Ma question est comment puis-je obtenir les données X509 à partir d'un certificat PFX en utilisant CryptoAPI?
Je l'ai fait ce qui suit:
Conversion mon certificat PFX à un magasin en mémoire.
CRYPT_DATA_BLOB data;
Ouvrir le fichier et renseigner les données.
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);
Trouver le certificat. Il n'y a qu'un seul.
PCCERT_CONTEXT hContext = CertFindCertificateInStore (hCertStore, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0, CERT_FIND_ANY, NULL, NULL);
Obtenez les informations clé publique du certificat.
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));
Maintenant, j'essaie de faire de l'espace pour les données X509.
DWORD dwX509Len;
BYTE *x509Data;
CryptGetKeyParam(hCertPubKey,KP_CERTIFICATE,NULL,&dwX509Len,0);
x509Data = (BYTE*)malloc(dwX509Len);
je passe dans mon tampon.
CryptGetKeyParam(hCertPubKey,KP_CERTIFICATE,x509Data,&dwX509Len,0);
Quand je lance mon programme je reçois l'erreur pour CryptGetKeyParam:
NTE_BAD_TYPE: Le paramètre dwParam spécifie un numéro de valeur inconnue.
Selon le docs:
KP_CERTIFICATE: pbData est l'adresse d'une mémoire tampon qui reçoit le certificat X.509 qui a été codé en utilisant des règles de codage distinctives (DER). La clé publique du certificat doit correspondre à la signature ou à la clé d'échange correspondante.
Est-ce que je fais quelque chose de mal? Existe-t-il un autre moyen d'obtenir les données x509? Toute aide serait appréciée.
Cordialement, Magda
Vous avez sauvé ma journée. Merci – nommyravian