Load PEM codificó la clave privada RSA en Crypto ++
Muchas veces, el usuario tendrá claves privadas RSA codificadas por PEM. Crypto ++ requiere que estas claves estén en formato DER para cargar. He estado pidiendo a la gente que convierta manualmente sus archivos PEM a DER de antemano usando openssl de esta manera:
openssl pkcs8 -in in_file.pem -out out_file.der -topk8 -nocrypt -outform der
Eso funciona bien, pero algunas personas no entienden cómo hacerlo ni quieren hacerlo. Por lo tanto, me gustaría convertir archivos PEM a archivos DER automáticamente dentro del programa.
¿Es tan simple como quitar el "----- BEGIN CERTIFICATE -----" y "----- END CERTIFICATE -----" del PEM o también se requiere alguna otra transformación? Me han dicho que entre esos marcadores es simplemente DER codificado en b64. Aquí hay un código que demuestra el problema:
// load the private key
CryptoPP::RSA::PrivateKey PK;
CryptoPP::ByteQueue bytes;
try
{
CryptoPP::FileSource File( rsa.c_str(), true, new CryptoPP::Base64Decoder() );
File.TransferTo( bytes );
bytes.MessageEnd();
// This line Causes BERDecodeError when a PEM encoded file is used
PK.Load( bytes );
}
catch ( CryptoPP::BERDecodeErr )
{
// Convert PEM to DER and try to load the key again
}
Me gustaría evitar hacer llamadas al sistema para openssl y hacer la transformación por completo en Crypto ++ para que los usuarios puedan proporcionar el formato y las cosas "simplemente funcionan". Gracias por cualquier consejo.