При проверке сертификата я получаюпроверки подписи x509
EVP_F_EVP_PKEY_GET1_DH
Моя цель - Проверить подпись сертификата. У меня есть 2 сертификата: 1. сертификат CA 2. сертификат, выданный CA. я извлечена 'RSA Public Key (ключ)' Modulus От CA сертификат с использованием,
pPublicKey = X509_get_pubkey(x509);
buf_len = (size_t) BN_num_bytes (bn);
key = (unsigned char *)malloc (buf_len);
n = BN_bn2bin (bn, (unsigned char *) key);
if (n != buf_len)
LOG(ERROR," : key error\n");
if (key[0] & 0x80)
LOG(DEBUG, "00\n");
Теперь у меня есть открытый ключ & CA длиной ключа CA, а также имеющие сертификат, выданный ЦС в буфер, длина буфера & общественности ключ. Чтобы проверить подпись, у меня есть следующий код:
int iRet1, iRet2, iRet3, iReason;
iRet1 = EVP_VerifyInit(&md_ctx, EVP_sha1());
iRet2 = EVP_VerifyUpdate(&md_ctx, buf, buflen);
iRet3 = EVP_VerifyFinal(&md_ctx, (const unsigned char *)CAkey, CAkeyLen, pubkey);
iReason = ERR_get_error();
if(ERR_GET_REASON(iReason) == EVP_F_EVP_PKEY_GET1_DH)
{
LOG(ERROR, "EVP_F_EVP_PKEY_GET1_DH\n");
}
LOG(INFO,"EVP_VerifyInit returned %d : EVP_VerifyUpdate returned %d : EVP_VerifyFinal = %d \n", iRet1, iRet2, iRet3);
EVP_MD_CTX_cleanup(&md_ctx);
EVP_PKEY_free(pubkey);
if (iRet3 != 1)
{
LOG(ERROR,"EVP_VerifyFinal() failed\n");
ret = -1;
}
LOG(INFO,"signature is valid\n");
Я не могу понять, что могло бы пойти не так ??? Пожалуйста, если кто-то сталкивался с такими же проблемами? Что EVP_F_EVP_PKEY_GET1_DH
Ошибка означает?
Заранее спасибо - opensid
HI caf, Спасибо за ваш ответ. Мне понравился «X509_verify (self_x509, X509_get_pubkey (CA_x509)), но он возвращает -1. Еще одна вещь, которую я хочу упомянуть, - длина открытого ключа CA RSA - 256 в Ubuntu (с использованием API-интерфейса openssl «EVP_PKEY_size» (X509_get_pubkey (x509)) ») и 270 в Windows (всплывающее окно сертификата). Я чувствую, что это может быть проблемой. – openssid
привет, вы можете рассказать мне, как вы проверили, используя цепочку доверия ' – Balamurugan