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


.

Firmar XML con XMLSignature Vb 6

Para quienes programan Visual Basic aqui esta la solucion
[[ FORO CERRADO DEBIDO A QUE YA LA INFORMACION YA NO ES VIGENTE ]]
Cerrado
alba
Mensajes: 2
Registrado: Mié May 02, 2012 9:26 am

Firmar XML con XMLSignature Vb 6

Mensaje por alba »

Hola Buenos dias, :D

Alguien me puede dar el Tip, Sugerencia o consejo, estoy tratando de crear un XML Signature, yo creo este XML:
<Cancelacion xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" RfcEmisor = "IMS421231I45" Fecha="2011-12-23T09:50:06" xmlns="http://cancelacfd.sat.gob.mx" >
<Folios>
<UUID>2D8B69F6-E253-49DC-8A26-91F70E894B26</UUID>
</Folios>
</Cancelacion>

me dicen que una vez que tenga ese XML debo firmarlo, para que en automático se creen los nodos adicionales. Tambien me dicen que la firma la debo de realizar con el certificado del emisor (pero que lo convierta en pfx.) . Yo descargue librerias de CryptoSys y ya convierto el CErtificado y Archivo Llave en Archivo PFX. Pero no se como Firmarlo con XML-Digital Signature desde VB 6. ¿Alguien me puede decir como puedo hacerlo? .. Estoy usando VB 6.0 y la libreria de prueba de cryptosys


Saludos
:D
alba
Mensajes: 2
Registrado: Mié May 02, 2012 9:26 am

Re: Firmar XML con XMLSignature Vb 6

Mensaje por alba »

Hola Compañeros, .. pues les comento que ya genero un XML, con la firma, pero realmente no se si este correcto o no el DigestValue, lei la informacion que aparece en :

http://www.w3.org/TR/xmldsig-core/

pero no me indica como se calcula ese valor alguien podria decirme como calculo ese dato??
fkof
Mensajes: 18
Registrado: Jue Feb 02, 2012 9:46 am

Re: Firmar XML con XMLSignature Vb 6

Mensaje por fkof »

Hola, lei que ya lograste firmar tu xml, me puedes asesorar de como lo hiciste?
jasistemas
Mensajes: 158
Registrado: Mié Ene 11, 2012 2:08 pm
Contactar:

Re: Firmar XML con XMLSignature Vb 6

Mensaje por jasistemas »

A mi entender, para el caso de Mexico, no estamos firmando TODO EL XML (xml signature), sino que unicamente se firma la CADENA ORIGINAL, el caso de xml signature que existe mas de un modo (creo que son 3) se usa en paises como Brasil y creo que argentina, al menos en pruebas para Brasil que yo hice, si me vi en la necesidad de firmar todo el XML e incorporar el nodo de la firma en el XML (todo ello con .net).

Saludos
jasistemas
Mensajes: 158
Registrado: Mié Ene 11, 2012 2:08 pm
Contactar:

Re: Firmar XML con XMLSignature Vb 6

Mensaje por jasistemas »

Sorry, no lei bien, ya q en efecto,hablan del XML para cancelacion de CFDI... buscare en mi maquina a ver si hallo mi codigo con q generaba el XML firmado.
fkof
Mensajes: 18
Registrado: Jue Feb 02, 2012 9:46 am

Re: Firmar XML con XMLSignature Vb 6

Mensaje por fkof »

Gracias amigo espero y lo encuentres jejejej

saludos
jasistemas
Mensajes: 158
Registrado: Mié Ene 11, 2012 2:08 pm
Contactar:

Re: Firmar XML con XMLSignature Vb 6

Mensaje por jasistemas »

Este es el codigo con el que recuerdo hice las pruebas de firmado de un XML (xml signature), fue para un proyecto de Brasil (donde se firmar todo el XML no solo la cadena original)

En mis pruebas recuerdo que la firma salia igual a la de un proveedor de factura electronica de Brasil. Pero ojo.. no fue VB6, fue .net, lo de menos seria generar una DLL que se importara desde VB6

Código: Seleccionar todo

protected void BtnUpload_Click(object sender, EventArgs e)
    {
        //BtnUploadF FIRMAR DOCUMENTO
        try
        {
            //Cargamos el documento en el XmlDocument
            XmlDocument doc = new XmlDocument();
            //doc.PreserveWhitespace = true;//Preservamos los espacios  CAMBIA EL DIGEST VALUE!!! (deja 10K)
            doc.PreserveWhitespace = false;//Preservamos los espacios
            Stream stm = FileUpload1.PostedFile.InputStream;
            doc.Load(stm);

            X509Certificate2 cetificado = ObtenerCertificado(DDListCertifi.SelectedItem.Text);
            FirmarXML(ref doc, cetificado);
            doc.Save(Server.MapPath(".") + "\\Firmado_" + FileUpload1.FileName);
            HLinkDoc.Text = "Ver Documentó Firmado.";
            HLinkDoc.NavigateUrl = "Firmado_" + FileUpload1.FileName;
            HLinkDoc.Visible = true;

            lblMsg.Text = "Documentó Firmado.";
        }
        catch (Exception ex)
        {

            lblMsg.Text = "Error en la Firma!!!.<br>(" + ex.Message + ")";
        
        }
    }


 /// <summary>
    /// Firma el documento
    /// </summary>
    /// <param name="documento">Documento XML</param>
    /// <param name="certificado">Certificado</param>
    private static void FirmarXML(ref XmlDocument documento, X509Certificate2 certificado)
    {
        // 1.- Se Carga el XML dentro de la clase signedXML
        SignedXml sig = new SignedXml(documento); 

        //2.- Recuperamos la clave privada para firmar
        //  Obtenemos el certificado digital del almacén de certificados (obtenemos el certificado con 
        //  el Canonical Name contenido en el parámetro subjectName), y como vamos a realizar una firma, 
        //  introducimos la clave privada del certificado en .SigningKey 

        sig.SigningKey = certificado.PrivateKey;

        // de JAGP
        //3.- Add a KeyInfo.
        //Para dar la posibilidad al receptor de comprobar la firma sin necesidad de tener el certificado,
        //introducimos la clave pública del certificado dentro de la propiedad .KeyInfo. 
        //Como referencia y de manera opcional, introducimos el Canonical Name del certificado. 
     //   KeyInfo keyInfo = new KeyInfo();
                //////keyInfo.AddClause(new DSAKeyValue(objDSAkeyPair));
     //   keyInfo.AddClause(new KeyInfoX509Data(certificado));
     //   sig.KeyInfo = keyInfo;


        //3. Add public key info to allow checking the key
        
        sig.KeyInfo = new KeyInfo();
        KeyInfoX509Data keyInfoClause = new KeyInfoX509Data(certificado);
        //keyInfoClause.AddSubjectName(certificado.SubjectName.Name); // Con las siguientes instrucciones se agregaria tambien el X509SubjectName
        sig.KeyInfo.AddClause(keyInfoClause);





        //4. Set the reference to sign
        //http://www.devarch.net/post/2010/01/29/Firmar-un-documento-Xml-con-SignedXml.aspx
        //  Como no deseamos firmar el documento Xml entero, sino el nodo acuses, 
        //  introducimos el valor de su atributo id (viene contenido en el parámetro nodeToSign 
        //  con valor “#response”) como referencia. En nuestro caso, ya que vamos ah hacer 
        //  una firma Enveloped, es necesario firmar un nodo en lugar del Xml completo porque sino, 
        //  no se podría luego validar la firma. 
        //(Para firmar el documento completo, reference.Uri ha de ser una cadena vacía). 

        Reference reference = new Reference();
        //No le asignamos ninguna Url en concreto al querer firmar todo el doc.
        reference.Uri = "#NFe4306039266561101315555099000006996000579519";
        XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform(); //parametro true o false??

        // de JAGP
        Transform transform = new XmlDsigC14NTransform(false); // incluir comentarios True, False
        //Transform transform = new XmlDsigC14NTransform(true); // cambia el signature value

        //-------------------------
        // Esta combinacion deja OK la Diges y Signature Value pero con 14Kb.. y NO PASA LA VALIDACION
        //doc.PreserveWhitespace = false
        //Transform transform = new XmlDsigC14NTransform(false)

        //Añadimos la transformación a la referencia
        reference.AddTransform(env);
        reference.AddTransform(transform);

        sig.AddReference(reference);

        // Si coloco aqui la 2a transform cambia la signature value
       // reference.AddTransform(transform);/////
       // sig.AddReference(reference);/////




        //5. Compute the signature Calculamos la firma. 
        sig.ComputeSignature();

        //6. Append node to the document
        //Introducimos el Xml con la firma dentro del documento Xml. 
        XmlElement xmlDigitalSignature = sig.GetXml();

        documento.DocumentElement.AppendChild(documento.ImportNode(xmlDigitalSignature,true)); // boolean deep
        // DIGEST VALUE CORRECTO: bjdJWunzyN8Saf+e6joIlt7uvhc=
        // SIGNATURE: H0erTiulPNBaRdiIclOA+PjZkz4lIuiALpQ1/jybb2roM1jtazkjulsGxOZfsoZL/ZtlMPTDQkG6P9zqmcEYRhbVhSM0tj2xEmbUFDOq6JwZWsTD3pQB4q++rviiqjlNisrCruLsCvQjSAbPVZvST9iE2rRV4V59voG09ho8hHg=
    
    
    }
    /// <summary>
    /// Verifica la firma de un documento
    /// </summary>
    /// <param name="documento">Documento XML</param>
    /// <param name="certificado">Certificado</param>
    /// <returns></returns>
Cerrado