Как конвертировать EVP_PKEY в байты формата DER - PullRequest
0 голосов
/ 13 апреля 2019

Используя библиотеку openssl, мне нужно преобразовать сертификат и закрытый ключ, полученный из файла pkcs12, в сертификат формата DER и закрытый ключ.

DER - это Правила выдающихся кодировок, форма кодирования BER, описанная здесь: https://wiki.openssl.org/index.php/DER

Я использовал приведенный ниже код, который, как мне кажется, извлекает сертификат.Но как мне извлечь приватный ключ в DER?i2d_EVP?Я не могу найти функцию с таким именем?

Вот мой код:

PKCS12* p12_cert = NULL;
const uint8_t* p = NULL;  // ptr to actual pkcs12 bytes
int binsize = 3200;  // size of pkcs12 data
if(d2i_PKCS12(&p12_cert, &p, binsize) != NULL) {
  EVP_PKEY *privatekey = NULL;
  X509 *x509_cert = NULL;
  STACK_OF(X509) *additional_certs = NULL;
  if(PKCS12_parse(p12_cert, m_password.c_str(), &privatekey, &x509_cert, &additional_certs) != 0) {
    int data_length = i2d_X509(x509_cert, NULL);

    uint8_t* der_cert = malloc(data_length);
    i2d_X509(x509_cert, &der_cert);

    // but how to get privateKey in DER format?

    }
 }
...