[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