What version of openssl? I'm guessing 1.0.2. Put this line inyour code ERR_load_ERR_strings(); And youll get a more informative message. My main guess is that your allocation for the PEM buffer is too small -- is key/key_len pointing to a static buffer?