Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-10-2010
edgaronfo edgaronfo is offline
Miembro
 
Registrado: jul 2007
Posts: 33
Poder: 0
edgaronfo Va por buen camino
Unhappy Regreso misterioso

Cita:
Empezado por Morrismx Ver Mensaje
Hola,

No le doy ningun tratamiento especial, la funcion regresa un String y en mi caso uso ese string y lo meto a la base de datos y archivo XML

Código Delphi [-]
procedure TFrmFacturacion.Button1Click(Sender: TObject);
var
NoCertificado:String;
begin
NoCertificado:=GetNoCertificado(ExtractFilePath(Application.ExeName)+'aaa010101aaa_CSD_01.cer.pem');
Label1.Caption:=NoCertificado;
end;

Saludos
Morris

Híjole, a mí me regresa:
〱〰㈱〰〰〰〰㈰㔲㜱䓻@篖@텐·V

Entonces creo que estará perdiendo el apuntador de la cadena de regreso o algo por el estilo... o será la versión del libeay32.dll???
Responder Con Cita
  #2  
Antiguo 02-10-2010
Morrismx Morrismx is offline
Registrado
 
Registrado: ago 2010
Posts: 6
Poder: 0
Morrismx Va por buen camino
Edgar, asegurate de hacer los cambios a la funcion

Código Delphi [-]
function GetNoCertificado(const AFileName: string): string;
var
bp: pBIO;
fn: PAnsiChar;
x: pX509;
x509: pX509;
bn: pBIGNUM;
num: array [0..19] of AnsiChar;  <<==== Este es el cambio
begin
InitOpenSSL;
fn := PAnsiChar(ansistring(AFileName));
bp := BIO_new(BIO_s_file());
BIO_read_filename(bp, Pchar(fn));
x := X509_new;
x509 := PEM_read_bio_X509(bp, x, nil, nil);
bn := ASN1_INTEGER_to_BN(X509_get_serialNumber(x509), nil);
BN_bn2bin(bn, @num[0]);
BN_free(bn);
X509_free(x509);
BIO_free(bp);
Result := num;
EVP_cleanup;
end;

el resto de la funcion no cambia, solo reemplza Char por AnsiChar y listo

dejame saber si te funciona

saludos
Morris
Responder Con Cita
  #3  
Antiguo 02-10-2010
edgaronfo edgaronfo is offline
Miembro
 
Registrado: jul 2007
Posts: 33
Poder: 0
edgaronfo Va por buen camino
Talking Liiissto!

Cita:
Empezado por Morrismx Ver Mensaje
Edgar, asegurate de hacer los cambios a la funcion

Código Delphi [-]
function GetNoCertificado(const AFileName: string): string;
var
bp: pBIO;
fn: PAnsiChar;
x: pX509;
x509: pX509;
bn: pBIGNUM;
num: array [0..19] of AnsiChar;  <<==== Este es el cambio
begin
InitOpenSSL;
fn := PAnsiChar(ansistring(AFileName));
bp := BIO_new(BIO_s_file());
BIO_read_filename(bp, Pchar(fn));
x := X509_new;
x509 := PEM_read_bio_X509(bp, x, nil, nil);
bn := ASN1_INTEGER_to_BN(X509_get_serialNumber(x509), nil);
BN_bn2bin(bn, @num[0]);
BN_free(bn);
X509_free(x509);
BIO_free(bp);
Result := num;
EVP_cleanup;
end;

el resto de la funcion no cambia, solo reemplza Char por AnsiChar y listo

dejame saber si te funciona

saludos
Morris

CLARO!!!!!! Aaaaarg qué coraje!!!! qué ciego estaba!

Ya está!

Chihuahua! Un día entero buscando la solución y en mis narices estuvo todo el tiempo! jajajaja, a veces eso pasa verdad?...

MUCHISISISISÍSIMAS GRACIAS MORRIS!!!!

Eso era.

Gracias y Saludos!!!!!
Responder Con Cita
  #4  
Antiguo 02-10-2010
Morrismx Morrismx is offline
Registrado
 
Registrado: ago 2010
Posts: 6
Poder: 0
Morrismx Va por buen camino
Wooot!!!

Me da gusto que ya te funcionó!

Saludos
Morris
Responder Con Cita
  #5  
Antiguo 02-10-2010
edgaronfo edgaronfo is offline
Miembro
 
Registrado: jul 2007
Posts: 33
Poder: 0
edgaronfo Va por buen camino
Smile A lo que sigue

Pues nuevamente gracias Morris, ya funcionó lo que no me funcionaba y ahora a lo que sigue.

Cuando andaba buscando posibles soluciones para mi problema llegué a una página en la que podían sacar el periodo de validez del certificado (nomás que ahorita volviendo a buscar no la puedo hallar )

También encontré, como muchos, en la página de La Corona (gracias a fortiz) la descripción de un comando openssl que te muestra las fechas de inicio y fin del certificado:
http_//www_lacorona_com_mx/fortiz/sat/firma.htm

y el comando es:
Código:
$ openssl x509 -in AAA010101AAA.cer.pem -startdate -enddate -noout
notBefore=Aug 2 19:47:13 2004 GMT
notAfter=Aug 2 19:47:13 2006 GMT
y regresa los limites de validez del certificado.

Ahora pregunto, ¿No nos sirve esto para poder validar nuestros certificados?
Responder Con Cita
  #6  
Antiguo 03-10-2010
Morrismx Morrismx is offline
Registrado
 
Registrado: ago 2010
Posts: 6
Poder: 0
Morrismx Va por buen camino
Validar Certificado

Edgar,

Si te sirve para validar el certificado y no hacer facturas si este esta vencido. Por otra parte a mi no me gusta ejecutar un archivo .bat con la instrucción de OpenSSL ya que ademas de presentar problemas de permisos en Vista y Windows 7, no es muy *Elegante*. Aqui les comparto la funcion que uso, espero les sirva.

Primero declaras
Código Delphi [-]
 type
  TCertInfo=Record
  Issuer:String;
  Subject:String;
  NotBefore:TDateTime;
  NotAfter:TDateTime;
  ISExpired:Boolean;
  IsTrusted:Boolean;
end;

la funcion es:
Código Delphi [-]
function GetCertInfio(const AFileName:String):TCertInfo;
var
  bp:   pBIO;
  fn:   PAnsiChar;
  x:    pX509;
  x509: pX509;
  Cert:TX509Certificate;
begin
  InitOpenSSL;
  Cert:=TX509Certificate.Create;
  try
   fn := PAnsiChar(ansistring(AFileName));
   bp := BIO_new(BIO_s_file());
   BIO_read_filename(bp, Pchar(fn));
   x    := X509_new;
   x509 := PEM_read_bio_X509(bp, x, nil, nil);
   Cert.fCertificate:=x;
   Result.NotBefore:=Cert.NotBefore;
   Result.Issuer:=Cert.Issuer;
   Result.Subject:=Cert.Subject;
   Result.NotBefore:=Cert.NotBefore;
   Result.NotAfter:=Cert.NotAfter;
   Result.ISExpired:=Cert.IsExpired;
   Result.IsTrusted:=Cert.IsExpired;
   X509_free(x509);
  finally
   Cert.Free;  
   EVP_cleanup;
  end;
end;

y la llamas:

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
CertInfo:TCertInfo;
begin
 CertInfo:=GetCertInfio(ExtractFilePath(Application.ExeName)+'aaa010101aaa_CSD_01.cer.pem');
 ListBox1.Items.Add(CertInfo.Issuer);
 ListBox1.Items.Add(CertInfo.Subject);
 ListBox1.Items.Add(DateTimeToStr(CertInfo.NotBefore));
 ListBox1.Items.Add(DateTimeToStr(CertInfo.NotAfter));
 ListBox1.Items.Add(BoolToStr(CertInfo.ISExpired,True));
 ListBox1.Items.Add(BoolToStr(CertInfo.IsTrusted,true));
end;

y veras que obtienes mucha mas información que solo las fechas de inicio/vencimiento

espero que les sirva

Saludos
Morris
Responder Con Cita
  #7  
Antiguo 03-10-2010
edgaronfo edgaronfo is offline
Miembro
 
Registrado: jul 2007
Posts: 33
Poder: 0
edgaronfo Va por buen camino
Smile Excelente!

Morris, Excelente! algo así había encontrado.

Oye, pero continuando con las molestias, lo estoy implementando y veo que el tipo TX509Certificate está en OpenSSLUtils.pas, verdad? yo bajé la unidad de la http://www.disi.unige.it/person/Ferr...delphiopenssl/, es la versión 0.5, 2010-10-23. Y de entrada le tuve que cambiar en la declaración de la clase el fCertificate: pX509; lo tuve de des-privatizar, jejeje, pero luego me empezó a dar problemas otra vez con los tipos creo yo en la función TX509Certificate.getTime(asn1_time: pASN1_TIME): TDateTime;

A tí también te dió todos estos problemas el delphi 2010? o tienes otra versión?

Gracias
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Mexico - Como crear sellos en FACTURA ELECTRONICA.. pcicom API de Windows 12 10-11-2012 18:46:55
Factura Electrónica aig Varios 13 10-12-2010 17:12:44
factura electronica cmm07 Varios 4 02-04-2009 17:46:03
factura electronica spia Varios 2 22-02-2009 21:30:06
Factura electronica AUNA Aprendiz Varios 5 01-09-2005 10:44:15


La franja horaria es GMT +2. Ahora son las 22:44:48.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi