Не удается импортировать закрытый ключ в кодировке DER с использованием библиотеки GnuTLS - PullRequest
0 голосов
/ 19 июня 2019

Мне нужно импортировать закрытый ключ (формат .der) в структуру gnutls_x509_privkey_t. Для этого я сначала проанализировал файл закрытого ключа DER в char [], используя файловые операции. Затем я использовал API gnutls_x509_privkey_import2 для импорта закрытого ключа (char []).

При импорте возвращается с ошибкой « Анализатор ASN1: ошибка при разборе DER ».

Примечание: Когда я пытаюсь проанализировать закрытый ключ PEM вместо использования DER, API импорта работает нормально. Я делаю какую-либо ошибку при разборе файла DER на char [] или есть способ разобрать файл DER?

Кроме того, я не хочу использовать gnutls_load_file API для загрузки закрытого ключа DER.

Я приложил приведенный ниже пример кода:

#include <stdio.h>
#include <stdlib.h>

#include <gnutls/gnutls.h>
#include <gnutls/x509.h>
#include <gnutls/abstract.h>

int main()
{
char key_der[1675];
char file_to_char;
FILE *fptr;
int length;
gnutls_x509_privkey_t pkey;
int ret;
gnutls_datum_t key;

ret = gnutls_x509_privkey_init(&pkey);
if (ret < 0) {
    printf("gnutls_x509_privkey_init: %d\n", ret);
}

if ((fptr = fopen("<privatekey_filename>.der", "r")) == NULL)
{
    printf("Error! opening file\n");
    // Program exits if file pointer returns NULL.
    exit(1);
}

int i = 0;
file_to_char = fgetc(fptr);
while (file_to_char != EOF)
{
    key_der[i] = file_to_char;
    i++;
    file_to_char = fgetc(fptr);
}
key_der[i] = EOF;

key.data = (void *) key_der;
key.size = i;

ret = gnutls_x509_privkey_import2(pkey, &key, GNUTLS_X509_FMT_DER, NULL, 0);
if (ret < 0) {
    printf("\nret value = %d\n", ret);
    printf("gnutls_x509_privkey_import2: %s\n", gnutls_strerror(ret));
}

fclose(fptr);

return 0;
}
...