Чтение RSA-ключей из файла .PEM в структуру RSA в C

JKJS

Замечания:

Предположим, что закрытый ключ RSA создается следующими командами:

openssl genrsa -out mykey.pem 1024 

Тогда нет проблем с чтением ключа из этого файла в C:

 RSA *privatekey=NULL; privatekey=PEM_read_RSAPrivateKey(fp,NULL,NULL,NULL); if(privatekey==NULL) ERR_print_errors_fp(stderr); 

Но, если RSA keypair создается по следующей команде:

 openssl req -newkey rsa:1024 -sha1 -keyout mykey.pem -out rootreq.pem 

Затем чтение из mykey.pem приводит к ошибке. Зачем?

JKJS Hardik

Во 2-й команде вы дали кодовую фразу? Откройте ключ, созданный 2-й командой в любом редакторе – видите ли вы ENCRYPTED в байтах?

Если да, то именно поэтому вы не можете прочитать его с помощью PEM_read_RSAPrivateKey потому что вы передаете третий параметр как NULL.

Передайте обратный вызов, чтобы получить пароль при вызове PEM_read_RSAPrivateKey .

В качестве альтернативы вы можете удалить пароль из ключа, используя следующую команду

 openssl rsa -in mykey.pem -out mykey1.pem. 

Это потребует парольной фразы – если вы дадите правильную кодовую фразу, вы получите ключ в незашифрованном виде в mykey1.pem