Из твоего вопроса мне не совсем понятно, что ты имеешь в виду под "сохранить в структуре".Но я могу объяснить, как вы можете получить доступ к фактическому открытому ключу, хранящемуся в вашем сертификате, чтобы вы могли делать с ним все, что хотите.
Во-первых, вы можете использовать следующее для получения открытого сертификата.ключ, в его общем формате:
EVP_PKEY *pubkey = X509_get_pubkey(cert);
/* If it is not NULL, do what needs to be done with pubkey */
EVP_PKEY_free(pubkey);
См. документацию X509_get_pubkey()
для получения дополнительной информации.
Теперь, когда у вас есть этот общий открытый ключ, вы можетеиспользуйте его средства доступа к ключу более низкого уровня , чтобы получить доступ к базовому открытому ключу в его определенном формате.Например:
RSA *rsapubkey = EVP_PKEY_get1_RSA(pubkey);
if (NULL != rsapubkey) {
printf("This cert has an RSA public key\n");
/* Do your stuff with the RSA key, for example using RSA_get0_key()
for current versions of OpenSSL, or directly access the fields
rsapubkey->n and rsapubkey->e for older versions */
RSA_free(rsapubkey);
}
Функция EVP_PKEY_get1_RSA()
возвращает NULL
, если базовый ключ не является ключом RSA.В противном случае вы можете использовать его, чтобы получить доступ к модулю (n
) и показателю степени (e
), что, в основном, - все, что вам нужно для его «сохранения».Или вы можете удерживать rsapubkey
, поскольку он содержит всю информацию открытого ключа.Вы должны RSA_free()
, когда закончите.
Аналогично, вы можете использовать EVP_PKEY_get1_EC_KEY()
, если вы ожидаете клавишу EC.