Как сохранить открытый ключ в сообщениях сертификата SSL с использованием OpenSsl? - PullRequest
0 голосов
/ 07 октября 2018

Я хочу сохранить открытый ключ и его алгоритм в сообщениях сертификатов SSL.

в библиотеке OpenSSL, я нашел функцию с именем public_key_type, которая возвращает алгоритм открытого ключа.но для извлечения открытого ключа я нашел только функцию с именем evp_PKEY_print_public, которая печатает открытый ключ.но я не хочу его печатать.Моя цель - сохранить его в структуре.кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 08 октября 2018

Из твоего вопроса мне не совсем понятно, что ты имеешь в виду под "сохранить в структуре".Но я могу объяснить, как вы можете получить доступ к фактическому открытому ключу, хранящемуся в вашем сертификате, чтобы вы могли делать с ним все, что хотите.

Во-первых, вы можете использовать следующее для получения открытого сертификата.ключ, в его общем формате:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...