Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Avanzado » Usar OppenSSL desde Perl  RESUELTO Responder al tema
Nuevo tema


Página 1 de 1  [ 13 mensajes ] 
 
Nota 2011-05-11 04:30 @229

Perlero Frecuente
Registrado: 2005-04-28 05:47 @282
Mensajes: 188
Usar OppenSSL desde Perl
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


Nota 2011-05-11 04:45 @239
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10272
Re: Usar OppenSSL desde Perl
No tengo idea de Python, pero podría ser

Syntax: [ Download ] [ Hide ]
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;
 

_________________
JF^D Perl programming


Nota 2011-05-11 05:08 @256

Perlero Frecuente
Registrado: 2005-04-28 05:47 @282
Mensajes: 188
Re: Usar OppenSSL desde Perl
¡¡¡¡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!!!


Nota 2011-05-11 07:12 @341
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10272
Re: Usar OppenSSL desde Perl
A ver ahora...

_________________
JF^D Perl programming


Nota 2011-05-11 09:21 @431

Perlero Frecuente
Registrado: 2005-04-28 05:47 @282
Mensajes: 188
Re: Usar OppenSSL desde Perl
¡¡¡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
Faltas de ortografía


Nota 2011-05-11 09:27 @435
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10272
Re: Usar OppenSSL desde Perl
A ver ahora...

_________________
JF^D Perl programming


Nota 2011-05-11 18:38 @818

Perlero Frecuente
Registrado: 2005-04-28 05:47 @282
Mensajes: 188
Re: Usar OppenSSL desde Perl
¡¡¡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
Poner caracteres '¡'


Nota 2011-05-11 18:54 @829
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10272
Re: Usar OppenSSL desde Perl
¿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


Nota 2011-05-11 19:03 @835

Perlero Frecuente
Registrado: 2005-04-28 05:47 @282
Mensajes: 188
Re: Usar OppenSSL desde Perl
Sí, la aplicación se ejecuta bajo Linux Fedora.


Nota 2011-05-12 04:57 @248
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10272
Re: Usar OppenSSL desde Perl
Ya veo errores... no coinciden los nombres de las variables de certificado y clave privada... deben llamarse igual.

_________________
JF^D Perl programming


Nota 2011-05-12 06:07 @296

Perlero Frecuente
Registrado: 2005-04-28 05:47 @282
Mensajes: 188
Re: Usar OppenSSL desde Perl
El error lo cometí yo aquí al transcribir. Pero en el código original los nombres coinciden.

Mi problema estaría ahora en que quiero codificar en base 64 el archivo cms.bin obtenido en el firmado con el openSSL.

¿¿ Está bien hacerlo como sigue ??
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 ??


Nota 2011-05-12 10:34 @482
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10272
Re: Usar OppenSSL desde Perl
Sí, yo sí lo veo correcto... $encoded debería ser un fichero de texto con líneas de 76 caracteres de ancho, separadas por "\n".

_________________
JF^D Perl programming


Nota 2011-05-14 16:25 @725

Perlero Frecuente
Registrado: 2005-04-28 05:47 @282
Mensajes: 188
Re: Usar OppenSSL desde Perl  RESUELTO
Perfecto, ¡¡¡primera parte LOGRADA!!! ¡¡¡Gracias a su ayuda y colaboración permanente!!!

El error estaba en la llamada al OpenSSL:
open(my $fh, "| openssl smime -sign -signer $cert -inkey $privatekey -outform DER -out cms.bin -nodetach");
binmode $fh;
print $fh $tra_xml;
close $fh;

$cert y $privatekey deben ser los path a los archivos que contienen la clave privada y el certificado correspondiente.

¡¡¡¡ Modificando eso anda perfecto !!!! ¡¡¡¡GRACIAS!!!!

¡¡¡Ahora vamos con la segunda parte!!! ¡¡¡Pero en otro post!!! :D :D


Última edición por explorer el 2011-05-14 18:25 @809, editado 1 vez en total
Ortografía: admiraciones


Responder al tema  [ 13 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO