certificat x509 vérification de la C
J'ai des certificats en DER et format PEM, mon objectif est de récupérer les domaines de l'Émetteur et l'Objet et de vérifier le certificat de l'AC la clé publique et, simultanément, de vérifier le certificat d'autorité de certification avec la racine de la clé publique.
Je suis en mesure de récupérer tous les détails de l'émetteur et l'objet, mais impossible de vérifier le certificat.
L'API utilisée:
x509 = d2i_X509_fp (fp, &x509); //READING DER Format
x509 = PEM_read_X509 (fp, &x509, NULL, NULL); //READING PEM Format
//to retrieve the Subject:
X509_NAME_oneline(X509_get_subject_name(x509), subject, sizeof (subject));
//to retrieve the Issuer:
X509_NAME_oneline(X509_get_issuer_name(x509), issuer, sizeof (issuer));
//To store the CA public key (in unsigned char *key) that will be used to verify the
//certificate (in my case always sha1WithRSAEncryption):
RSA *x = X509_get_pubkey(x509)->pkey.rsa;
bn = x->n;
//extracts the bytes from public key & convert into unsigned char buffer
buf_len = (size_t) BN_num_bytes (bn);
stored_CA_pubKey = (unsigned char *)malloc (buf_len);
i_n = BN_bn2bin (bn, (unsigned char *)stored_CA_pubKey);
if (i_n != buf_len)
LOG(ERROR," : key error\n");
if (key[0] & 0x80)
LOG(DEBUG, "00\n");
stored_CA_pubKeyLen = EVP_PKEY_size(X509_get_pubkey(x509));
Pour la Vérification, je suis allé à travers différentes approches, mais je suis incapable de vérifier:
a)
i_x509_verify = X509_verify(cert_x509, ca_pubkey);
b)
/* verify the signature */
int iRet1, iRet2, iReason;
iRet1 = EVP_VerifyInit(&md_ctx, EVP_sha1());
iRet2 = EVP_VerifyUpdate(&md_ctx, cert_code, cert_code_len);
rv = EVP_VerifyFinal(&md_ctx, (const unsigned char *)stored_CA_pubKey,
stored_CA_pubKeyLen, cert_pubkey);
REMARQUE : cert_code et stored_CA_pubKey sont unsigned char tampons.
Vous devez vous connecter pour publier un commentaire.
Je utiliser le code suivant pour la vérification d'un certificat
init CertStore:
VerifyCert:
vous avez également besoin de nettoyage m_store
X509_STORE_CTX_get_error(storeCtx)
au lieu destoreCtx->error
; ce dernier est plus fragile en raison de modifications d'ABI.Prendre un coup d'oeil à mon auto-répondu à la question: https://stackoverflow.com/questions/3412032/openssl-c-how-do-you-verify-a-public-key-was-issued-by-your-private-ca il va un long chemin à faire ce que vous avez besoin.
Après avoir Fait cela aussi, je ne suis pas en mesure de vérifier un certificat Auto-signé