
DESCARGA SOFTWARE PARA FACTURA ELECTRONICA DE AQUI.
Facturacion, Validacion, Addendas, Librerias de programacion, etc.
CARTA PORTE V3.1
ECODEX TIENE ESTOS NUEVOS DATOS DE CONTACTO :
Comercializacion y Ventas - Evelia Vicke evicke@ecodex.com.mx 33-16-03-03-48
Soporte - Humberto Guerrero soporte@ecodex.com.mx 33-34-90-46-03
.
Error al leer el certificado
-
- Mensajes: 9
- Registrado: Sab Dic 17, 2011 3:07 pm
Re: Error al leer el certificado
En los ejemplos hablar de validar el sello digital, ¿El archivo que tengo que abrir es el sello digital o la firma electrónica?
- Dado
- Mensajes: 15981
- Registrado: Mar Jul 06, 2010 7:56 pm
Re: Error al leer el certificado
El termino "sello digital" se usa indistintamente con "firma electronica", no se a que te refieres en cada caso, es decir, es lo mismoalexrch escribió:En los ejemplos hablar de validar el sello digital, ¿El archivo que tengo que abrir es el sello digital o la firma electrónica?
Si quieres validar BUSCA EN EL FORO la frase "como validar a mano un sello"
Veo que estas "hecho bolas" y creeme, no es facil esto de la factura electronica, permiteme ofrecerte mi libreria de CREACION y timbrado de facturas, puedes evitarte todo eso y usar lo que ya existe en el mercado.
[Actualizacion] Mmmh, me quede pensando, te refieres al "CERTIFICADO de sello digital" y a la "Firma electronica AVANZADA"?? si es asi, entonces te comento que para validar debes usar el "CERTIFICADO de sello digital"
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
-
- Mensajes: 9
- Registrado: Sab Dic 17, 2011 3:07 pm
Re: Error al leer el certificado
Por lo que entendí, tengo que extraer la cadena que iría en el namespace del certificado, de uno de los 4 archivos (.cer, .key, .req y .sdg) que forman parte del "certificado del sello digital", ¿es correcto?
- Dado
- Mensajes: 15981
- Registrado: Mar Jul 06, 2010 7:56 pm
Re: Error al leer el certificado
Mmmmh, "extraer la cadena que iria en el namespace del certificado"??......"de los 4 archivos que forman parte del certificado de sello digital"??, como te digo esto, nop, absolutamente nada que ver, lo que mencionas son cosas incongruentes.alexrch escribió:Por lo que entendí, tengo que extraer la cadena que iría en el namespace del certificado, de uno de los 4 archivos (.cer, .key, .req y .sdg) que forman parte del "certificado del sello digital", ¿es correcto?
La cadena se extrae del XML usando una conversion xslt. (en el SAT esta publicado el archivo cadenaoriginal_3_0.xslt, busca como se programa la "transformacion xslt" para Visual Basic)
El Namespace, bueno de este no tienes que preocuparte, nada que ver aqui, voy a hacer como que no escuche eso
El UNICO archivo que necesitas para VALIDAR es el archivo *.CER
Los archivos *.req y *.sdg (requerimiento y ensobretado) BORRALOS, te lo dice un experto, no tienen NADA QUE HACER en tu computadora, esos son archivos temporales QUE YA NO SIRVEN.
____________________________________________
pd. me recordo un meme donde esta Fry con los ojos semicerrados y dice "no estoy seguro si esta troleando o ......." en fin
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
-
- Mensajes: 125
- Registrado: Mar Nov 23, 2010 1:08 pm
- Ubicación: Puebla
Re: Error al leer el certificado
alexrch escribió:Realmente no te puedo decir porque como sabrás muchos revisan esta pagina entre ellos mi "PAC", el cual me recomendó esta página. Mejor de quemar gente hablemos el Openssl, ¿Lo que hace es la administración de los certificados digitales o ya de plano sigo perdido?
Jejeje, y se lo que es eso de estar "pedido" mi amigo, mira ya no sufras, yo programo bajo .net 2008 - 2010 (acabo de migrar jeje), esta funcion trabaja perfecto y sirve para que obtengas tu certificado, como te dijo DADO es una simple tranformacion de un binario a base64:
Function ObtenerCertificado(ByVal Certificado As String) As String
Try
Dim StrCer As String
StrCer = RutaCFD & "openssl enc -base64 -in " & Certificado & " -out " & RutaCFD & "certificado.txt"
Shell(StrCer, AppWinStyle.Hide, True)
StrCer = My.Computer.FileSystem.ReadAllText(RutaCFD & "certificado.txt")
StrCer = Replace(StrCer, Chr(10), "")
StrCer = Replace(StrCer, Chr(13), "")
StrCer = Replace(StrCer, " ", "")
StrCer = Replace(StrCer, "-", "")
StrCer = Replace(StrCer, "END", "")
StrCer = Replace(StrCer, "BEGIN", "")
StrCer = Replace(StrCer, "CERTIFICATE", "")
Kill(RutaCFD & "certificado.txt")
ObtenerCertificado = StrCer
Catch ex As Exception
MsgBox(Err.Number & " - " & Err.Description)
ObtenerCertificado = Nothing
End Try
End Function
IMPORTANTE:
1. RutaCFD debe ser una ruta cualquiera en donde este el OpenSSL.exe
2. Certificado es una variable de cadena que aloja la ruta completa de donde se encuentre tu archivo .cer (ponlo con todo y la extension)
3. La funcion devuelve una cadena con el certificado ya en base64 para que lo manipules a tu antojo, o bien te crea un txt en la ruta que le endiques en RutaCFD, para que no lo borre solo comenta o elimina la linea del KILL.
Espero que te sirva....
Saludos desde Puebla!
CBR
-
- Mensajes: 158
- Registrado: Mié Ene 11, 2012 2:08 pm
- Contactar:
Re: Error al leer el certificado
Esto es lo que yo hago con el certificado, en ASP NET usando Visual Studio 2005
'-------------------------------------
' EXTRAER EL NUMERO DE CERTIFICADO DE .CER JAGP NOV 2010
' Y EXTRAER EL CERTIFICADO DE .CER JAGP NOV 2010
'-------------------------------------
Dim cert As X509Certificate = X509Certificate.CreateFromCertFile(rutaArchivoCer)
Dim objCert As New X509Certificate2()
'Dim objCert As X509Certificate2 = New X509Certificate2(archivo_xml_CER)
'y pasarle el nombre y ruta del Cerfificado para obtener la información en bytes
Dim bRawData As Byte()
Try
bRawData = ReadFile(rutaArchivoCer) ' Custom readFile (quita chars)
objCert.Import(bRawData)
Catch dnfExcept As DirectoryNotFoundException
'Console.WriteLine("Error: El directorio no existe.")
Return "Error: El directorio no existe"
'Response.Write("&error=Error: El directorio no existe&respuesta=error") ' EVALUAR BIEN QUE DEBEMOS RESPONDER AQUI!!! JAGP NOV 2010 'Response.End()
Catch ioExpcept As IOException
'Console.WriteLine("Error: No se puede acceder al fichero.")
Return "Error: No se puede acceder al fichero CER"
'Response.Write("&error=Error: No se puede acceder al fichero&respuesta=error") ' EVALUAR BIEN QUE DEBEMOS RESPONDER AQUI!!! JAGP NOV 2010 'Response.End()
Catch nrExcept As NullReferenceException
'Console.WriteLine("El fichero tiene que ser <.cer> o bien no tengo acceso al mismo.")
Return "El fichero tiene que ser <.cer> o bien no tengo acceso al mismo"
Exit Function
'Response.Write("&error=El fichero tiene que ser <.cer> o bien no tengo acceso al mismo&respuesta=error") ' EVALUAR BIEN QUE DEBEMOS RESPONDER AQUI!!! JAGP NOV 2010 'Response.End()
End Try
Dim cadenaCERTIFICADO As String = Convert.ToBase64String(bRawData)
Dim SerialNumber As String = hexToString(objCert.SerialNumber) ' getSerialNumberString HEXTOSTRIG=custom (quita char)
Tambien es posible que leas el .key con su pwd y generes el sello usando opensslkey.cs sin necesidad de usar OpenSSL, es puro codigo fuente C# que se integra facilmente en la solucion .net
'-------------------------------------
' EXTRAER EL NUMERO DE CERTIFICADO DE .CER JAGP NOV 2010
' Y EXTRAER EL CERTIFICADO DE .CER JAGP NOV 2010
'-------------------------------------
Dim cert As X509Certificate = X509Certificate.CreateFromCertFile(rutaArchivoCer)
Dim objCert As New X509Certificate2()
'Dim objCert As X509Certificate2 = New X509Certificate2(archivo_xml_CER)
'y pasarle el nombre y ruta del Cerfificado para obtener la información en bytes
Dim bRawData As Byte()
Try
bRawData = ReadFile(rutaArchivoCer) ' Custom readFile (quita chars)
objCert.Import(bRawData)
Catch dnfExcept As DirectoryNotFoundException
'Console.WriteLine("Error: El directorio no existe.")
Return "Error: El directorio no existe"
'Response.Write("&error=Error: El directorio no existe&respuesta=error") ' EVALUAR BIEN QUE DEBEMOS RESPONDER AQUI!!! JAGP NOV 2010 'Response.End()
Catch ioExpcept As IOException
'Console.WriteLine("Error: No se puede acceder al fichero.")
Return "Error: No se puede acceder al fichero CER"
'Response.Write("&error=Error: No se puede acceder al fichero&respuesta=error") ' EVALUAR BIEN QUE DEBEMOS RESPONDER AQUI!!! JAGP NOV 2010 'Response.End()
Catch nrExcept As NullReferenceException
'Console.WriteLine("El fichero tiene que ser <.cer> o bien no tengo acceso al mismo.")
Return "El fichero tiene que ser <.cer> o bien no tengo acceso al mismo"
Exit Function
'Response.Write("&error=El fichero tiene que ser <.cer> o bien no tengo acceso al mismo&respuesta=error") ' EVALUAR BIEN QUE DEBEMOS RESPONDER AQUI!!! JAGP NOV 2010 'Response.End()
End Try
Dim cadenaCERTIFICADO As String = Convert.ToBase64String(bRawData)
Dim SerialNumber As String = hexToString(objCert.SerialNumber) ' getSerialNumberString HEXTOSTRIG=custom (quita char)
Tambien es posible que leas el .key con su pwd y generes el sello usando opensslkey.cs sin necesidad de usar OpenSSL, es puro codigo fuente C# que se integra facilmente en la solucion .net
-
- Mensajes: 9
- Registrado: Sab Dic 17, 2011 3:07 pm
Re: Error al leer el certificado
Muchas gracias cbr_net y jasistemas, estoy regresando otra vez a la facturación, voy a ver su código y ver como lo ingreso al mio, yo estoy programando en vb.net 2003 y quiero ver como lo tengo que adecuar, les agradezco mucho su ayuda.
-
- Mensajes: 9
- Registrado: Sab Dic 17, 2011 3:07 pm
Re: Error al leer el certificado
Buenas tardes a todos, me sirvió el código pero lo tuve que hacer de una manera diferente porque me causaba problemas en My.Computer.FileSystem.ReadAllText, exáctamente en "My", lo ingresé en todos lados para que pudiera funcionar pero no tuve una buena respuesta, para las personas que le pase lo mismo aquí les dejo otra opción, no tan buena como la que indica cbr_net y jasistemas, pero también funciona:
Try
Dim StrCer As String
Dim base64 As String
StrCer = RutaCFD & "openssl enc -base64 -in " & RutaCertificado & " -out " & RutaCFD & "certificado.txt"
Shell(StrCer, AppWinStyle.Hide, True)
Dim objReader As New StreamReader(RutaCFD & "certificado.txt")
Dim sLine As String = ""
Dim arrText As New ArrayList()
Do
sLine = objReader.ReadLine()
If Not sLine Is Nothing Then
arrText.Add(sLine)
End If
Loop Until sLine Is Nothing
objReader.Close()
For Each sLine In arrText
base64 = base64 & sLine
Next
formato = base64
Catch ex As Exception
MsgBox(Err.Number & " - " & Err.Description)
ObtenerCertificado = Nothing
End Try
1. RutaCFD debe ser una ruta cualquiera en donde este el OpenSSL.exe
2. RutaCertificado es una variable de cadena que aloja la ruta completa de donde se encuentre tu archivo .cer (ponlo con todo y la extension)
3. Para abrir un archivo y leerlo, crea una nueva instancia de un objeto StreamReader e inserta la ruta del archivo en el constructor de la siguiente manera: Dim objReader As New StreamReader(RutaCFD & "certificado.txt")
4. La variable sLine te servirá para leer el archivo por lineas.
5. Cuando termines de leerlo por lineas, lo construes en la variable base64.
La solución es muy burda, pero es otra opción más.
Try
Dim StrCer As String
Dim base64 As String
StrCer = RutaCFD & "openssl enc -base64 -in " & RutaCertificado & " -out " & RutaCFD & "certificado.txt"
Shell(StrCer, AppWinStyle.Hide, True)
Dim objReader As New StreamReader(RutaCFD & "certificado.txt")
Dim sLine As String = ""
Dim arrText As New ArrayList()
Do
sLine = objReader.ReadLine()
If Not sLine Is Nothing Then
arrText.Add(sLine)
End If
Loop Until sLine Is Nothing
objReader.Close()
For Each sLine In arrText
base64 = base64 & sLine
Next
formato = base64
Catch ex As Exception
MsgBox(Err.Number & " - " & Err.Description)
ObtenerCertificado = Nothing
End Try
1. RutaCFD debe ser una ruta cualquiera en donde este el OpenSSL.exe
2. RutaCertificado es una variable de cadena que aloja la ruta completa de donde se encuentre tu archivo .cer (ponlo con todo y la extension)
3. Para abrir un archivo y leerlo, crea una nueva instancia de un objeto StreamReader e inserta la ruta del archivo en el constructor de la siguiente manera: Dim objReader As New StreamReader(RutaCFD & "certificado.txt")
4. La variable sLine te servirá para leer el archivo por lineas.
5. Cuando termines de leerlo por lineas, lo construes en la variable base64.
La solución es muy burda, pero es otra opción más.