Ich versuche, EVP_ * APIs von OpenSSL zu verwenden, aber ich habe ein merkwürdiges Verhalten bei dem Versuch, den Public/Private-Schlüssel aus der EVP_PKEY-Struktur auszugeben.Aufruf von OpenSSLs PEM_write_PUBKEY || PEM_write_PrivateKey API beendet das Programm abrupt mit der Meldung "no OPENSSL_Applink"
Problem :: Nach dem Auffüllen der EVP_PKEY Struktur, beim Aufruf PEM_write_PUBKEY
API (siehe TRIAL1), das Programm beendet. Das Gleiche passiert beim Aufruf von PEM_write_PrivateKey
API (siehe TRIAL2).
Ausgang: Ich bin mit einer temp.pem
0 Byte Datei links und eine Nachricht auf cmd prompt sagt OPENSSL_Uplink(5D8C7000,08): no OPENSSL_Applink
#define TRIAL1
void InitOpenSSLLib(void)
{
SSL_library_init();
SSL_load_error_strings();
OpenSSL_add_all_algorithms();
}
int main(int argc, char** argv)
{
EVP_PKEY_CTX* ctx = NULL;
EVP_PKEY* pKeyPair = EVP_PKEY_new();
BIO *mem = BIO_new(BIO_s_mem());
FILE* fp = fopen("temp.pem", "wb");
InitOpenSSLLib();
ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, 0);
EVP_PKEY_keygen_init(ctx);
EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, 2048);
EVP_PKEY_keygen(ctx, &pKeyPair);
// Succeeds till here... all of the above called APIs return value greater than 0
#ifdef TRIAL1
// Program exits even before printing any error
if (PEM_write_PUBKEY(fp, pKeyPair) <= 0)
printf("PEM_write_PUBKEY failed\n");
#elif TRIAL2
// same behavior with this API too
PEM_write_PrivateKey(fp, pKeyPair, NULL, NULL, 0, 0, NULL);
#endif
// Tried this too.... but the control never reaches here
fflush(fp);
// Tried this too... most of the mem struct members are NULL.
EVP_PKEY_print_private(mem, pKeyPair, 0, 0);
//.... Cleanup codes
fclose(fp);
BIO_free_all(mem);
return 0;
}
Alle Zeiger? Mache ich hier etwas falsch? Gibt es eine andere Möglichkeit, privaten/öffentlichen Schlüssel oder das Paar PEM-Format in eine Datei zu dumpen?
Ich bin mit VC++ 2015. Auch Ctrl beim Auftreffen auf + F5, zeigt die Eingabeaufforderung die Meldung :: OPENSSL_Uplink (5D8C7000,08): nein OPENSSL_Applink
meine eigene Frage zu beantworten für future devs
Also, was genau ist das Ergebnis? Eine Datei "temp.pem" mit 0 Bytes? – Ctx
@Ctx: Genau .. – Abhineet
Hilft das? https://www.openssl.org/docs/faq.html#PROG2 – Ctx