使用GnuTLS库导入DER编码的私钥失败

时间:2019-06-19 15:29:41

标签: c file private-key der gnutls

我需要将私钥(.der格式)导入gnutls_x509_privkey_t结构。为此,我首先使用文件操作将DER私钥文件解析为char []。然后,我使用了gnutls_x509_privkey_import2 API来导入私钥(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;
}

0 个答案:

没有答案