我需要将私钥(.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;
}