
13-03-2026
|
|
Miembro
|
|
Registrado: may 2025
Posts: 74
Poder: 2
|
|
Cita:
Empezado por Jarogo08
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 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
|
Ostias @Jarogo08  ese código me suena  ...
Lo encontré hace un par de semanas, tengo todas las librerías de las que hablas, pero no fui capaz de hacerlo funcionar ...
A ver si ahora con lo que tú me dices lo consigo ...
Muuuuuuuchas gracias!!! 
|