Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Proyecto SIF/Veri*Factu/Ley Antifraude > Temas legales
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-03-2026
Noe277 Noe277 is offline
Miembro
 
Registrado: jul 2017
Posts: 162
Poder: 9
Noe277 Va por buen camino
Facturae

Cita:
Empezado por FacilIng Ver Mensaje
Perdona una pregunta ¿funcionando y firmando los XML de FacturaE?

Pq nosotros el XML de FacturaE ya lo generamos correctamente y ningún problema cuando lo firmas con Autofirma de FACE ...
Pero lo que queremos ahora es firmar nosotros mismos el XML para conseguir el XSIG firmado a través de nuestro SW y ahí es donde estamos teniendo problemas pq no vemos cómo hacerlo y los NuGet que encontramos no están operativos ni funcionan ...
He visto por aquí la librería Java externa que algunos de vosotros utilizáis, pero tampoco nos apetece tener que instalar Java a nuestros clientes cuando nunca lo hemos necesitado ...
Nuestro SW está programado en VB.net y nos gustaría encontrar alguna forma de hacerlo ...

Se agradecen sugerencias ...
¡Gracias!

De momento estamos conectando con autofirma, el programa es c#. Lo que si hacemos es conectar directamente con el autofirma desde el programa. En su momento por el 2016 no encontramos la manera de hacerlo y lo que dices había que instalar cosas externas. Volveremos a mirar si hay otra manera ya que vamos a sacar programa nuevo.
Responder Con Cita
  #2  
Antiguo 11-03-2026
FacilIng FacilIng is offline
Miembro
 
Registrado: may 2025
Posts: 74
Poder: 2
FacilIng Va por buen camino
Cita:
Empezado por Noe277 Ver Mensaje
De momento estamos conectando con autofirma, el programa es c#. Lo que si hacemos es conectar directamente con el autofirma desde el programa.
Ostras! Qué quieres decir con lo de "estamos conectando con Autofirma"?
Nosotros generamos el XML de la FacturaE y es el cliente el que abre Autofirma y selecciona el xml correspondiente ...
¿Vosotros hacéis la llamada a Autofirma por línea de comandos con parámetros? ¿Cómo lo hacéis?

Cita:
Empezado por Noe277 Ver Mensaje
Volveremos a mirar si hay otra manera ya que vamos a sacar programa nuevo.
Ostras otra vez!
Si encontráis alguna forma de hacerlo actualmente, ya decís, pq nosotros no hemos sido capaces de encontrar nada ...

Muchas gracias!
Responder Con Cita
  #3  
Antiguo 11-03-2026
novatico novatico is offline
Miembro
 
Registrado: dic 2022
Posts: 370
Poder: 4
novatico Va por buen camino
Nosotros hacemos la siguiente llamada por línea de comandos:

Cita:
AutoFirmaCommandLine sign -i %1 -o %2 -store auto -format facturae -filter subject.contains:%3 -xml -config signatureProductionCountry=ESPAÑA
donde %1 es el fichero xml generado con la factura, %2 el fichero xml resultante ya firmado, y %3 es el CIF/NIF del certificado que se va a usar para firmar.

Para que funcione, yo copio, desde la carpeta de instalación de Aufirma, lo siguiente:

AutofirmaCommandLine.exe
y las carpetas:
certutil, y
jre

y las añado en la carpeta de instalación de mi aplicación.
Responder Con Cita
  #4  
Antiguo 12-03-2026
Noe277 Noe277 is offline
Miembro
 
Registrado: jul 2017
Posts: 162
Poder: 9
Noe277 Va por buen camino
Autofirma

Yo lo que hice en su momento fue descargarme el proyecto de autofirma lo toque por alguna cosilla ("No me acuerdo ") y a mis clientes les paso el .jar de autofirma personalizado a una carpeta y luego desde mi programa le paso los parámetros y lo firma.

Me ahorraba el tema por si no tenían instalado el autofirma y se lo pasaba yo. Antes la gente no sabia ni que era un certificado.


El proyecto https://github.com/ctt-gob-es/clienteafirma
Responder Con Cita
  #5  
Antiguo 13-03-2026
FacilIng FacilIng is offline
Miembro
 
Registrado: may 2025
Posts: 74
Poder: 2
FacilIng Va por buen camino
Cita:
Empezado por Noe277 Ver Mensaje
Yo lo que hice en su momento fue descargarme el proyecto de autofirma lo toque por alguna cosilla ("No me acuerdo ") y a mis clientes les paso el .jar de autofirma personalizado a una carpeta y luego desde mi programa le paso los parámetros y lo firma.
Me ahorraba el tema por si no tenían instalado el autofirma y se lo pasaba yo. Antes la gente no sabia ni que era un certificado.
El proyecto https://github.com/ctt-gob-es/clienteafirma
Ostras! Esto no lo sabía yo puede ser nuestra solución ...

Muchas gracias @Noe277
Responder Con Cita
  #6  
Antiguo 13-03-2026
FacilIng FacilIng is offline
Miembro
 
Registrado: may 2025
Posts: 74
Poder: 2
FacilIng Va por buen camino
Cita:
Empezado por novatico Ver Mensaje
Nosotros hacemos la siguiente llamada por línea de comandos:

> AutoFirmaCommandLine sign -i %1 -o %2 -store auto -format facturae -filter subject.contains:%3 -xml -config signatureProductionCountry=ESPAÑA

donde %1 es el fichero xml generado con la factura, %2 el fichero xml resultante ya firmado, y %3 es el CIF/NIF del certificado que se va a usar para firmar.

Para que funcione, yo copio, desde la carpeta de instalación de Aufirma, lo siguiente:

AutofirmaCommandLine.exe
y las carpetas:
certutil, y
jre

y las añado en la carpeta de instalación de mi aplicación.
Muchas gracias @novatico!
Responder Con Cita
  #7  
Antiguo 12-03-2026
Jarogo08 Jarogo08 is offline
Miembro
 
Registrado: ene 2025
Posts: 344
Poder: 2
Jarogo08 Va por buen camino
¿os referís a tener un xml en una ruta y a partir de él generar el xsig?
Responder Con Cita
  #8  
Antiguo 13-03-2026
FacilIng FacilIng is offline
Miembro
 
Registrado: may 2025
Posts: 74
Poder: 2
FacilIng Va por buen camino
Cita:
Empezado por Jarogo08 Ver Mensaje
¿os referís a tener un xml en una ruta y a partir de él generar el xsig?
Sip, correcto ...
Nos gustaría hacerlo "desde dentro" de nuestro SW (vb.net) sin tener que usar Autofirma, ni aplicaciones externas ...
¿Tienes la solución mágica @Jarogo08?
Responder Con Cita
  #9  
Antiguo 13-03-2026
Noe277 Noe277 is offline
Miembro
 
Registrado: jul 2017
Posts: 162
Poder: 9
Noe277 Va por buen camino
Librerias

Cita:
Empezado por FacilIng Ver Mensaje
Sip, correcto ...
Nos gustaría hacerlo "desde dentro" de nuestro SW (vb.net) sin tener que usar Autofirma, ni aplicaciones externas ...
¿Tienes la solución mágica @Jarogo08?
1) FirmaXadesNet en GitHub (proyecto C# para XAdES)

Este proyecto no es de Facturae directamente, pero es una biblioteca en C# que permite crear firmas XAdES (BES, EPES, etc.) y puede usarse para firmar un XML Facturae si configuras bien los parámetros de política.

2) FirmaXadesNetCore en NuGet (versión .NET Standard)

Una adaptación de FirmaXadesNet compatible con .NET Standard / .NET 6 / .NET 7 / .NET 8, lo que facilita usarlo en proyectos modernos.
Responder Con Cita
  #10  
Antiguo 13-03-2026
Jarogo08 Jarogo08 is offline
Miembro
 
Registrado: ene 2025
Posts: 344
Poder: 2
Jarogo08 Va por buen camino
Cita:
Empezado por FacilIng Ver Mensaje
Sip, correcto ...
Nos gustaría hacerlo "desde dentro" de nuestro SW (vb.net) sin tener que usar Autofirma, ni aplicaciones externas ...
¿Tienes la solución mágica @Jarogo08?

Sí, nosotros lo hacemos!
Déjame montarte un ejemplo y lo pongo aquí. A ver si me da tiempo hoy!
Responder Con Cita
  #11  
Antiguo 13-03-2026
FacilIng FacilIng is offline
Miembro
 
Registrado: may 2025
Posts: 74
Poder: 2
FacilIng Va por buen camino
Cita:
Empezado por Jarogo08 Ver Mensaje
Sí, nosotros lo hacemos!
Déjame montarte un ejemplo y lo pongo aquí. A ver si me da tiempo hoy!
Espero ansioso!!!
Responder Con Cita
  #12  
Antiguo 13-03-2026
Jarogo08 Jarogo08 is offline
Miembro
 
Registrado: ene 2025
Posts: 344
Poder: 2
Jarogo08 Va por buen camino
Aplicación de Windows Forms, un formulario con un botón (está en VB. NET)

Código:
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 es.mityc.javasign.trust
Imports es.mityc.javasign.xml.xades.policy
Imports es.mityc.firmaJava.libreria.xades
Imports es.mityc.javasign.xml.refs
Imports es.mityc.firmaJava.libreria.utilidades
Imports org.w3c.dom
Imports sviudes.blogspot.com
Imports System.Xml


Public Class Form1

    Private Sub btnFirmarXML_Click(sender As Object, e As EventArgs) Handles btnFirmarXML.Click

        Dim ArchivoXML As String = "C:\Prueba\Factura.xml"
        Dim ArchivoXMLFirmado As String = "C:\Prueba\Factura.xsig"
        Dim ArchivoCertificado As String = "C:\Prueba\Certificado.pfx"
        Dim PasswordCertificado As String = "PasswordCertificado"

        Dim ClavePrivada As PrivateKey = Nothing
        Dim Proveedor As Provider = Nothing
        Dim Certificado As java.security.cert.X509Certificate = CargaCertificado(ArchivoCertificado, PasswordCertificado, ClavePrivada, Proveedor)

        ' Si hay certificado
        If Certificado IsNot Nothing Then

            ' Política de firma
            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 DataToSign = New DataToSign()
            dataToSign.setXadesFormat(EnumFormatoFirma.XAdES_BES) ' XadES-PES
            dataToSign.setEsquema(XAdESSchemas.XAdES_132)
            dataToSign.setPolicyKey("facturae31")
            dataToSign.setAddPolicy(True)
            dataToSign.setXMLEncoding("UTF-8")
            dataToSign.setEnveloped(True)
            dataToSign.addObject(New ObjectToSign(New AllXMLToSign(), "facturae31", Nothing, "text/xml", Nothing))
            dataToSign.setDocument(CargaXML(ArchivoXML))

            ' Firmar
            Dim res() As Object = New FirmaXML().signFile(Certificado, dataToSign, ClavePrivada, Proveedor)

            ' Guardamos la firma en un fichero
            UtilidadTratarNodo.saveDocumentToOutputStream(res(0), New FileOutputStream(ArchivoXMLFirmado), True)

            MsgBox("Fichero " & ArchivoXMLFirmado & " generado correctamente", MsgBoxStyle.OkOnly, "btnFirmarXML_Click")
        Else
            MsgBox("No es posible acceder al certificado", MsgBoxStyle.OkOnly, "btnFirmarXML_Click")
        End If

    End Sub

    Public Shared Function CargaXML(ByVal Ruta As String) As Document

        Dim dbf As DocumentBuilderFactory = DocumentBuilderFactory.newInstance()
        dbf.setNamespaceAware(True)

        Return dbf.newDocumentBuilder().parse(New BufferedInputStream(New FileInputStream(Ruta)))
    End Function

    Public Shared Function CargaCertificado(ByVal Ruta As String, ByVal Clave As String, ByRef ClavePrivada As PrivateKey, ByRef Proveedor As Provider) As X509Certificate
        Dim Certificado As X509Certificate = Nothing

        Proveedor = Nothing
        ClavePrivada = Nothing

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

        ' Si encontramos el certificado
        If certificates.size() = 1 Then
            Certificado = certificates.get(0)

            ' Obtención de la clave privada asociada al certificado
            ClavePrivada = storeManager.getPrivateKey(Certificado)

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

        Return Certificado
    End Function

End Class
Se necesitan las siguientes librerías al lado del ejecutable:


commons-logging-1.1.dll
facturaE_additional.dll
IKVM.OpenJDK.Core.dll
IKVM.OpenJDK.Security.dll
IKVM.OpenJDK.Text.dll
IKVM.OpenJDK.Util.dll
IKVM.OpenJDK.XML.API.dll
IKVM.OpenJDK.XML.Parse.dll
IKVM.Runtime.dll
MITyCLibAPI-1.0.4.dll
MITyCLibCert-1.0.4.dll
MITyCLibPolicy-1.0.4.dll
MITyCLibTrust-1.0.4.dll
MITyCLibTSA-1.0.4.dll
MITyCLibXADES-1.0.4.dll
xmlsec-1.4.2-ADSI-1.0.dll


No me preguntéis de donde se sacan porque las busqué hace unos 10 años y no tengo ni pajolera de donde las conseguí

No sé si tengo posibilidad de subir un rar con esta aplicación de ejemplo, así ya tendríais también las librerías

Última edición por Jarogo08 fecha: 13-03-2026 a las 12:39:03.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Que pasa con FacturaE y la factura electrónica a raiz de Verifactu richidemola General/Noticias 3 20-09-2025 19:01:39
Firma en factura electrónica facturaE Galahad Varios 8 19-06-2016 00:45:14
libreria Delphi para factura electronica Facturae argobot ¿Quieres trabajar? (es el lugar para publicar una oferta de trabajo) 0 11-04-2016 11:06:14
Validar firma de factura electrónica (formato Facturae) maro Varios 79 22-09-2015 09:45:17
Factura electrónica "Facturae" newtron Varios 3 16-01-2015 18:43:45


La franja horaria es GMT +2. Ahora son las 06:08:00.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi