FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#221
|
|||
|
|||
ayuda
Cita:
Por cierto amigos programadores, tengo un problemilla con la unidad Sello.pas que postearon en este hilo, ojalá me puedan ayudar. Ya había preguntado sobre esto en mi primer post, pero sigo con eso, y es que por más que le muevo y le busco, no doy. Mi problema esta en la función: Código:
function GetNoCertificado(const AFileName: string): string; var bp: pBIO; fn: PWideChar; x: pX509; x509: pX509; bn: pBIGNUM; num: array [0..19] of char; begin InitOpenSSL; fn := PWideChar(AnsiString(AFileName)); bp := BIO_new(BIO_s_file()); BIO_read_filename(bp, 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; Alguna sugerencia? Gracias! |
#222
|
|||
|
|||
corrigiendo mi mensaje anterior
Corrigiendo mi mensaje anterior (perdón, no se cómo editarlo), al final hablé del primer cambio que le hice, quise decir, el único cambio que le hice, que fue cambiar el tipo de dato, de PAnsiChar a PWideChar o PChar, porque al compilarlo como PAnsiChar, el delphi me dice que no es un tipo compatible:
E2010 Incompatible Types: 'Ansi' and 'Char' Y si le hago un typecast como: BIO_read_filename(bp, PChar(fn)); Ya me lo compila pero al correr y asignar el valor que me devuelve esta función al documento XML me marca un error: EOleException : 'se encontró un carácter no válido en el contenido del texto' Y he estado cambiándole los tipos de dato y me sigue devolviendo 'carácter no válido' o si le quito el typecast a AnsiString en fn := PAnsiChar(AnsiString(AFileName)); me marca otro error: access violation at address 10055fd4 in module 'libeay32.dll' Alguna sugerencia? será por la versión del libeay32.dll? Gracias |
#223
|
|||
|
|||
versión de delphi
Hola de nuevo amigos, creo que mi problema es la versión de Delphi, estoy usando:
Embarcadero® Delphi® 2010 Version 14.0.3513.24210 será?... |
#224
|
|||
|
|||
edgaronfo.
Supongo que sí es el problema la versión de Delphi, ya que con la versión 7 no hay problema, deberías revisar si los parámetros que le pasas al libeay32.dll son correctos, ya que esto puede ser tu problema. |
#225
|
|||
|
|||
Cita:
Oye, pero de lo que me estoy dando cuenta es que esta función (getNoCertificado) regresa como string un array de chars (array [0..19] of char) que contiene el numero de certificado en formato big-endian, estoy en lo correcto? Entonces lo que me regresa es un numero en binario en formato big endian... Alguien sabe cómo lo paso a formato string entendible? como que tengo que usar Ord() o algo asi, no? Siento que es una tontería lo que me está pasando aquí... ustedes que hacen con el valor en string que regresa getNoCertificado() ?... así como viene se lo pasan al xml? o lo transforman primero? Gracias! |
#226
|
|||
|
|||
GetNoCertificado en Delphi 2010
Hola, yo tuve el mismo problema con Delphi 2010 y tuve que corregir la funcion. Aqui esta como quedo y funciona bien.
Espero que te sirba, la gran diferencia es que Delphi 2010 usa Unicode en los carcteres, entonces el Char ya no es de 1 byte, ahora es de 2. |
#227
|
|||
|
|||
pregunta sobre el resultado devuelto
Cita:
Una pregunta, usaste el XML DATA BIND del delphi para manejar tu xml?? porque el error que me marca ahora es cuando intento asignarle el resultado de la función a mi atributo NoCertificado en el xml: EOleException : 'se encontró un carácter no válido en el contenido del texto' Es decir, le hiciste algo al resultado antes de pasárselo a NoCertificado? algo como:
Muchas gracias. |
#228
|
|||
|
|||
Certificado
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
Saludos Morris |
#229
|
|||
|
|||
Regreso misterioso
Cita:
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??? |
#230
|
|||
|
|||
Edgar, asegurate de hacer los cambios a la funcion
el resto de la funcion no cambia, solo reemplza Char por AnsiChar y listo dejame saber si te funciona saludos Morris |
#231
|
|||
|
|||
Liiissto!
Cita:
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!!!!! |
#232
|
|||
|
|||
Wooot!!!
Me da gusto que ya te funcionó!
Saludos Morris |
#233
|
|||
|
|||
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 Ahora pregunto, ¿No nos sirve esto para poder validar nuestros certificados? |
#234
|
|||
|
|||
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
la funcion es:
y la llamas:
y veras que obtienes mucha mas información que solo las fechas de inicio/vencimiento espero que les sirva Saludos Morris |
#235
|
|||
|
|||
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 |
#236
|
|||
|
|||
Localizando el error
Hola Morris, oye, ando modificando OpenSSLUtils.pas y como te comentaba, al principio me marcaba el error en TX509Certificate.getTime(asn1_time: pASN1_TIME): TDateTime; así que me puse a cambiar los tipos Char a AnsiChar
Pero ahora me está marcando el error en el procedure donde lo llamo (que es el procedure que posteaste) en la asignación del certificado:
Habré echado todo a perder?... Saludos. |
#237
|
|||
|
|||
busco, busco, busco...
ok, después de mover varias cosas en OpenSSLUtils.pas, la clase TX509Certificate me quedó así, primero re-privatizé fCertificate, osea, la dejé como estaba :
con fCertificate re-privatizada, añadí a la clase:
que solamente asigna el apuntador: eso y los cambios de Char a AnsiChar fueron algunas de las cosas le hice a OpenSSLUtils.pas, luego en mi programa, la función quedó: Aquí, como pueden ver, solo puedo acceder a Cert.Issuer, si descomento cualquier otra, me marca Access violation. Creo que no estoy pudiendo asignar bien el apuntador al fCertificate. Por cierto, usando uno de los certificados de ejemplo que te da el SAT me devolvió: NO X509_NAME Seguiré moviendole a ver si me sale Saludos |
#238
|
|||
|
|||
Cambios OpenSSL
Edgar,
me parece que si le hice cambios al unit OpenSSL, te la mando para que hagas tus pruebas, esta es la que yo estoy usando en Delphi 2010 Saludos |
#239
|
|||
|
|||
Muchas Gracias!
Cita:
Gracias! |
#240
|
|||
|
|||
No puede seeeeer....
Morris!, qué crees? no funciona!
Ya probé el OpenSSLUtils.pas que posteaste y nada! me sigue dando el error al asignar fCertificate y cuando le pongo @, osea Cert.fCeretificate:=@x; ya corre pero me marca Access violation in module libeay32.dll Y luego, para empeorarla más, lo corrí en delphi 2006 y sí funciona!!!! Qué será? Lo tendré que pasar todo a delphi 2006??? No debe ser, no crees? se debe de poder en 2010!!! Voy a postear el código que use para probar si funcionaba esto, es una forma con un botón y un listbox, y le pegué las funciones que pusiste en tu primer ejemplo. Oye, si no es mucha molestia, te importaría probar el proyectito a ver si contigo sí jala? para saber si es mi configuración o qué, sale? Muchas gracias. |
|
|
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 |
|