• Publicidad

Usar OppenSSL desde Perl

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Usar OppenSSL desde Perl

Notapor Lor » 2011-05-11 04:30 @229

Disculpas, pero llevo días en tratar de resolver esto, y no avanzo.

Mi objetivo es firmar un archivo digitalmente. Tengo un archivo de clave (privatekey) y un archivo de certficado (cert).

Desde una aplicación Perl quiero hacer uso del OpenSSL de Linux. Tengo un código en Phyton que lo hace y no sé cómo hacerlo en Perl.

# Firmar el texto (tra), donde cert y privatekey son datos conocidos

out = Popen(["openssl", "smime", "-sign","-signer", cert, "-inkey",
privatekey, "-outform","DER", "-out", "cms.bin" , "-nodetach"],
stdin=PIPE,stdout=PIPE).communicate(tra)[0]

out = open("cms.bin","rb").read()

¡¡¡Muchísimas gracias por la ayuda!!! :D
Lor
Perlero Frecuente
Perlero Frecuente
 
Mensajes: 187
Registrado: 2005-04-28 05:47 @282

Publicidad

Re: Usar OppenSSL desde Perl

Notapor explorer » 2011-05-11 04:45 @239

No tengo idea de Python, pero podría ser

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open(my $fh, "| openssl smime -sign -signer  $cert -inkey $privatekey -outform DER -out cms.bin -nodetach");
binmode $fh;
print   $fh $tra;
close   $fh;

open my $CMS, q[<],       'cms.bin';
binmode $CMS;
read    $CMS, my $cms, -s 'cms.bin';
close   $CMS;
 
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4
JF^D Perl Programming Language
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 13052
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Usar OppenSSL desde Perl

Notapor Lor » 2011-05-11 05:08 @256

¡¡¡¡Gracias Explorer!!!! Pero no me aparece en tus líneas el archivo que quiero firmar con el openSSL, en este caso, $tra. ¿Dónde lo pongo?

¡¡¡Gracias!!!
Lor
Perlero Frecuente
Perlero Frecuente
 
Mensajes: 187
Registrado: 2005-04-28 05:47 @282

Re: Usar OppenSSL desde Perl

Notapor explorer » 2011-05-11 07:12 @341

A ver ahora...
JF^D Perl Programming Language
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 13052
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Usar OppenSSL desde Perl

Notapor Lor » 2011-05-11 09:21 @431

¡¡¡Gracias!!! pero en la línea
open(my $fh, q[|], "openssl smime -sign -signer $cert -inkey $privkey -outform DER -out cms.bin -nodetach");

El log tira error: Unknown open() mode '|'

¡¡¡¡Gracias, por tu tiempo!!!!
Última edición por explorer el 2011-05-11 09:25 @434, editado 1 vez en total
Razón: Faltas de ortografía
Lor
Perlero Frecuente
Perlero Frecuente
 
Mensajes: 187
Registrado: 2005-04-28 05:47 @282

Re: Usar OppenSSL desde Perl

Notapor explorer » 2011-05-11 09:27 @435

A ver ahora...
JF^D Perl Programming Language
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 13052
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Usar OppenSSL desde Perl

Notapor Lor » 2011-05-11 18:38 @818

¡¡¡Explorer!!! Gracias como siempre, Bueno aún no he logrado mucho, comento lo que intento hacer por si alguien más requiere hacer algo similar:

1. Tengo un archivo 'TRA.xml'

2. Generar un archivo .CMS que contenga el TRA.xml, su firma electrónica y el certificado X.509

3. Codificar en Base64 el archivo.CMS

4. Logrado esto llamo a un webservice con lo obtenido en (3)

Estoy haciendo:
open(PKEY, $PATH_KEYPRIVATE) || die "open failed: $!"; #file de clave
open(CERT, $PATH_CERT) || die "open failed: $!"; # certificado
open(TRA_XML, $PATH_XML) || die "open failed: $!"; #file a firmar

my $privkey = do { local $/; <PKEY> };
my $crt = do { local $/; <CERT>};
my $tra_xml = do { local $/; <TRA_XML>};

close (PKEY);
close (CERT);
close (TRA_XML);

# firmo el tra_xml
open(my $fh, "| openssl smime -sign -signer $cert -inkey $privatekey -outform DER -out cms.bin -nodetach");
binmode $fh;
print $fh $tra_xml;
close $fh;

# Ahora tengo que codificar en base 64 el archivo cms.bin. ¿Cómo lo hago?

open my $CMS, q[<], 'cms.bin';
binmode $CMS;
read $CMS, my $cms, -s 'cms.bin';
close $CMS;

use MIME::Base64;

my $encoded = encode_base64($cms); # ¿¿ Es correcto ??

Bueno, no sé dónde están mis errores, pero el $encoded NO ES ACEPTADO.

¡¡¡¡¡GRACIAS!!!!!
Última edición por explorer el 2011-05-11 18:48 @825, editado 1 vez en total
Razón: Poner caracteres '¡'
Lor
Perlero Frecuente
Perlero Frecuente
 
Mensajes: 187
Registrado: 2005-04-28 05:47 @282

Re: Usar OppenSSL desde Perl

Notapor explorer » 2011-05-11 18:54 @829

¿No deberías leer los ficheros en modo binario? Si no lo haces, Perl traducirá los caracteres de fin de línea... salvo que estés en Unix/Linux.
JF^D Perl Programming Language
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 13052
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Usar OppenSSL desde Perl

Notapor Lor » 2011-05-11 19:03 @835

Sí, la aplicación se ejecuta bajo Linux Fedora.
Lor
Perlero Frecuente
Perlero Frecuente
 
Mensajes: 187
Registrado: 2005-04-28 05:47 @282

Re: Usar OppenSSL desde Perl

Notapor explorer » 2011-05-12 04:57 @248

Ya veo errores... no coinciden los nombres de las variables de certificado y clave privada... deben llamarse igual.
JF^D Perl Programming Language
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 13052
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Siguiente

Volver a Avanzado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados