[Programación] openssl
Mario Oroz
jmoroz en uol.com.ar
Lun Oct 27 07:43:16 ART 2008
emiliano nuñez escribió:
> Hola, alguien ha programado con OpenSSL?
>
> Creo una clave:
>
> openssl genrsa -des3 -out claveprivada.pem 2048
>
> (le pongo de password: "passworddeprueba")
>
> luego escribo este pequeño código:
>
> <c>
>
> //Abrimos el archivo de la clave privada.
>
>
>
> BIO *outPriK;
>
> outPriK = BIO_new_file("/home/emiliano/src/ssl/claveprivada.pem", "r");
>
> if(!outPriK) {printf( "Error abriendo el archivo de clave privada\n");
> return 0;}
>
>
> //Leemos la clave abierto anteriormente.
>
>
>
> EVP_PKEY * key;
>
> key = PEM_read_bio_PrivateKey(outPriK, NULL, 0, "passworddeprueba");
>
> if (key == NULL) {printf("Error leyendo la clave privada\n"); return 0;}
>
> </c>
>
> Luego al correr el programa me tira:
>
> "Error leyendo la clave privada"
>
> Alguien se le ocurre que cagada me estoy mandando?
>
> Saludos.
Hola Emiliano,
Estoy tratando de implementar en un sistema de gestión la utilización de
factura electrónica.
El sistema esta en Progress 9.1B (Base datos + lenguaje 4gl) este no soporta
conexiones seguras.
Así que eché mano de las dll de Openssl y estoy
tratando de implementar algunas funciones (las mismas que estas usando
vos) declarando las mismas como procedimientos externos y haciendo llamadas
a las mismas.
Al igual que vos la funcion PEM_read_bio_PrivateKey me da problemas,
directamente me aborta el programa.
Yo le achaco el problema a que outPriK del tipo BIO o Puntero a un tipo
BIO no se genera correctamente.
Me podrías explicar que es ese tipo BIO, si es un tipo de variable como las int
o char (simples) o es un puntero a una estructura.
Trate de leer el bio.h y el fuente de la función pero no me aclara ya que debo
conocer bastante de C.
Esto es lo que hago para usar las funciones:
=====>
/* Declaro la funcion como externa usando el tipo de
llamadas a dll's del tipo C y declaro los parametros
con los tipos de datos que indica Progresss.
El RETURN PARAMETER es lo que regresa la funcion, en este caso
un puntero a BIO (que no se que es?), los otros son de tipo
CHARACTER. */
PROCEDUR BIO_new_file EXTERNAL "libeay32.dll" CDECL:
DEFINE INPUT PARAMETER bio_f AS CHAR.
DEFINE INPUT PARAMETER mode_f AS CHAR.
DEFINE RETURN PARAMETER bio AS MEMPTR.
END.
====
/*Invoco la función declarada: */
DEF VAR bio_ptr AS MEMPTR.
/*
Del archivo BIO.h (fuentes de OpenSSL)
BIO *BIO_new_file(const char *filename, const char *mode);
*/
RUN BIO_new_file ("CUIT_20246687073.crt", "r", OUTPUT bio_ptr).
<=====
Como veras estamos en la misma... espero que nos podamos ayudar!
O que algun guru en C nos tire un soga!
un Saludo.
Mario.
Más información sobre la lista de distribución Programacion