none
FIRMAR UN XML DESDE VB.NET RRS feed

  • Debate general

  • Saludos mi consulta es como hago para firmar un xml con las siguientes condiciones:

    Estándar de firma XadES_BES

    Versión del esquema 1.3.2

    Codificación UTF-8

    Tipo de firma ENVELOPED

    si alguien tiene algún ejemplo para poder guiarme le estaría muy agradecido

    viernes, 19 de septiembre de 2014 14:14

Todas las respuestas

  • revisa este enlace

    https://xadesnet.codeplex.com/

    tienes librerías para su manejo. Lo malo para ti...que está implementada en c# pero puedes convertir fácilmente el código a vb con cualquier conversor online.


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    viernes, 19 de septiembre de 2014 14:36
  • ejecute el código pero cuando trato de firmar me sale el siguiente error.

    La contraseña de red especificada no es válida.

    viernes, 19 de septiembre de 2014 14:44
  • yo estaba usando este codigo usando libreria de java pero hay un pequeño error en un nodo del xml 

    <ds:Reference Id="Reference-ID-545516" URI=""> //este nodo no se porque se me genera asi deberia ser de la siguiente forma

    <ds:Reference Id="Reference-ID-545516" URI="#comprobante">

    Imports java.security
    Imports java.io
    Imports java.util
    Imports java.security.cert
    Imports javax.xml.parsers
    Imports es.mityc.javasign.pkstore
    Imports es.mityc.javasign.pkstore.keystore
    Imports sviudes.blogspot.com
    Imports es.mityc.javasign.trust
    Imports es.mityc.javasign.xml.xades.policy
    Imports es.mityc.firmaJava.libreria.xades
    Imports es.mityc.javasign.xml.refs
    Imports org.w3c.dom
    Imports es.mityc.firmaJava.libreria.utilidades

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

            Dim privateKey As PrivateKey = Nothing
            Dim provider As Provider = Nothing
            Dim certificate As java.security.cert.X509Certificate = LoadCertificate("C:\Users\Public\Documents\Ricardo\john_giovanny_quispillo_pacalla.pfx", "contraseña", privateKey, provider)
            Try
                'Si encontramos el certificado...  
                If certificate IsNot Nothing Then
                    'Política de firma (Con las librerías JAVA, esto se define en tiempo de ejecución)  
                    TrustFactory.instance = es.mityc.javasign.trust.TrustExtendFactory.newInstance()
                    TrustFactory.truster = es.mityc.javasign.trust.MyPropsTruster.getInstance()
                    PoliciesManager.POLICY_SIGN = New es.mityc.javasign.xml.xades.policy.facturae.Facturae31Manager()
                    PoliciesManager.POLICY_VALIDATION = New es.mityc.javasign.xml.xades.policy.facturae.Facturae31Manager()

                    'Crear datos a firmar  
                    Dim dataToSign As New es.mityc.firmaJava.libreria.xades.DataToSign()
                    dataToSign.setXadesFormat(EnumFormatoFirma.XAdES_BES)
                    'XAdES-EPES  
                    dataToSign.setEsquema(XAdESSchemas.XAdES_132)
                    dataToSign.setPolicyKey("facturae31")
                    'Da igual lo que pongamos aquí, la política de firma se define arriba  
                    dataToSign.setAddPolicy(False)
                    dataToSign.setXMLEncoding("UTF-8")
                    'dataToSign.addClaimedRol(New SimpleClaimedRole("Rol de firma"))
                    dataToSign.setEnveloped(True)
                    dataToSign.addObject(New ObjectToSign(New AllXMLToSign(), "contenido comprobante", Nothing, "text/xml", Nothing))
                    dataToSign.setDocument(LoadXML(ruta))

                    'Firmar  
                    Dim res As [Object]() = New FirmaXML().signFile(certificate, dataToSign, privateKey, provider)

                    ' Guardamos la firma a un fichero en el home del usuario  
                    UtilidadTratarNodo.saveDocumentToOutputStream(DirectCast(res(0), Document), New FileOutputStream("D:\Program Files\Comprobantes Firmados\" & claveAcceso & ".xml"), True)
                    MsgBox("¡.... Archivo Firmado Con Exito .....!", MsgBoxStyle.Information)

                End If
            Catch ex As Exception
                MsgBox(ex.Message, MsgBoxStyle.Critical)
            End Try
        End Sub
        Private Function LoadXML(ByVal path As String) As Document
            Dim dbf As DocumentBuilderFactory = DocumentBuilderFactory.newInstance()
            dbf.setNamespaceAware(True)
            Return dbf.newDocumentBuilder().parse(New BufferedInputStream(New FileInputStream(path)))
        End Function

        Private Function LoadCertificate(ByVal path As String, ByVal password As String, ByRef privateKey As PrivateKey, ByRef provider As Provider) As java.security.cert.X509Certificate
            Dim certificate As java.security.cert.X509Certificate = Nothing
            provider = Nothing
            privateKey = Nothing

            'Cargar certificado de fichero PFX  
            Dim ks As KeyStore = KeyStore.getInstance("PKCS12")
            ks.load(New BufferedInputStream(New FileInputStream(path)), password.ToCharArray())
            Dim storeManager As IPKStoreManager = New KSStore(ks, New PassStoreKS(password))
            Dim certificates As List = storeManager.getSignCertificates()

            'Si encontramos el certificado...  
            If certificates.size() = 1 Then
                certificate = DirectCast(certificates.[get](0), X509Certificate)
                ' Obtención de la clave privada asociada al certificado  
                privateKey = storeManager.getPrivateKey(certificate)

                ' Obtención del provider encargado de las labores criptográficas  
                provider = storeManager.getProvider(certificate)
            End If

            Return certificate
        End Function

    viernes, 19 de septiembre de 2014 16:14
  • Buenas, tengo la misma consulta tuya, agradeceria algun ejemplo de codigo,

    para firmar un xml en vb.net con las siguientes condiciones:

    Estándar de firma XadES_EPES

    Versión del esquema 1.3.2

    Codificación UTF-8

    Tipo de firma ENVELOPED

    miércoles, 17 de mayo de 2017 19:17
  • hola.  amigo pudiste resolver el problema , puedes ayudarme . 

    Gracias. info@professionaluser.com

     
    sábado, 7 de abril de 2018 17:09