Imagen

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


.

reemplazar la dll chilkat para vb.net 4.0

Para quienes programan Visual Basic aqui esta la solucion
[[ FORO CERRADO DEBIDO A QUE YA LA INFORMACION YA NO ES VIGENTE ]]
Cerrado
diegosantos
Mensajes: 7
Registrado: Dom Sep 22, 2013 10:25 pm

reemplazar la dll chilkat para vb.net 4.0

Mensaje por diegosantos »

Hola a todos.
Instale y heche a funcionar el ejemplo de jerjerryeagle en este foro lo cual me aclaro grandes cosas y genere el xml firmado sin problemas.
Como este ejemplo esta tomando la dll chilkatdotnet45 estoy tratando de quitarla del proyecto.
Como opcion encontre e instale y heche a funcionar tambien el archivo openSSl.cs el cual tambien me funciono.
Pero para mas especificos:
Pude encontrar sin problemas el serial del certificado.
Estoy usando los certificados de prueba del SAT (CSD010_AAA010101AAA)

La documentacion del ejemplo es : "'Agrega Certificado y No.Certificado al XML"

Ahora el problema esta en que la chilkat tiene un metodo: cert.GetEncoded, cert es un objeto certificado de la propia dll y que se genera luego de pasarle como parametro la ruta del certificado .cer Segun entiendo la cadena abajo pegada es la representacion del certificado.

* Pero no tengo idea de que hace este metodo.
* Habra algo que se pueda hacer para evitar este paso ?
* Por otro lado no tengo claro el concepto, porque segun yo para firmar un documento se necesita una llave privada y como al objeto de la dll solamente le estoy pasando la ruta del certificado que no tiene la llave privada no veo como esto pueda ser una firma.
Tampoco puede ser HASH por el tamaño.


Si alguien tiene algun pista se lo agradezco.


Me genera una cadena que pongo como referencia :

MIIEYTCCA0mgAwIBAgIUMjAwMDEwMDAwMDAyMDAwMDE0MzcwDQYJKoZIhvcNAQEF
BQAwggFcMRowGAYDVQQDDBFBLkMuIDIgZGUgcHJ1ZWJhczEvMC0GA1UECgwmU2Vy
dmljaW8gZGUgQWRtaW5pc3RyYWNpw7NuIFRyaWJ1dGFyaWExODA2BgNVBAsML0Fk
bWluaXN0cmFjacOzbiBkZSBTZWd1cmlkYWQgZGUgbGEgSW5mb3JtYWNpw7NuMSkw
JwYJKoZIhvcNAQkBFhphc2lzbmV0QHBydWViYXMuc2F0LmdvYi5teDEmMCQGA1UE
CQwdQXYuIEhpZGFsZ28gNzcsIENvbC4gR3VlcnJlcm8xDjAMBgNVBBEMBTA2MzAw
MQswCQYDVQQGEwJNWDEZMBcGA1UECAwQRGlzdHJpdG8gRmVkZXJhbDESMBAGA1UE
BwwJQ295b2Fjw6FuMTQwMgYJKoZIhvcNAQkCDCVSZXNwb25zYWJsZTogQXJhY2Vs
aSBHYW5kYXJhIEJhdXRpc3RhMB4XDTEzMDUwNzE3NDAwN1oXDTE3MDUwNzE3NDAw
N1owgdsxKTAnBgNVBAMTIEFDQ0VNIFNFUlZJQ0lPUyBFTVBSRVNBUklBTEVTIFND
MSkwJwYDVQQpEyBBQ0NFTSBTRVJWSUNJT1MgRU1QUkVTQVJJQUxFUyBTQzEpMCcG
A1UEChMgQUNDRU0gU0VSVklDSU9TIEVNUFJFU0FSSUFMRVMgU0MxJTAjBgNVBC0T
HEFBQTAxMDEwMUFBQSAvIEhFR1Q3NjEwMDM0UzIxHjAcBgNVBAUTFSAvIEhFR1Q3
NjEwMDNNREZOU1IwODERMA8GA1UECxMIcHJvZHVjdG8wgZ8wDQYJKoZIhvcNAQEB
BQADgY0AMIGJAoGBAJ4COACtDKzGDv9V0W3LN508rc2eICyi5g3SsGrJE1Z49cJn
gFuR6DgXWUO85Tu/NG3r4aXOvZs6bGG6dEG7Dcb1aC5dkF+yI6PlHKsiTk5ntJ/a
ETA/rckVyb9cmeCh4Mqfo0OGxMmsEzxUl7qm3onv2ldmk6pJmSIQGTHzMZYbAgMB
AAGjHTAbMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgbAMA0GCSqGSIb3DQEBBQUA
A4IBAQDWG+0Soy5vxmclDKOrvyHjAbQGk4BPynbCjOWeFZ5s7HOpw6TSSe56R33n
/ZO2CvC4/ICwrNgl+drycfU5ZA5d3TflsO9jgTBsDSq5LDJ9h062IadD8o4Mg5BT
b1C2FAiMD16DHwxVgYZvk2wmXQ0mrxLoMu2wiBpbvwoXJlOiociUxXQtlukmjzme
Tovu1XTDd50gbztYBHIdjOpAjXmmytwrwNGmWG+D3Jfjhtydy1GSOTtN+hGElYg7
1vLNFekJyEkc4pkWORG0xmwRf/rnoSFjHyk/5duRUth6GEvQEfwAlZIn7rsttGzu
bLO9QY5BM6P3km98mPt7NnV/SSxo
Avatar de Usuario
Dado
Mensajes: 15981
Registrado: Mar Jul 06, 2010 7:56 pm

Re: reemplazar la dll chilkat para vb.net 4.0

Mensaje por Dado »

Eso es el certificado en base64, en el caso del XML ese chorizo de letras y numero debe ir en el atributo "certificado"
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
jasistemas
Mensajes: 158
Registrado: Mié Ene 11, 2012 2:08 pm
Contactar:

Re: reemplazar la dll chilkat para vb.net 4.0

Mensaje por jasistemas »

Yo preferiria ver en que contexto en el codigo esta incluida esa instruccion que mencionas para ver con que puede reemplazarse, ya que pudiera ser algo como esto:

'convertimos la cadena a utf8 y ya esta lista para ser utilizada en el hash
encodedBytes = utf8.GetBytes(strwriter.ToString)

binkey = Convert.FromBase64String(pubstr) ;
diegosantos
Mensajes: 7
Registrado: Dom Sep 22, 2013 10:25 pm

Re: reemplazar la dll chilkat para vb.net 4.0

Mensaje por diegosantos »

Gracias pro tu respuesta.
En mi caso, creo el XML,
pero no le agrega el serial del certificado ni el certificado en si como me dices.

La secuencia correcta seria generar el certificado sin el serial ?
y agregar el resultado (certificado en base 64) dentro del xml ?
o
Agregar el resultado sin haber ingresado en el xml el numero de serial ?

Y por otro lado como puedo verificar que el resultado que estoy generando ( el certificado en base64) esta correcto ?
puedo usar la app VALIDACFD para esto ?
o alguna otra herramienta ?

Ya verique el resultado del xml sin el certificado (la cadena original) contra la APP VALIDACFD y todo bien, las cadenas originales son identicas.
diegosantos
Mensajes: 7
Registrado: Dom Sep 22, 2013 10:25 pm

Re: reemplazar la dll chilkat para vb.net 4.0

Mensaje por diegosantos »

te mando la parte del codigo.
Esta generando la cadena original y despues :

Dim cert As New Chilkat.Cert
'' Load a digital certificate from a .cer file:
If cert.LoadFromFile(CerFile) = False Then
MsgBox(cert.LastErrorText)
Exit Sub
End If

'Verifica que el Certificado no esté Caducado
If cert.Expired = True Then
MsgBox("El Certificado ya está Caducado: " & cert.ValidTo) : Exit Sub
End If

Dim fechaHasta As Date = cert1.NotAfter
If fechaHasta < Now Then
MsgBox("El certificado expiro: " & fechaHasta.ToString)
Return
Exit Sub
End If

'Agrega Certificado y No.Certificado al XML
' XMLstring.Root.@noCertificado = NumCertificado

**** XMLString.root es el objeto que representa al XML final.
XMLstring.Root.@certificado = cert.GetEncoded
****
diegosantos
Mensajes: 7
Registrado: Dom Sep 22, 2013 10:25 pm

Re: reemplazar la dll chilkat para vb.net 4.0

Mensaje por diegosantos »

bueno, me auto contesto:
encontre en el foro la solucion ( al menos de convertir el certificado en base64) "incluir el certificado en el xml"

' funcion para pasar el certificado a base64
Dim certEmisor As X509Certificate2 = New X509Certificate2
Dim byteCertData() As Byte = ReadFile(CerFile)' Manda llamar la funcion Readfile para cargar el archivo .cer
certEmisor.Import(byteCertData) ' importa los datos desde el array de byte hacia el certificado. Rellena un objeto X509Certificate2 con datos de una matriz de bytes.
Dim cert64 As String = Convert.ToBase64String(certEmisor.GetRawCertData) ' getRawData= Devuelve los datos sin procesar de todo el certificado X.509 v.3.
XMLstring.Root.@certificado = cert64


' Conviertelos a Base64
' Funcion para leer archivo
' Se me paso ponertelo en el post anterior, disculpa :)
Friend Shared Function ReadFile(ByVal strArchivo As String) As Byte()
Dim f As FileStream = New FileStream(strArchivo, FileMode.Open, FileAccess.Read)
Dim size As Integer = CType(f.Length, Integer)
Dim data() As Byte = New Byte((size) - 1) {}
size = f.Read(data, 0, size)
f.Close()
Return data
End Function
diegosantos
Mensajes: 7
Registrado: Dom Sep 22, 2013 10:25 pm

Re: reemplazar la dll chilkat para vb.net 4.0

Mensaje por diegosantos »

bueno, me autocontesto de nuevo con el sello generado.
Segun mis pruebas, el sella generado al final del codigo con la dll chikat y con openSSL es identico:
"JMJnfXQYuB6gNKskIxPDOhGGcVaev3QmberE/0SFY3AP3NiPxpjBdot9zV7iALBOnl9dWkdiCYSamt0VUyuCZRNKGidyi+vGw6tPwD55jbPco3HesTuhbJP4DNbN2AuhAg5eMcbIv1k4zu7NACzROslcuHiHzMGeM+UANToWhlY="

la funcion para llamar a OpenSSL para generar el sello es:
Dim strSello As String = String.Empty
Dim passwordSeguro As System.Security.SecureString = New System.Security.SecureString
passwordSeguro.Clear()
For Each c As Char In Pass.ToCharArray
passwordSeguro.AppendChar(c)
Next
Dim llavePrivadaBytes() As Byte = System.IO.File.ReadAllBytes(KeyFile)
Dim rsaO As RSACryptoServiceProvider = opensslkey.DecodeEncryptedPrivateKeyInfo(llavePrivadaBytes, passwordSeguro)
Dim hasher As SHA1CryptoServiceProvider = New SHA1CryptoServiceProvider
Dim bytesFirmados() As Byte = rsaO.SignData(System.Text.Encoding.UTF8.GetBytes(Cadena), hasher)
strSello = Convert.ToBase64String(bytesFirmados)

La funcion para agregar el sella al objeto comprobante es:
XMLstring.Root.SetAttributeValue("sello", strSello)

Dim xComprobante As XElement = XMLstring.Root
xComprobante = RemoveAllemptys(XMLstring.Root, True)
(algo similar para agregar el numero de certificado y el certificado)

Creo que con esto se termino este asunto del sello.
Cerrado