Certificados digitales.
-
jueves, 17 de julio de 2008 19:46
Hola a todos.
Me interesa saber si alguien tiene experiencia en el trabajo con certificados digitales de archivos XML.
La situación es la siguiente:
Tengo un archivo de XML el cual debe ser firmado digitalmente por razones de seguridad, dicha firma es realizada por una función propia del Framework de .NET, hasta aquí todo bien, la complicación surge porque el archivo firmado debe llevar dentro de la estructura de TAGS de la firma un prefijo, ejemplo:
El XML ya firmado debería verse así:
<ds : signature>
...
</ds : signature>
siendo "ds" el prefijo, en cambio...
El XML que genero se ve asi:
<signature>
...
</signature>
dicho prefijo debería ser insertado en el archivo de XML al momento de firmarlo, no es válido anexarlo después de la firma, ya que la misma genera un número HASH que va dentro del propio XML, si se le anexa el prefjo, el número de HASH ya no es válido, y la firma no es válida.
Expongo aquí código y marco en negrita la línea donde se firma el XML.
En plataformas como Java existe una función que acepta el prefijo como parámetro, pero en .NET no se puede pasar dicho parámetro al menos que yo sepa.
Agradezco comentarios y/o ayuda de algun tipo.
Saludos.
Code Snippet//Cargo el certificado
X509Certificate2 cert = this.obtenerCertificado(codBanco);
cert.Import(clavePrivada, pass, X509KeyStorageFlags.DefaultKeySet);SignedXml signedXml = new SignedXml();
//Asigno la clave privada
signedXml.SigningKey = cert.PrivateKey;
DataObject data = new DataObject();
data.Data = doc.ChildNodes;
data.Id = "1003";
signedXml.AddObject(data);
Reference reference = new Reference();
//reference.Uri = "#" & data.Id '"#1011";
reference.Uri = "#1003";
XmlDsigC14NTransform env1 = new XmlDsigC14NTransform();
//Añadimos la transformación a la referencia
reference.AddTransform(env1);signedXml.AddReference(reference);
KeyInfo keyInfo = new KeyInfo();
keyInfo.AddClause(new KeyInfoName(data.Id));
signedXml.KeyInfo = keyInfo;
signedXml.ComputeSignature();
Todas las respuestas
-
viernes, 22 de agosto de 2008 16:20
Hola,
estamos en la misma situación.
He probado de todo.
Al final creí que una transformacion con XSL funcionaria, pero me da error al firmar:
Code SnippetDim t = New XmlDsigXsltTransform()
'Dim t As New CLS_XmlTrans2
Dim xel As New XmlDocumentxel.Load(
"Signature.xsd")'****************************
'<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><xsl:output method="xml" indent="yes" /><xsl:template match="/"><xsl:apply-templates select="node()" /></xsl:template><xsl:template match="*"><xsl:element name="ds:{local-name()}"><xsl:apply-templates select="@*" /><xsl:apply-templates select="node()" /></xsl:element></xsl:template><xsl:template match="*[namespace-uri() != 'http://www.w3.org/2000/09/xmldsig#']"><xsl:copy><xsl:apply-templates select="@*" /><xsl:apply-templates select="node()" /></xsl:copy></xsl:template><xsl:template match="@*"><xsl:copy><xsl:apply-templates select="node()" /></xsl:copy></xsl:template></xsl:stylesheet>
'******************************
t.LoadInnerXml(xel.ChildNodes)
StrRef = "http://www.w3.org/2000/09/xmldsig#:Signature"docRef =
New Reference(StrRef)docRef.AddTransform(t)
signature.AddReference(docRef)
...etc...
signature.ComputeSignature()
Y dá un error de seguridad. Si me entero de algo, ya te diré. Saludos.
-
jueves, 27 de noviembre de 2008 12:23
Hola,
Me gustaría saber si habéis conseguido solucionar el problema... ya que llevo un tiempo peleando con el dichoso prefijo del espacio de nombres y no consigo nada.... Me veo implementando el XMLDSIG!!!
Saludos. -
viernes, 28 de noviembre de 2008 10:32
Pues yo me veo haciendolo en JAVA, PORQUE LA AEAT HA SACADO UNOS MODULOS EN JAVA PARA HACER LA FIRMA FACTURAE + XADES y con .net no hay quien los haga. Y en Microsoft no hay nadie que coja el guante.... -
miércoles, 14 de enero de 2009 12:09¿Alguien al conseguido implementar la firma de ficheros XML según Facturae en .NET?
-
jueves, 15 de enero de 2009 18:57
Espero, como tú, porque estoy hasta el gorro de investigar. No puedo más. Saludos. -
jueves, 22 de enero de 2009 21:09Veo que el tema desde .Net esta complicado.
Llevo un par de dias dandole vueltas al asunto. Y los de microsoft a mi parecer han dejado el namespace de firma XML demasiado cerrado, se han limitado a cumplir la especificación XMLDSig, pero parece ser que no hay forma de 'personalizar' la firma.
Voy a optar a implementar la solución con las clases JAVA que facilita la AEAT. http://www.facturae.es/Descargas/Desarrollo/XAdES/
Por cierto, alguien ya ha trabajado con esas clases. Es por saber si podian facilitar algunos fuentes, y si han tenido algún problema que señalar con ellas.
Yo voy descargando el SDK + eclipse etc.. con lo oxidado que tengo java...
Bueno, ya os comentare como me ha ido.
Un saludo y muchas gracias. -
jueves, 22 de enero de 2009 21:37Yo al final lo he hecho con Eclipse y con las librerías de la AEAT, la verdad que así es bastante fácil.
-
jueves, 22 de enero de 2009 22:54Buenas noches, José.
Puedes subir tus fuentes? Para que todos podamos instruirnos.
Salu2 y muchas gracias. -
viernes, 23 de enero de 2009 7:54
En la documentación de la AEAT vienen ejemplos.
por ejemplo, para hacer la firma del fichero C:\Factura.xml sólo necesitas lo siguiente:
try {
java.io.File factura31 = new java.io.File( "C:\\Factura.xml" );
es.mityc.facturae.utils.SignatureUtil.sign(factura31, "C:\\facturaFirmada.xml");
} catch(Exception e){
System.out.println("error" + e.getMessage());
};
El problema es que presenta una ventana para seleccionar el certificado con el que hacer la firma.
-
viernes, 23 de enero de 2009 11:29
Hola Gabriel. Estuve investigando el código de las siguientes clases (gracias a que podemos depurar el .NET Framework en Visual Studio):
System.Security.Cryptography.Xml.SignedInfo
System.Security.Cryptography.Xml.Reference
System.Security.Cryptography.Xml.TransformChain
System.Security.Cryptography.Xml.Transform
System.Security.Cryptography.Xml.SignaturePara no meterme con certificados, busqué un ejemplo en el MSDN (http://msdn.microsoft.com/en-us/library/ms229745.aspx y aquí http://msdn.microsoft.com/en-us/library/ms229950.aspx) y firmé el XML haciendo modificaciones en algunos lugares de esas clases, como por ejemplo en el método GetXml (internal XmlElement GetXml (XmlDocument document)) de la clase System.Security.Cryptography.Xml.SignedInfo:
Cambié esto:
Code SnippetXmlElement signedInfoElement = document.CreateElement("SignedInfo", SignedXml.XmlDsigNamespaceUrl);
Por esto:
Code SnippetXmlElement signedInfoElement = document.CreateElement("ds:SignedInfo", SignedXml.XmlDsigNamespaceUrl);Y así seguí con las demás clases en busca de las etiquetas "Signature", "SignedInfo", "CanonicalizationMethod", "SignatureMethod", "Reference", "Transforms", "Transform", "DigestMethod", "DigestValue", "SignatureValue".
El resultado fue un XML firmado cuya firma pudo ser comprobada. Tendrías que hacerlo y después si tenés acceso a un ambiente de prueba, verificar si el XML firmado lo valida la otra parte.
Si esto funciona tendrías que ver cómo implementarlo. Parecería ser como dice Gabriel Tame que no hay forma de cambiar este comportamiento.
Saludos.
-
sábado, 24 de enero de 2009 2:23Muy bueno tu apunte Nicolás, el camino que indicas, puede ser el que arroje luz sobre este tema.
Movido por la curiosidad ante tu respuesta. Me he puesto a depurar las clases SignedXml,SignedInfo ..etc , cual fue mi sorpresa, al comprobar que no puedo depurar ninguna clase del namespace System.Security.Cryptography.Xml. Sin embargo, para las clases de System.Security.Cryptography, System.Security.Cryptography.X509Certificates no tengo ningún problema para acceder a atraves del depurador.
Sabrías a que puede ser debido? El system.security.pdb aparece como cargado en la ventana de modules de VS.
Salu2. -
sábado, 24 de enero de 2009 3:06
Parece que mucha gente está teniendo problemas al depurar el código del .NET Framework en Visual Studio. Si podés hacé esto:
1 - Cerrá todas las instancias de Visual Studio y borrá los símbolos que se hayan descargado.
2 - Abrí Visual Studio 2008 Command Prompt y corré el siguiente comando: "devenv /resetsettings" (sin las comillas).
3 - Cuando Visual Studio 2008 termine de cargar, abrí el proyecto. Luego, andá al menú "Tools" -> "Options...". En el cuadro "Options" buscá "Debugging" y marcá la opción "Enable .NET Framework source stepping". Seguramente te aparezcan dos advertencias, aceptalas y cerrá el cuadro "Options".
4 - Probá depurar (si te aparece el cuadro "Inconsistent Line Endings" preguntando para normalizar dale que No.)Si esto no te funciona, probá borrando los símbolos nuevamente.
-
sábado, 24 de enero de 2009 11:18Hola Nicolás.
Instale el service pack 1 del 2008.
Seguí tus instrucciones, y ya me deja depurar esas clases.
Ahora toca un poco de investigación.
Salu2 y muchas gracias. -
jueves, 05 de febrero de 2009 17:05Hola, ¿ha conseguido alguien hacerlo en .NET?
Gracias y un saludo! -
martes, 24 de febrero de 2009 11:04Alguien tiene algun ejemplo de la creación de una FacturaE en visual basic 2008.
Tengo un programa de facturación y me gustaria implementar esta función, todos los conceptos los guardo en una base de datos, genero la factura en PDF, XLS sin problema, pero me gustaria tambien que esa factura se "transformara" en el standart XML de Facturae y poderla enviar al destinatario.
Gracias
-
miércoles, 04 de marzo de 2009 11:31Algún ejemplo completo con código fuente en .net (c# o vb.net) ?
Muchas gracias.
http://www.alhambra-eidos.es/web2005/index.html -
miércoles, 04 de marzo de 2009 22:00Desengañemonos, .NET no sirve para FACTURAE. Utilizad Java. Esta gente nos ignora.
-
jueves, 05 de marzo de 2009 7:46No he encontrado nada completo en foros de la comunidad, sólo alguna aplicación comercial.
No he encontrado nada completo en foros de la comunidad, sólo alguna aplicación comercial.
Microsoft ha ocultado una implementación tal como indica este documento: existió Microsoft.Xades.dll, pero no se sabe donde está ahora, quizá sea una conspiración judeo-masónica.
http://download.microsoft.com/download/4/f/d/4fd49a94-8772-4bd0-88ca-bf46e2d029fc/24_JUNE_2004/MSSoftwarePresentation_ORIG.ppt
Alguien de Microsoft tiene noticas al respecto ??
saludos.
saludos.
http://www.alhambra-eidos.es/web2005/index.html -
lunes, 09 de marzo de 2009 8:17Hola muy buenas. Acabo de empezar, con lo que estoy viendo, el marrón de la Facturae. No sé ni por donde coger la cosa. Podría alguien indicarme o guiarme por donde puedo empezar. Un saludo y Gracias
Solo unos pocos marcan las diferencias. Tu mismo -
martes, 28 de abril de 2009 16:29Viendo que es casi imposible hacer esto en .net, ¿Como puedo utilizar las librerias que da la agencia tributaria desde vb .NET?, es decir, ya tengo todo el código que me genera el xml con formato facturae, como puedo añadirle la firma con lo de java.
Muchas gracias -
miércoles, 29 de abril de 2009 7:55Yo he creado este codigo sacando algunas partes de lo que he leido en este foro, a mi me funciona, pero lo único es poder pasar el signature a ds:signature.
Dim document As New XmlDocument
'Creamos el objeto de firma XML
Dim oSignedXml As SignedXml
Dim oReference As Reference
Dim oEnv As XmlDsigEnvelopedSignatureTransform
Dim oEnv1 As XmlDsigC14NTransform
Dim xmlDigitalSignature As XmlElement
Dim cert As New X509Certificates.X509Certificate2
Try
cert = BuscarCertificado("CN=34534563")
'Cargamos el documento XML
document.PreserveWhitespace = True
document.Load(DireccionXML)
oSignedXml = New SignedXml(document)
''Añadimos la clave a usar
oSignedXml.SigningKey = cert.PrivateKey
'Creamos una nueva referencia para ser firmada
oReference = New Reference
oReference.Uri = ""
'Añadimos una transformación de encapsulación o "ensobramiento" a la referencia
oEnv = New XmlDsigEnvelopedSignatureTransform
oReference.AddTransform(oEnv)
oEnv1 = New XmlDsigC14NTransform()
oReference.AddTransform(oEnv1)
'Añadimos la referencia al objeto de firma
oSignedXml.AddReference(oReference)
Dim keyInfo As New KeyInfo
keyInfo.AddClause(New KeyInfoX509Data(cert))
oSignedXml.KeyInfo = keyInfo
'La calculamos
oSignedXml.ComputeSignature()
'Obtenemos la representación XML de la firma y la guardamos en un objeto XmlElement
xmlDigitalSignature = oSignedXml.GetXml()
'Y por último añadimos el elemento al documento XML y lo guardamos
document.DocumentElement.AppendChild(document.ImportNode(xmlDigitalSignature, True))
document.Save(DireccionXML)
Catch ex As Exception
MsgBox(ex.Source & ". " & ex.Message)
End Try -
miércoles, 29 de abril de 2009 9:42Los imports son:
Imports System.Security.Cryptography
Imports System.Security.Cryptography.Xml
Imports System.Xml -
lunes, 04 de mayo de 2009 15:50ola, tengo un problema, trabajo con navision y tengo que crear una aplicacion java que cree facturas electronicas con el API de la AEAT,
pero no tengo ni idea de como hacerlo me podrias explicar un poco por encima como se hace? Gracias de antemano. -
lunes, 04 de mayo de 2009 16:55Lo siento, pero no tengo ni idea de JAVA, y tampoco he trabajado con el API de la AEAT, pero creo que en la página web de al facturae, www.facturae.es, bienen ejemplos y demás.
-
viernes, 12 de junio de 2009 8:38
ola, tengo un problema, trabajo con navision y tengo que crear una aplicacion java que cree facturas electronicas con el API de la AEAT,
Desde navision creo que es fácil llamar a ejecutables.
pero no tengo ni idea de como hacerlo me podrias explicar un poco por encima como se hace? Gracias de antemano.
Utilizando la distribución ofrecida por la aeat, puedes hacerte un programita muy simple, en Java, que reciba los parámetros de la factura y cree una nueva factura con ellos. El módulo de la aeat te permite hacer esto y después generarte el xml de la factura en un archivo.
Es engorroso debido a que tienes que definir todos los campos que tiene la factura electrónica, y son muchos, pero no es complicado, solo tedioso.
Una vez hecho el programa Java, puedes pasarlo a un .jar (archivo ejecutable de Java) y llamarlo desde navision.
Espero que te sirva de algo...así lo he hecho yo.- Editado donyomismo viernes, 12 de junio de 2009 9:40
-
viernes, 12 de junio de 2009 8:52Hola, para .NET hay alguna referencia web donde aparezcan los pasos a seguir en detalle ?
Gracias. -
viernes, 12 de junio de 2009 9:43Creo que lo más sencillo sería que, desde .NET, se realizará una llamada del tipo "ShellExecute" a la aplicación desarrollada en Java, ya que el esfuerzo de desarrollo de la aplicación Java es mucho inferior debido al componente gratuito de la aeat.
-
lunes, 15 de junio de 2009 9:22Yo creo lo mismo, es mas facil llamar con .net al programa en java para que simplemente firme el XML.
Tengo ya hecho un proyecto que genera el XML pero falta firmarlo, la cuestion seria llamar al programa en java pasandole la ruta del archivo por parametro y a correr.
¿Como podria hacer esto?
¿Me podeis pasar la aplicacion de java que firmaria el XML?
Gracias. -
lunes, 15 de junio de 2009 10:04
Yo creo lo mismo, es mas facil llamar con .net al programa en java para que simplemente firme el XML.
No te la puedo pasar porque está bajo licencia de mi empresa.
Tengo ya hecho un proyecto que genera el XML pero falta firmarlo, la cuestion seria llamar al programa en java pasandole la ruta del archivo por parametro y a correr.
¿Como podria hacer esto?
¿Me podeis pasar la aplicacion de java que firmaria el XML?
Gracias.
Sí te puedo comentar como hacerla, ya que es trivial. La librería ofrecida por la aeat vienen con una documentación bastante buena que puedes consultar si tienes dudas. Viene con un ejemplo parecido al que te voy a poner aquí:
java.io.File facturaFile = new java.io.File(Rutafactura); es.mityc.facturae.utils.SignatureUtil.sign(facturaFile,Rutafirma);
RutaFactura es la ruta al XML donde esté la factura. Por ejemplo "C:\Factura1.xml"
RutaFirma es la ruta donde se generará el fichero con la firma. Por ejemplo "C:\FacturaFirmada.xsig"
Actualmente soporta el estándar de factura facturae versiones 3.0 y 3.1.
Espero que os sirva. -
lunes, 15 de junio de 2009 10:29Varias cosas:
el codigo de java q me has puesto, lo pongo en un archivo .java, como lo compilo??? yo no tengo ni idea de java, programo en php y en vb.net
he visto en facturae.es varios archivos, en Componentes Java Xades tienes ejemplos como estos: http://193.146.123.247/aplicaciones/facturae/componentes/0.9beta/Ejemplos.zip el ejemplo que viene para firma xades lo he visto muy completo pero no se como ejecutarlo.
tambien hay un apartado "API Java para Factura electronica" que puedes descargarte la api pero para navegadores mozilla e ie. http://www.facturae.es/Descargas/Desarrollo/API/
ese codigo, o cualquier otro en java para firmar, te permite seleccionar el certificado para firmar?
Gracias -
lunes, 15 de junio de 2009 11:13
Varias cosas:
A ver, Java es un lenguaje fácil de aprender. Los ".java" tienen que compilarse, convirtiendose en ".class". El proceso de compilación lo puedes hacer con cualquiera de los IDEs gratuitos que soportan java, como "Eclipse" o "NetBeans". Tienes que instalarte la máquina virtual de Java para poder ejecutarlo y compilarlo.
el codigo de java q me has puesto, lo pongo en un archivo .java, como lo compilo??? yo no tengo ni idea de java, programo en php y en vb.net
he visto en facturae.es varios archivos, en Componentes Java Xades tienes ejemplos como estos: http://193.146.123.247/aplicaciones/facturae/componentes/0.9beta/Ejemplos.zip el ejemplo que viene para firma xades lo he visto muy completo pero no se como ejecutarlo.
tambien hay un apartado "API Java para Factura electronica" que puedes descargarte la api pero para navegadores mozilla e ie. http://www.facturae.es/Descargas/Desarrollo/API/
ese codigo, o cualquier otro en java para firmar, te permite seleccionar el certificado para firmar?
Gracias
La API de facturae que indicas, da igual para que navegador te lo bajes, tu no lo quieres para uso Web, así que, en principio da igual. Estas distrubuciones vienen con un conjunto de .jar que son como los .dll pero de java. Es decir, son las librerías que tienes que utilizar.
El programa te busca los certificados digitales que tengas instalados en tu equipo y te permite seleccionarlos. -
lunes, 22 de junio de 2009 8:25
En la documentación de la AEAT vienen ejemplos.
por ejemplo, para hacer la firma del fichero C:\Factura.xml sólo necesitas lo siguiente:
try {
java.io.File factura31 = new java.io.File( "C:\\Factura.xml" );
es.mityc.facturae.utils.SignatureUtil.sign(factura31, "C:\\facturaFirmada.xml");
} catch(Exception e){
System.out.println("error" + e.getMessage());
};
El problema es que presenta una ventana para seleccionar el certificado con el que hacer la firma.
Que imports tengo que coger para hacer ese archivo java??? para que firme una FacturaE 3.1 ???
Gracias -
lunes, 22 de junio de 2009 8:37
No tienes por qué poner ninguna clausula "import", ya que las sentencias que has escrito tienen definidos el paquete y la clase Java que vas a utilizar. Lo que si tienes que hacer es añadir las librerias de la aeat al proyecto Java que has montado.En la documentación de la AEAT vienen ejemplos.
por ejemplo, para hacer la firma del fichero C:\Factura.xml sólo necesitas lo siguiente:
try {
java.io.File factura31 = new java.io.File( "C:\\Factura.xml" );
es.mityc.facturae.utils.SignatureUtil.sign(factura31, "C:\\facturaFirmada.xml");
} catch(Exception e){
System.out.println("error" + e.getMessage());
};
El problema es que presenta una ventana para seleccionar el certificado con el que hacer la firma.
Que imports tengo que coger para hacer ese archivo java??? para que firme una FacturaE 3.1 ???
Gracias
En caso de que necesitases importar algo, sería:
import es.mityc.facturae.utils.SignatureUtil; import java.io.File;
-
martes, 23 de junio de 2009 6:29
Vale perfecto, y de todos los archivos .zip que veo en la web de facturae, en que .zip esta el .jar que debo incluir para ese import:
es.mityc.facturae.utils.SignatureUtil;
Gracias -
martes, 23 de junio de 2009 7:21
Vale perfecto, y de todos los archivos .zip que veo en la web de facturae, en que .zip esta el .jar que debo incluir para ese import:
Hay un .jar que se llama "facturae-API.jar", ese es el que tiene las funciones principales. Pero tienes que incluir el resto de librerias de las que depende esta. Vienen en la carpeta "lib" del .zip que te has descargado.
es.mityc.facturae.utils.SignatureUtil;
Gracias
El orden de inserción, de las librerias, en el ClassPath es importante, si no lo pones en el orden correcto, la aplicación falla sin saber por qué. Este orden viene en la documentación "Guía de usuario de la API ", en ella se especifica que FacturaEBridge.jar ha añadirse en el ClassPath antes que Facturae-API_CompPack.jar, y este último se ha de añadir antes que Facturae-API.jar. El ClassPath se define en el archivo "Manifest" que tienen las aplicaciones Java dentro de la carpeta "META-INF". Un ClassPath válido sería:
Class-Path: lib/swing-layout-1.0.3.jar lib/log4j-1.2.15.jar ib/LibXADESJNI_IE_W.jar lib/jsr173_1.0_api.jar lib/jaxb-impl.jar lib/jaxb-api.jar lib/FacturaEBridge.jar lib/Facturae-API_CompPack.jar lib/Facturae-API.jar lib/commons-logging-1.1.jar lib/activation.jar
Espero que te sea de ayuda.
- Editado donyomismo martes, 23 de junio de 2009 7:40
-
miércoles, 24 de junio de 2009 8:58
PERFECTO, ya lo he conseguido hacer.
Genere el .jar con Eclipse con todas las librerias incluidas, con JSmooth lo pase a exe
y en VB tan facil como:
Dim myProcess As Process = Process.Start("Firmar.exe")Asi facil y sencillo.
Muchas gracias -
jueves, 25 de junio de 2009 7:09donyomismo has implementado algo con la función "es.mityc.facturae.utils.SignatureUtil.sign" para validar una firma???
Mi intención es despues de realizar la firma de la factura (esto lo hago perfecto) mostrar un JDialog con los datos del certificado con que se ha firmado (fecha de la firma, sujeto, emisor, validez). Y tambien implementar esto en las facturas recibidas.
Saludos -
jueves, 25 de junio de 2009 8:08
Sí, pero no es esa la fución que deberías utilizar, sino "es.mityc.facturae.utils.SignatureUtil.validateSignature".
Por ejemplo, si se tiene la url del xml que se acaba de firmar, en la variable "firmaPath", con el siguiente código accederíamos a los datos de la firma.
java.util.Map<String,Object> mapa=es.mityc.facturae.utils.SignatureUtil.validateSignature(new java.io.File(firmaPath));
El resultado de la funcion es un mapa (pares <clave:valor>) que contiene datos sobre la firma realizada. Normalmente contiene:
- clave: "sign.roles " --> valor: ArrayList de String con los diferentes roles
- clave: "sign.certificate " --> valor: Objeto del tipo "X509CertImpl" con los datos del certificado con el que se firmó. (En el campo "subject" del campo "info" del certificado puedes obtener los datos del firmante)
- clave: "sign.xades.schema " --> valor: String con versión del esquema de la firma
- clave: "sign.policy " --> valor: String con el esquema de factura
Un saludo.
-
jueves, 25 de junio de 2009 11:14
Vale, he puesto esa función y pruebo a hacer un:
System.out.print(mapa.get("sign.certificate"));Y me muestra por consola todos los datos del certificado bien, y si la firma es inválida lo mete como null. Hasta aqui todo OK.
¿Cómo convierto el "mapa.get("sign.certificate")" a un X509Certificate o como saco la info de ese object?
Otra cosa, he sacado la fecha de la firma con: mapa.get("sign.date").toString() tiene esta forma: "Thu Jun 25 11:16:54 CEST 2009" como la "traduzco" o la pongo en formato "dd/mm/yy hh:mm:ss"???
Gracias por la ayuda. -
jueves, 25 de junio de 2009 12:05
Bueno, para convertir de un objeto a otro, en Java, se utiliza la técnica de Casting, por ejemplo, para el certificado:
Object o =mapa.get("sign.certificate"); sun.security.x509.X509CertImpl cert = (sun.security.x509.X509CertImpl)o;
Para acceder a los datos de este objeto "cert" se deberían de tener ciertas nociones (aunque no hacen falta muchas) de la estructura de certficados X509. Si se observan los métodos de esta clase puede verse como acceder a los datos.
Para la fecha, lo suyo es utilizar la clase SimpleDateFormate, que permite parsear fechas. El código sería:
java.util.Date fecha= (java.util.Date)mapa.get("sign.date"); java.text.SimpleDateFormat sdf= new java.text.SimpleDateFormat("dd/MM/yy HH:mm:ss"); String cadena_fecha= sdf.format(fecha);En "cadena_fecha" se tendría la fecha en formato legible "dd/mm/yy hh:mm:ss".
A ver si sirve. -
lunes, 06 de julio de 2009 16:35En la web de http://www.gtfacturae.com tienes la solución, se trata de una libreria para .net que es capaz de leer, cargar , firmar y validar facturas electronicas en los formatos facturae 3.0-3.1-3.2.
Un saludo -
martes, 14 de julio de 2009 10:04El componente de gtfacturae.com no es .NET puro, requiere registro vía regasm (para COM-ActiveX)...
Saludos. -
miércoles, 15 de julio de 2009 13:17Hola, Alhambra. El componente es 100% .NET. Implementado con C#.
Otra cosa es que exponga interfaces COM .
Si quieres usarlo desde lenguajes Activex-COM como VB6 entonces si que deberas registralo mediante regasm.
Pero si lo vas a utilizar desde una aplicación .NEt no hace falta registrarlo.
Salu2. -
viernes, 24 de julio de 2009 9:46Hola, yo hasta ahora programaba en VB6 y en mi empresa quieren hacer algo para emitir facturae y firmarla que es lo que habeis hecho aqui. El problema es que el gtfacturae es de pago y yo no tengo ni idea de Java ni XML asi que me tengo que poner las pilas.
¿Hay alguien que haya hecho algo libre? Si es asi la podria colgar de rapidshare o megaupload, por favor.
Sobre todo si es en VB .Net porque asi le diria a mi jefe que me tengo que enseñar esa plataforma (es mas facil aprenderla que Java si vienes de VB6).
Gracias y un saludo. -
lunes, 27 de julio de 2009 7:11Hola Juanen, te informo que voy a distribuir la libreria gratuitamente. Esta tarde cuando llegue del trabajo pongo la versión totalmente libre para que la puedas descargar y puedas generar facturas desde vb6 o .net . You choose!
Un saludo. -
lunes, 27 de julio de 2009 7:25buenas a todos, efectivamente no se que está pensando microsoft en cuanto al tema de las firmas digitales y la facturae, mi empresa ha tenido que crear un módulo en java a partir de la librería cryptoapplet http://projectestic.uji.es/pr/cryptoapplet/ open source que permite trabajar con certificados, es facil de integrar en .net y el módulo desarrollado para facturae en breve será codigo abierto, mientras tanto podeis ir probando cryptoapplet...
por ciertoGabriel Tame dijo que su librería sería codigo abierto pero sigue siendo de pago, alguna aclaración Gabriel?
-
lunes, 27 de julio de 2009 7:56
Señor, ¿a qué librería se refiere ?, cuál será la web de descarga de la librería que usted cita ?
A ver si Microsoft coge el guante y puede desarrollar controles para Facturae, Firma Digital, DNI electrónico...
Saludos y gracias -
lunes, 27 de julio de 2009 8:55Muchísimas gracias Gabriel, esta tarde o mañana las descargaré.
Un saludo. -
martes, 28 de julio de 2009 6:20Señor LuisMolina,
Cómo se integra
http://projectestic.uji.es/pr/cryptoapplet/
en .NET ? algún ejemplo de código?
Y dónde se podrá descargar el módulo desarrollado para facturae de codigo abierto ?
Gracias y saludos. -
martes, 28 de julio de 2009 7:09Lo primero dar las gracias a Gabriel ya que ya se puede descargar el programa. El .Net todavia no lo tengo instalado así que lo miraré en los próximos días.
Yo por ahora aun estoy con la versión de Java. Pero como este lenguaje no lo controlo no se como utilizar la libreria Facturae-API.jar
Por ejemplo me podrian poner el codigo para firmar una factura porque no me aclaro, yo he puesto en el main:
java.io.File factura31 = new java.io.File( "C:/Factura Electronica/borrador3.xml" );
es.mityc.facturae.utils.SignatureUtil.sign(factura31, "C:/Factura Electronica/borrador3f.xml");
¿Pero me da error. Cual es la forma correcta? -
martes, 28 de julio de 2009 7:39¿Puede ser porque no tenga instalado el certificado?
Tampoco me deja validar como pone en la documentacion:
java.io.File factura31 = new java.io.File( "C:/Factura Electronica/factura_ejemplo_31.xml" );
java.util.Map b = es.mityc.facturae.utils.SignatureUtil.validateSignature(factura31);
El error que me da es:
at es.mityc.facturae.utils.SignatureUtil.validateSignature(Unknown Source)
Tampoco entiendo porque hay que utilizar la clase Map para recoger la validacion cuando seria un boolean (si pongo boolean me da error)
¿Alguien tiene algo en Java? -
martes, 28 de julio de 2009 16:31
Hay un .jar que se llama "facturae-API.jar", ese es el que tiene las funciones principales. Pero tienes que incluir el resto de librerias de las que depende esta. Vienen en la carpeta "lib" del .zip que te has descargado.
El orden de inserción, de las librerias, en el ClassPath es importante, si no lo pones en el orden correcto, la aplicación falla sin saber por qué. Este orden viene en la documentación "Guía de usuario de la API ", en ella se especifica que FacturaEBridge.jar ha añadirse en el ClassPath antes que Facturae-API_CompPack.jar, y este último se ha de añadir antes que Facturae-API.jar. El ClassPath se define en el archivo "Manifest" que tienen las aplicaciones Java dentro de la carpeta "META-INF". Un ClassPath válido sería:
Espero que te sea de ayuda.Class-Path: lib/swing-layout-1.0.3.jar
lib/log4j-1.2.15.jar
ib/LibXADESJNI_IE_W.jar
lib/jsr173_1.0_api.jar
lib/jaxb-impl.jar
lib/jaxb-api.jar
lib/FacturaEBridge.jar
lib/Facturae-API_CompPack.jar
lib/Facturae-API.jar
lib/commons-logging-1.1.jar
lib/activation.jar
Quizás el error te de porque no has hecho eso.
En otro comentario, un poco más arriba, explico por qué es un mapa lo que devuelve la función de validación. Copio lo que dije:
java.util.Map<String,Object> mapa=es.mityc.facturae.utils.SignatureUtil.validateSignature(new java.io.File(firmaPath));
El resultado de la funcion es un mapa (pares <clave:valor>) que contiene datos sobre la firma realizada. Normalmente contiene:
- clave: "sign.roles " --> valor: ArrayList de String con los diferentes roles
- clave: "sign.certificate " --> valor: Objeto del tipo "X509CertImpl" con los datos del certificado con el que se firmó. (En el campo "subject" del campo "info" del certificado puedes obtener los datos del firmante)
- clave: "sign.xades.schema " --> valor: String con versión del esquema de la firma
- clave: "sign.policy " --> valor: String con el esquema de factura
Un saludo. -
miércoles, 29 de julio de 2009 6:44
Yo creo que esta todo bien y sigue sin funcionar.
Lo del classpath, eso es (en el Net Beans) pinchando con el boton derecho en bibliotecas y seleccionando propiedades. Y luego, en la pestaña de compilar, añades los jar en el orden que me has puesto. Y no va.
El codigo es:package pr1; public class Main { public static void main(String[] args) { String ruta="C:\\BDINESCOP\\Factura Electronica\\Java Api\\Api\\Facturas\\"; java.io.File factura3 = new java.io.File( "C:\\BDINESCOP\\Factura Electronica\\Java Api\\Api\\Facturas\\borrador3.xml" ); //es.mityc.facturae.utils.SignatureUtil.sign(factura3, "C:\\BDINESCOP\\Factura Electronica\\Java Api\\Api\\Facturas\\borrador3f.xml"); java.util.Map<String,Object> mapa = es.mityc.facturae.utils.SignatureUtil.validateSignature(new java.io.File(ruta + "factura_ejemplo_31.xml")); } }Y el error que me da:
run:
Exception in thread "main" java.lang.NullPointerException
at es.mityc.facturae.utils.SignatureUtil.validateSignature(Unknown Source)
at es.mityc.facturae.utils.SignatureUtil.validateSignature(Unknown Source)
at pr1.Main.main(Main.java:25)
Java Result: 1
GENERACIÓN CORRECTA (total time: 1 second)
Sin embargo, otras funciones como:
es.mityc.facturae30.Facturae fact = null;
fact = es.mityc.facturae.utils.UnmarshallerUtil.unmarshal30(factura3)
si que me funcionan. Pero la de validar firma y firmar, no.
Estoy desesperado, tiene que ser alguna chorrada. -
miércoles, 29 de julio de 2009 7:04Tambien veo que al final de la documentacion pone:
-------------------------------------------------------------------------------------------
Para configurar el componente de firma a utilizar habrá que incluir un recurso con nombre
“sign.properties” anterior al bridge (FacturaEBridge.jar) en el classpath de la aplicación. Habrá que
definir la propiedad “facade.sign.class” indicando la clase que implementa la interfaz del “bridge”.
Por defecto, se utilizan los componentes de firma desarrollados por MITyC (versión 0.9). El
fichero “sign.properties” contiene:
facade.sign.class = es.mityc.facturae.sign.comp09beta.SignMITyCComp09betaFacade
----------------------------------------------------------------------------------------------------
No se como se hace ni para que sirve.
Yo tengo instalado un certificado de prueba que me ha creado un compañero, no se si eso tendra algo que ver. -
miércoles, 29 de julio de 2009 7:39Creo que deberias revisar eso del orden de importación de las librerías, quizás si las pones en orden inverso funcione, ya que, el entorno que yo usé para la generación del ClassPath, es posible que lo hiciera.
Si no te funciona lo anterior, trata de ejecutarlo en otro entorno por ejemplo Eclipse o, sino te lo quieres instalar, puedes hacer lo siguiente:
- Genera el .jar ejecutable de la aplicación que has desarrollado.
- Abre el .jar con WinZip o WinRar.
- Dentro de la carpeta META-INF, abre en Manifest.MF para modificarlo
- Verifica que el orden de importación de las librerías es correcto, y sino, modificalo para que lo sea.
Te copio aquí el ClassPath completo que utiliza mi aplicación:
"
Manifest-Version: 1.0
Main-Class: es.corp.facturae.firma.FirmaFacturae
Class-Path: lib/swing-layout-1.0.3.jar lib/log4j-1.2.15.jar lib/LibXADESJNI_IE_W.jar lib/jsr173_1.0_api.jar lib/jaxb-impl.jar lib/jaxb-api.jar lib/Facturae-API.jar lib/Facturae-API_CompPack.jar lib/FacturaEBridge.jar lib/commons-logging-1.1.jar lib/activation.jar
"
A ver si se soluciona. -
miércoles, 29 de julio de 2009 7:41Si alguien lo tiene hecho y me puede mandar un zip con el proyecto para netbeans o eclipse, me serviria de ayuda. Solo un main donde se firme una factura. Por favor.
Mi correo es eljuanen@hotmail.com
Muchas gracias. -
miércoles, 29 de julio de 2009 7:51Me encantaría enviártelo, pero al trabajar en una empresa, no puedo.
El código que has mandado antes es correcto, muy similar al mío, lo he probado, y tu error sólo lo consigo simular si cambio el orden de las importación de librerías del ClassPath, así que supongo que tiene que ser eso.
Con respecto a lo que antes has comentado, lo de modifcar el sign.properties, eso sirve para utilizar un componente de firma diferente al por defecto. Es útil cuando ya dispones de una aplicación que realiza la firma, el problema es que tienes que implentar los métodos del "bridge". No lo he tenido que hacer, pero no parece ser muy tedioso. -
miércoles, 29 de julio de 2009 9:17J o d e r, si que era el classpath.
Me fijaba en lo que se puso arriba:
lib/jaxb-api.jar
lib/FacturaEBridge.jar
lib/Facturae-API_CompPack.jar
lib/Facturae-API.jar
lib/commons-logging-1.1.jar
y habia que meterlo al reves:
lib/jaxb-api.jar
lib/Facturae-API.jar
lib/Facturae-API_CompPack.jar
lib/FacturaEBridge.jar
lib/commons-logging-1.1.jar
Muchas gracias por no abandonarme y probarlo en tu equipo.
Un saludo y muchisimas gracias de verdad. -
martes, 25 de agosto de 2009 14:44
Vale ya voy haciendo cosas.
He conseguido firmar las facturas, ahora el problema viene al validarlas.
Tengo un certificado oficial y otro que me ha creado un colega. La aplicacion java me deja firmar con ambos certificados y me da una validacion correcta de ambas facturas.
Pero en la pagina http://www11.mityc.es/FacturaE/index.jsp donde se pueden validar las facturas, con la del certificado de mi colega me da el siguiente error en firma electronica:
**El certificado firmante no está recogido en los apartados a) ó c) del artículo 18 del Reglamento que está recogido en R.D. 1496/2003 del 28 de Noviembre
Política inválida: Política de Firma FacturaE v3.1
Cosa normal ya que el certificado que me ha creado mi amigo puede no ser valido. Pero entonces, ¿porque la funcion validateSignature no me da error y me devuelve el map correctamente:
--------------------------------------------------------------------------------------------------------------------
MAP
sign.roles=[emisor], sign.date=Tue Aug 25 11:29:19 CEST 2009, sign.certificate=[
[
Version: V3
Subject: EMAILADDRESS=info@loquesea.es, CN=empFacturaE3, OU=emp-Elda, O=INOP, L=Elda, ST=Alicante, C=ES
Signature Algorithm: MD5withRSA, OID = 1.2.840.113549.1.1.4Key: Sun RSA public key, 1024 bits
modulus: 131489391713605631131070413656636761739955076597139767502100967637917791305695146199016613982397690261003228609282512810524385096749816233366285681094983923081655785765251963757316141601686764029274874278219501030049070257099579537000963123656398370711879768637747362628490852160843771266205954984562461713351
public exponent: 65537
Validity: [From: Thu Jul 30 11:16:46 CEST 2009,
To: Sat Jul 30 11:16:46 CEST 2011]
...sign.xades.schema=1.3.2, sign.policy=facturae31
etc...
----------------------------------------------------------------------------------------------------------------------------------
¿Por que no me da error la funcion y la web de la AEAT si?- Editado El Juanen martes, 25 de agosto de 2009 14:47
-
miércoles, 26 de agosto de 2009 11:00Hola Juanen.
La clase Java te valida que es una firma Xades correcta , pero no valida via OCSP el certificado firmante, mientras que la web de la AEAT hace una validacion OCSP para comprobar la validez del certificado.
Un saludo. -
miércoles, 26 de agosto de 2009 11:02LuisMolina.
No dije codigo abierto, dije que la puedes usar libremente sin ningún tipo de tasa. cargo etc, pero el código no lo público. -
jueves, 27 de agosto de 2009 9:32Hola Gabriel y efectivamente el error es por lo que comentas.
La parte de java, ya tengo, gracias a vuestra ayuda, lo poco que me hacia falta: firmar y validar. Con eso el de internet, en caso que finalmente lo hagamos por web, ya puede crear un applet.
Mi jefe quiere ahora que le haga un aaplicacion tipo a la de la camara de comercio: http://www.camarafactura.es/fe/cas/index.php
La quiere en Access (con su programacion en VB) para los formularios y con SQL Server como base de datos (esta es nuestra forma de trabajar. Asi que me viene al pelo lo que has desarrollado Gabriel. Como veo que has puesto gratis las librerias dll y tbl, supongo que las puedo utilizar y ademas ayudarme del ejemplo que has creado en Access. Muchiiiiiiiiiiiiisimas gracias por todo.
Ahora tengo un par de problemas debido a que soy un poco novato en esto de la programacion (no soy novato ya que soy ingeniero, pero me he pasado años trabajando como tecnico hasta que he encontrado curro de programador que es lo que me gusta, y aunque se me da bien crear codigo, estoy muy verde en temas de librerias, imports, instaladores...):
1 - Para poder utilizar las clases que has desarrollado hay que enlazar con la libreria tbl y con el pdfcreator. esto se hace en la parte de VB del Access en Herramientas->Referencias. Bien, mi duda es que si no sabemos donde va a instalar el usuario el pdfcreator ¿como podemos enlzarlo? ¿Hay que obligarle a que lo instale donde digamos?
¿Con la libreria tbl igual? O hay una forma de indicarle que la ruta es relativa y que la libreria estara donde este el ejecutable de Access (mdb o adp).
¿Y con las otras librerias dll, se ponen en la misma carpeta que la tbl y ya esta o hay que registrarlas de alguna manera?
Se que una de ellas se registra asi:
regasm.exe /codebase Ruta\GTFacturae.dll
asi que pondria una linea de codigo que en la primera ejecucion hiciese eso, pero y con la libreria itextsharp.dll, ¿hay que hacer algo?
2 - ¿Se le puede dar al usuario la oportunidad de que se le abra un dialog con los certificados instalados en el IExplorer y que elija con cual quiere firmar?. Es que con la funcion file.LoadCertificado le pasas un ruta, pero no se le abre (como en java) una ventana con los certificados instalados y sus caracteristicas (a malas le abro un dialog y que elija el fichero de certificado y ya esta, aunque no podria ver sus caracteristicas).
Bueno gabriel, muchas gracias por todo y si alguna vez tienes alguna duda de triggers o consultas en sql (porque en programacion dudo que tengas algo que preguntarme) mandame un mail y te ayudare todo lo que pueda.
Un saludo. -
jueves, 27 de agosto de 2009 10:41Hola Juanen,
Sobre tus dudas:
Quiero aclarar que el pdf creator no es necesario para generar XML ni realizar firmas, unicamente lo use en los ejemplos para generar los informes a pdf.
1-
Las librerias COM que trae PdfCreator se registran automáticamente con el instalador de pdfcreator. Por lo que tu no necesitas saber sobre que directorio esta instalado PDFCreator. Tus objetos COM de esas librerias se crearán sin ningún problema, si pdf esta instalado en el sistema.
GTFacturae.dll pueda ser utilizado desde un lenguaje que soporte COM hay que registrarlo como tu has indicado utilizando regasm.exe ya que se trata de una libreria desarrollada con .NET pero con interoperabilidad con COM.
GTFacturae.tlb es el archivo type library, este archivo define las clases, enumeracion etc, que COM utiliza.No hace falta hacerle nada.
ItextSharp.dll no necesita ser registrado pero deberá estar situado en la misma ruta que GTFacturae.dll o registrarlo en el gac (Global cache assembly)
Para todo el tema de registros de librerias lo debes hacer inicialmente solo una vez, y no desde el 'codigo' de tu programa, utiliza un instalador o de manera mas casera un .bat o manualmente.
Para registrar librerias COM puras utilizas regsvr32.exe, para librerias .NET con interoperabilidad COM regasm.exe
2-
Puede que algún día lo implemente, pero puedes crearte tu tu propia clase para ello, en la msdn tienes un articulo para poder acceder a los certificados almacenados.
http://msdn.microsoft.com/es-es/library/ms229744.aspx
Espero haberte ayudado en algo.
Un saludo , y gracias por ofrecerme tu ayuda.
-
viernes, 28 de agosto de 2009 7:34
Muchas gracias por todo Gabriel.
Un saludo. -
martes, 01 de septiembre de 2009 10:56Ufff, espero que aun leas el foro Gabriel.
He empezado a escribir la aplicacion en Access y cuando he ido a utilizar tu clase Facturae me he encontrado con que la funcion Facturae.CargaFactura no existe. Yo lo que tengo es una factura en xml con formato 3.1 ¿Como puedo leerla en VB para crear el objeto Facturae si la funcion no esta implementada?
Un saludo -
martes, 01 de septiembre de 2009 13:50Ufff, espero que aun leas el foro Gabriel.
He empezado a escribir la aplicacion en Access y cuando he ido a utilizar tu clase Facturae me he encontrado con que la funcion Facturae.CargaFactura no existe. Yo lo que tengo es una factura en xml con formato 3.1 ¿Como puedo leerla en VB para crear el objeto Facturae si la funcion no esta implementada?
Un saludo
---------------------------------------------------------------------------------------------------------------------------------
Tampoco esta implementada la funcion VerificarFirma, asi que tampoco puedo ver si una factura xml esta firmada correctamente.
---------------------------------------------------------------------------------------------------------------------------------
Creo que es porque has declarado las funciones como estaticas. Entonces, ¿lo unico que podemos hacer con tus librerias es firmar una factura? Ademas me da un error al crear el objeto Facturae ("No se puede crear el objeto Active X"), supongo que es algo de las librerias. Al final me vuelvo a Java que tenemos todas las funciones implementadas, me toca revisarme el lenguaje. Saludos -
miércoles, 02 de septiembre de 2009 9:53Hola ElJuanen.
Tienes razón, al estar implementados esos metodos como static no puedes acceder a ellos via COM. He subido una nueva versión a la página web, con dos nuevos metodos Facturae.CargaFacturaCOM && Facturae.VerificarFirmaCOM. Para que puedas utilizarlo desde VB.
El mensaje "No se puede crear el objeto Active X" o es porque la libreria no esta correctamente registrada con Regasm.exe o porque no la has referenciado desde tu código, se puede hacer desde el menuHerramientas -> Referencias.
Un saludo. -
miércoles, 23 de septiembre de 2009 8:45Gracias por todo Gabriel.
De todas formas estoy realizando la programacion en java.
Tenga ya bastante desarrollado, por si alguien tiene alguna duda, que pregunte.
Yo ahora estoy investigando a ver si consigo valisdar por completo un factura. Hasta ahora la puedo validar el formato (que tenga formato 3.0 o 3.1), la contabilidad y la firma.
Pero quiero que realice validacion completa (prestador admitido y estado del certificado) como se hace desde:
http://www11.mityc.es/FacturaE/index.jsp
Quiero que el programa compruebe que una factura tiene validez completa. Estoy investigando sobre ocsp.
A ver que consigo.
Saludos. -
miércoles, 30 de septiembre de 2009 9:37
sr. Juanen, alguna novedad sobre la validación ?? saludos y gracias
-
miércoles, 30 de septiembre de 2009 10:12
No se donde teneis el problema acerca de hacer la validación ocsp con Java. En las librerias facilitadas en el mityc teneis las clases necesarias para hacerlo incluyendo ejemplos.
También podeís obtener otras clases con las que podeis realizar la validación facilmente como por ejemplo:
http://www.viafirma.org/xref/org/viafirma/nucleo/validacion/OcspValidatorHandler.html
Espero que os facilite el tema, por cierto he añadido a mis librerias .net soporte para la validación via OCSP.
Un ejemplo de source para cargar los datos de la factura, validar firma y por ocsp una factura. Si quisieramos realizar tambien validacion de Schema y contable simplemente deberiamos llamar al metodo Validar() de la clase facturae.
//URL Servidor OCSP const string URL_OCSP_CAMERFIRMA = "http://ocsp.camerfirma.com"; //Cargamos la factura y sus datos.. Facturae factContainer=Facturae.CargaFactura((@"D:\firma.xml"));Un saludo.
//Verificamos firma correcta if (factContainer.VerificarFirma()) { //--OCSP-- //Añadimos certificados de confianza factContainer.AddCertificadoConfianza(@"D:\certificadosCA\camer3.cer"); factContainer.AddCertificadoConfianza(@"D:\certificadosCA\camer4.cer"); //Validamos if (factContainer.ValidarOCSP(URL_OCSP_CAMERFIRMA)== OcspValidator.CodigoError.OK_CERTIFICADO_VALIDADO) MessageBox.Show("La validación OCSP se realizo correctamente"); else MessageBox.Show("+ info en el fichero de bug ocsp_log.txt"); } //Limpiamos objeto factContainer = null; -
miércoles, 07 de octubre de 2009 13:17Pongo lo que he hecho yo (bueno es casi todo del MITyC) en Java:
-----------------------------------------------------------------------------------------------------------------------------
Ha salido mal. Vuelvo a probar. -
miércoles, 07 de octubre de 2009 13:21
Esto es lo que he hecho yo basandome en lo del MITyC
-------------------------------------------------------------------------------------------------------
import java.net.Authenticator;
import java.security.cert.CertificateException;import java.security.cert.X509Certificate;
import es.mityc.firmaJava.ocsp.OCSPCliente;
import es.mityc.firmaJava.ocsp.OCSPClienteError;
import es.mityc.firmaJava.ocsp.OCSPProxyException;
import es.mityc.firmaJava.ocsp.RespuestaOCSP;/**
* Clase de ejemplo para la petición de una validación de certificado contra un servidor OCSP
* utilizando la librería OCSP
*
* @author Ministerio de Industria, Turismo y Comercio
* @version 0.9 beta
*/public class OCSP {
// Dirección del servidor OCSP
final private static String OCSP_SERVER = "http://ocsp.camerfirma.com";
//"Escriba aqui la URL del servidor OCSP";
// Parámetros para proxy
final private static boolean USAR_PROXY = false;
final private static boolean IS_PROXY_AUTH = false;
final private static String PROXY_USER = "";
final private static String PROXY_PASS = "";
final private static String PROXY_SERVER ="";
final private static int PROXY_PORT = 0;
public static void main (String[] args){
OCSP p = new OCSP();
p.validacionOCSP();
}/**
* Implementación de la consulta OCSP de certificados empleando la librería "LibreriaOCSP"
*/
private void validacionOCSP() {
// Se instancia la estructura que alacenará la respuesta del servidor OCSP
RespuestaOCSP respuesta = new RespuestaOCSP();
respuesta.setNroRespuesta(-1);
try
{
OCSPCliente ocspCliente = null;
X509Certificate cert = null;// Se parsea el certificado a chequear
cert = obtenerCertificadoPrueba();// Se configura el uso, si existe, de proxy, proxy autenticado o conexión directa
if (OCSP_SERVER != null && !OCSP_SERVER.trim().equals(""))
{
if(USAR_PROXY) {
System.setProperty("http.proxyHost", PROXY_SERVER);
System.setProperty("http.proxyPort", Integer.toString(PROXY_PORT));
if (IS_PROXY_AUTH) {
Authenticator.setDefault(new SimpleAuthenticator(PROXY_USER, PROXY_PASS));
}
else {
Authenticator.setDefault(null);
}
}
// Se instancia la clase OCSPCliente, proporcionando la URL del servidor OCSP
ocspCliente = new OCSPCliente(OCSP_SERVER);// Se realiza la consulta
respuesta = ocspCliente.validateCert(cert);
}
}
catch (OCSPClienteError ex) {
ex.printStackTrace();
}
catch (OCSPProxyException e) {
e.printStackTrace();
}
// Mostramos el resultado por consola
System.out.println("---------------------------");
System.out.println("------ RESULTADO ----------");
System.out.println("---------------------------");
if (respuesta != null) {
System.out.println("Numero Respuesta " + respuesta.getNroRespuesta());
System.out.println("Mensaje Respuesta " + respuesta.getMensajeRespuesta());
} else {
System.out.println("Hubo un error al contactar con el servidor OCSP " + OCSP_SERVER);
}
}/**
* Clase para capturar el certificado incuido en resources
* @return El certificado de tipo X509Certificate
* @throws CertificateException
*/
private X509Certificate obtenerCertificadoPrueba() {
X509Certificate x509cert = null;
////////////////////////////////////////
java.io.File factura = new java.io.File("C:\\Facturas\\josef.xml");
java.util.Map<String, Object> result = es.mityc.facturae.utils.SignatureUtil.validateSignature(factura);
if (result.containsKey("sign.certificate")){
x509cert = (X509Certificate) result.get("sign.certificate");
}
return x509cert;
}
} -
miércoles, 07 de octubre de 2009 13:24Solo tienes que cambiar en la linea (esta casi al final):
java.io.File factura = new java.io.File("C:\\Facturas\\josef.xml");
y poner la ruta donde esta la factura que contiene la firma que queremos validar por ocsp
Para cambiar el servidor ocsp lo haces desde:
final private static String OCSP_SERVER = "http://ocsp.camerfirma.com";
Un saludo. -
miércoles, 07 de octubre de 2009 13:40Solo me falta poder probarlo con una factura valida.
Yo las que tengo no tienen aun el certificado de camerfirma (aun no lo han comprado) asi que no puedo validar ninguna. Las que tengo firmadas son por el fnmt que camerfirma me devuelve:
2 - Estado desconocido.
Y en el ocsp del mityc tampoco las puedo validar.
Si alguien tuviese una factura firmada con un dni electronico o con un certificado de camerfirma (que sea bueno, no de estos de prueba), si que podria comprobar si funciona. Asi que si alguien se presta a poner una factura de estas para descargar, se podria comprobar. Si alguien quiere ceder alguna, por favor, que lo ponga en este foro.
Ademas si no tiene factura pero si dni electronico y no sabe como crear una factura y firmarla, desde la siguiente web te dejan crear una y firmarla con los certificados que tengas disponibles (ademas de forma muy sencilla):
http://www.hazteunafacturae.com/
Gracias y un saludo a todos (especialmente a ti, Gabriel, que no paras de ayudarnos). -
miércoles, 07 de octubre de 2009 13:50Algún ejemplo para hacer la validacionOCSP() en .NET (C#) ?? Quería con servidores OCSP de la DGP.
Gracias y saludos. -
miércoles, 07 de octubre de 2009 16:31No por mi parte. Yo lo tengo todo en java
Pero Gabriel ha puesto un ejemplo en .Net antes de mis posts.
Mañana te busco el ocsp de la DGP que lo tengo en el curro.
¿Tienes alguna factura firmada que me pueas pasar?
Saludos. -
jueves, 08 de octubre de 2009 7:35Buenos días.
Si no lo quieres hacer con mi librería , te recomiendo que utilices bouncycastle c#, es gratuita y tienes objetos para crear request y reponses de acuerdo con la rfc que trabajan los servidores OCSP.
+ Info: http://www.bouncycastle.org/csharp/
Un saludo y suerte. -
miércoles, 14 de octubre de 2009 19:17Hola a todos:
Estoy un poco desesperada. he entrado hace poco en una emrpesa de software y el primer encargo ha sido el de realizar un programa para facturación electrónica según el formato de la AEAT.
Es mi primer trabajo y quiero quedar bien, pero tengo algunas dudas:
He seguido vuestros comentario en el foro y creo que estais utilizando la biblioteca de la AEAT sobre la factura en java. Pero esa biblioteca genera firmas básicas. Lo que necesito es una firma XAdES X-L con información de validación.
De dónde se obtiene esa información sobre los certificados? Alguno de vosotros lo ha hecho así?
Otra consulta es que tengo que incluirle un sello de tiempo. Conoceis alguna Autoridad que lo suministre?
En fin, estoy un poco nerviosa también porque no he contribuido nunca.
Espero vuestra respuesta
Un saludo.
Violeta. -
jueves, 15 de octubre de 2009 13:15Yo ahora mismo estoy investigando sobre ello.
Voy a mandar un mail a Camerfirma, Tractis, FNMyT... a ver si ellos ofrecen certificados XAdES X-L y si se pueden firmar las facturas con estos certificados desde las librerias java de la AEAT.
Si me entero de algo te aviso. Y si te enteras tu, postealo aqui.
Saludos -
viernes, 16 de octubre de 2009 18:48Gracias, sigo investigando a ver si encuentro algo.
Sobre el sello de tiempo , alguien sabe como incluirlo?.
Sakudos y muchas gracias por adelantado. -
martes, 20 de octubre de 2009 7:55Buenos dias,
Respondiendo a tu pregunta de Autoridades que suministren sellos de tiempo, EADTrust dispone de una TSA que se dedica a ello.
Si quieres mas información consulta en su pagina web:
http://www.eadtrust.net/servicios/timestamping/
Un saludo -
jueves, 22 de octubre de 2009 18:20Hola Buenas,
Retomando a la pregunta del inicio del hilo.
Tengo el mismo problema de GABRIEL_UY, las clases .net obvian el prefix ds, y la firma no es validada por el Servidor Java.
LLevo ya tiempo dandole vueltas al problema y al final la solución a sido pedir ayuda a un desarrollador Java.
Seria a partir de conseguir la firma en java, posteriormente el problema de integrar la libreria, se me ocurren dos formas posibles:
1. Crear un Servicio Web Pasarela en Java levantado en mi maquina en Axis que consuma la seguridad.
2. Es algo mas loco, pero seria provar las librerias de interoperabilidas con Java ikvm que me permitieran integrar librerias java en .NET
Todo esto lo vamos a intentar en adelante y ya os ire contando de los resultados.
Un saludo -
viernes, 23 de octubre de 2009 6:21Gabriel: ante todo mi agradecimiento, me ha servido tu librería, tanto en VB como en ASP.NET. Hace tiempo hice un programa de facturación en ASP clásico (3.0) y ahora le añadí una opción para firmar la factura digitalmente. Paso la factura a XML facturae v3.1 y con tu librería y una página ASP.NET la firmo con un certificado que tengo de la FNMT. Todo funciona de maravilla pues validdo las facturas exitosamente en la web de facturae de la AEAT. Quien quiera código (funciones para pasar texto a UTF-8) no tiene más que decirlo, dicho sea con modestia pues estoy entre maestros y yo soy un poco dinosaurio anquilosado, de la época de DBaseIII, allá por 1988.
Mi problema actual radica en PDFCreator cuando funciona en servidor IIS 5. Con el server del Visual Studio va perfectamente, pero con el IIS 5 la página se queda colgada, sin marcar error alguno, cuando llega a PDFCreator.cSart. He dado permisos amplios al usuario ASP.NET y al IUSR_ , modificado y reiniciado el MDM (Machine Debug MANAGER). He leído casos parecidos en distintos foros pero sin la respuesta adecuada. No salgo del problema.
Gracias de antemano por la atención y deciros que he visto pocos foros tan magistrales como éste de los certificados digitales. -
martes, 27 de octubre de 2009 8:25Mas problemas, a ver si me podeis ayudar:
Yo quiero instalar mi aplicacion .jar en los equipos de los usuarios y en el servidor, la Base de Datos.
El funcionamiento seria el siguiente:
1- El usuario elije una factura (archivo xml) que esta en su equipo para importarlo al servidor.
2- La aplicacion .jar se conecta al servidor para que el usuario gestione facturas (mediante instrucciones SQL insertamos, eliminamos y modificamos facturas, datos de empresas, usuarios...)
3- El usuario debe poder firmar facturas (que estan en una carpeta del servidor).
PROBLEMAS
1- Si el archivo xml esta en el equipo del usuario, ¿como lo puedo llevar al servidor? Se podria hacer si compartiese la carpeta del servidor donde almaceno las facturas, pero entonces el usario (como tendria permiso) podria acceder DESDE FUERA DEL PROGRAMA .JAR a esa carpeta (y eso NO es correcto ni SEGURO).
3- ¿Como puedo firmar o leer una factura que esta en el servidor? Tendria el mismo problema de arriba, que tendria que compartir la carpeta del servidor (INSEGURIDAD).
Creo que para arreglar esto tendria que utilizar sockets o algo asi, pero esto no lo toco desde mis años de estudiante y no recuerdo nada.
Otra solucion seria situar el .JAR en el servidor y ejecutarlo por red, pero eso saturaria el servidor innecesariamente y, ademas, el certificado para firmar las facturas se instalara en los equipos de los usuarios.
Bueno, a ver si alguien me puede dar pistas de por donde continuar.
Saludos -
martes, 27 de octubre de 2009 8:32Una aclaracion, para conectarme a la Base de Datos del servidor (MS SQL Server), utilizo un usuario y contraseña. Pero claro, cuando accedo a una carpeta compartida creandome un objeto de tipo File desde mi aplicacion Java, tomaria mi usuario y contraseña de Windows. Si hubiese una forma de cambiar el acceso desde Java a esa carpeta, para que en lugar del usuario de Windows tomase un usuario y contraseña que yo especificase (el mismo con el que accedo al SQL Server), todo quedaría arreglado.
Saludos. -
martes, 27 de octubre de 2009 9:19Una ultima opcion que creo que bva a ser la que vamos a tomar, seria la de en lugar de almacenar los archivos xml en una carpeta del servidor, hacerlo en la Base de Datos. Es decir, al importar una factura, lo que hariamos es grabarla en el SQL Server en un campo de tipo varbinary o algo asi.
¿Que os parece?
¿Como lo podria hacer?
¿Conoceis alguna funcion para encriptar y desencriptar desde SQL o desde Java (lo hariamos antes de grabar la factura) la factura?
Saludos. -
miércoles, 28 de octubre de 2009 19:01Hola,
algún ejemplo completo con C# ?? SAcará Microsoft algo al respecto ??
saludos. -
martes, 03 de noviembre de 2009 12:53Alguien ha generado la factura electronica desde NAVISION?
-
martes, 03 de noviembre de 2009 14:04Desde Navision, la forma en la que se ha realizado en mi empresa, es, a través de un OCX, crear un formulario con todos los datos de entrada y crear el XML con estos datos. Es una forma pesada y tediosa, pero así es como se ha hecho.
Si alguien tuviera otra manera más sencilla... -
martes, 03 de noviembre de 2009 17:43Nosotros hemos creado el .jar que firma la factura electronica y que se ejecuta desde un formulario de NAVISION, lo que estamos haciendo ahora es crear el fichero Xml desde Navision, lo que te pregunto es si es más facil crearlo por ejemplo con una codeunit y cansarte de crear etiquetas y campos, o si hay alguna forma menos laboriosa de hacer el fichero.
Gracias por tu ayuda.
--CoNcHi-- -
martes, 10 de noviembre de 2009 9:50El problema que tengo ahora, es que una vez que he creado la factura electronica desde navision con formato txt y la convierto en formato xsig, es que los acentos del fichero txt me los convierte en caracteres raros, ¿cómo puedo solucionar esto?
-- CoNcHi -- -
lunes, 16 de noviembre de 2009 16:28
Hola Conchi, yo necesito ese programa en .jar para fimar el xml, tu me lo podrías pasar??.
Yo te puedo pasar una code unit que te genera el fichero xml, o un xml port. También tengo una code unit para transformar los caracteres extraños, te permite pasar los caracteres de ANSI a ASCII y viceversa.
Un saludo. -
viernes, 04 de diciembre de 2009 7:24Gabriel la web www.gtfacturae.com no funciona, podrias dar otro link o enviarme la libreria y como utilizarla.
Yo actualmente leo, firmo y valido con la api java de la AEAT y lo hace bien, lo que me gustaria es intentar integrarlo todo en VB.NET
Gracias. -
viernes, 04 de diciembre de 2009 12:20Rubenmr, lo siento , pero ya no distribuyo la librería.
Un saludo y suerte. -
miércoles, 20 de enero de 2010 21:24Alguien ha avanzado con este tema ?
No se volverá a distribuir la librería ? se pu ede pasar el código fuente a C# ??
saludos y gracias. -
jueves, 18 de febrero de 2010 22:10
Rubenmr, lo siento , pero ya no distribuyo la librería.
Un saludo y suerte.
¿Ni siquiera la última versión que tengas?... nos vendría bien a muchos...
¿a que es debido esa decisión? -
miércoles, 10 de marzo de 2010 14:58
Hola Conchi, yo necesito ese programa en .jar para fimar el xml, tu me lo podrías pasar??.
Yo te puedo pasar una code unit que te genera el fichero xml, o un xml port. También tengo una code unit para transformar los caracteres extraños, te permite pasar los caracteres de ANSI a ASCII y viceversa.
Un saludo.
Claro que sí, yo necesito el xmlport que me genere el fichero xml. Este es mi correo cbr.conchi@yahoo.es.
Cuando te pongas en contacto conmigo te paso lo que te haga falta. Siento no haberte contestado antes. -
martes, 20 de abril de 2010 10:19
Aunque no exista gtfacturae.com, ¿alguien tiene la librería? ¿Puede responderme alguien que la tenga? Por favor...Rubenmr, lo siento , pero ya no distribuyo la librería.
Un saludo y suerte.
¿Ni siquiera la última versión que tengas?... nos vendría bien a muchos...
¿a que es debido esa decisión? -
miércoles, 21 de abril de 2010 9:26
Buenos días, Perdizi:
Soy bastante novato en esto y me ha tocado la gorda. Tengo que firmar un XML para la Agencia de Protección de Datos. Tengo el XML construído y probado, pero no sé como firmalo. Trabajo en VB para Access y he leído que has hecho algo por el estilo. ¿Podrías indicarme como hacerlo? He intentado hacerlo en .NET y C#, pero mis conocimientos son muy básicos y al menor problema, me quedo atascado.
Gracias.
-
miércoles, 21 de abril de 2010 13:03
Hola,
Yo he conseguido acercarme bastante al formato de firma de facturae. Me he quedao atrapada a la hora de introducir la politica de firma y en en referenciar los URIs!!
Alguna sugerencia? si necesitais algo en concreto de codigo , decirmelo.
PD: estoy trabajando con C#.
Gracias.
-
jueves, 22 de abril de 2010 19:42
En la red no hay ningún documento completo y definido para hacer estas funcionalidades con .NET. Cualquier aportación será bien recibida.
A ver si Microsoft y organismos oficiales cogen el guante, visto el interés en este tema por la cantidad de respuestas a este "post".
-
viernes, 23 de abril de 2010 5:49Nadie nos puede pasar la librería GTFacturae.dll que estaba disponible hace unos meses ?? :(
-
viernes, 23 de abril de 2010 6:47
hola Alhambra,
Me he enterado que el dia 27 de Abril se va acelebrar un Congreso de Factura electronica Europea en Madrid, y lo transmitiran en http://ec.europa.eu/enterprise/newsroom/cf/itemlongdetail.cfm?item_id=4005&lang=es
esperemos que sea interesante!!!ya intercambiaremos opiniones.
-
lunes, 03 de mayo de 2010 7:53
Hola,
han dicho algo interesante para el uso de facturae con .NET ??
Saludos y gracias.
-
jueves, 06 de mayo de 2010 8:02
Hola Alhambra,
Todo ha sido palabras y palabras.....veremos si ponen de acuerdo en crear un grupo de expertos!! :-P
este es mi correo : ruth.mascarell@ibernova.es
Si alguien esta interesado en terminar la version .NET estoy disponible para ayudarnos mutuamente.
Graciass
-
jueves, 06 de mayo de 2010 8:25
La idea sería que Microsoft y organismos oficiales apostaran por implicarse más en tener una guía detallada técnica de implementación de facturae y .NET, al igual que hay en Java, ejemplos en la web del Ministerio correspondiente.
Saludos y gracias.
-
jueves, 06 de mayo de 2010 13:17
Yo tengo la libreria gtfacturae.dll por si alguien la quiere.
Si a Gabriel le da igual que la mande.
Y tampoco se que licencia utiliza, pero vamos, que si alguien la quiere, se la mando.
Saludos.
-
jueves, 06 de mayo de 2010 15:32
Lo ideal sería un ejemplo completo de uso, al estilo hazteunafacturae.com.
A ver si Don Gabriel indica algo y nos puede enviar la librería.
Saludos y gracias.
-
jueves, 06 de mayo de 2010 17:50
Buenas tardes, gente!
Para los que queraís la ultima versión de la dll con un proyecto de ejemplo, hacedme llegar vuestro emilio a gabrieltame@yahoo.es. Os hare llegar el correo.
Salu2. Be happy!
-
lunes, 10 de mayo de 2010 17:23Para los que todavía no sepáis como iniciaros con la facturaE y .net, aquí hay un buen tutorial: http://sviudes.blogspot.com/2010/05/facturae-con-net-y-c.html
-
jueves, 20 de mayo de 2010 7:47
He publicado en http://sviudes.blogspot.com/2010/05/facturae-con-net-y-c.html mi forma de firmar con XAdES desde .NET usando sólo librerías que puedes distribuir libremente.
-
miércoles, 23 de junio de 2010 10:54
J o d e r, si que era el classpath.
Me fijaba en lo que se puso arriba:
lib/jaxb-api.jar
lib/FacturaEBridge.jar
lib/Facturae-API_CompPack.jar
lib/Facturae-API.jar
lib/commons-logging-1.1.jar
y habia que meterlo al reves:
lib/jaxb-api.jar
lib/Facturae-API.jar
lib/Facturae-API_CompPack.jar
lib/FacturaEBridge.jar
lib/commons-logging-1.1.jar
Muchas gracias por no abandonarme y probarlo en tu equipo.
Un saludo y muchisimas gracias de verdad.
Hola a tod@s, antes de nada comentar que estoy desarrollando un proyecto en Eclipse con Maven para firmar documentos haciendo uso de la API de Facturae para Java.Consigo crear el fichero XSIG (MarshallerUtil.marshal) y validarlo (ValidatorUtil.getInstance().validate) sin problemas pero al hacer:
Map<String, Object> mapa = SignatureUtil.validateSignature(factura31);
Obtengo lo siguiente:
23-06 12:48:15,703 INFO [SignatureUtil] Obtaining the document from the file
23-06 12:48:15,765 INFO [SignatureUtil] Calling sign(Document)
23-06 12:48:15,812 INFO [SignatureUtil] Loading configuration properties
23-06 12:48:15,812 INFO [SignatureUtil] There is not a custom configuration file created by user, so the default resource included in the API jar is loaded
23-06 12:48:15,812 INFO [SignatureUtil] Initializing facade and setting the locale language and country
23-06 12:48:31,046 ERROR [ManagementFacturae] Error al firmar el documento
java.lang.NullPointerException
at es.mityc.facturae.utils.SignatureUtil.validateSignature(Unknown Source)
at es.mityc.facturae.utils.SignatureUtil.validateSignature(Unknown Source)En el buildpath del proyecto he puesto en orden las librerías tal y como específica el compañero pero sigue dándome el mismo error.
¿Alguien tiene alguna idea para echarme una mano?
Muchas gracias a todos!!!
-
lunes, 01 de noviembre de 2010 19:47
Hola, ¿no veo desde donde descargar?
¿Donde está el link de descarga? Muchas gracias.
-
martes, 02 de noviembre de 2010 9:48Buenos días, les recuerdo que en su día les propuse una solución para el tema de la facturae con asp.net y que funciona, se trata de utilizar el cryptoapplet, es decir un applet para firma que ha desarrollado la universidad de Castellón y cuya implementación para facturaE corre a cargo de mi empresa pero que hemos liberado como open source...
la implementación sólo supone crear un codigo html en la página aspx, teneis un ejemplo en http://code.google.com/p/cryptoapplet/ , como veo que teneis dificultades para descargar los fuentes os pongo un enlace a una aplicación de ejemplo:
aplicación de ejemplo: http://cryptoapplet.googlecode.com/files/cryptoapplet.zip
para que quede claro; normalmente los proyectos open source que hay en google utilizan subversion para almacenar y descargar los fuentes, es decir para utilizarlos teneis que instalaros subversion y un gui para subversion como tortoise svn, una vez instalados le decís que baje el fuente de https://cryptoapplet.googlecode.com/svn/trunk/ por ejemplo..., no suele haber un botón de descarga...
la url de la demo del cryptoapplet http://projectestic.uji.es/pr/cryptoapplet/samples/v2.1.0/test.html -
miércoles, 02 de mayo de 2012 22:51
Hola a todos.
Me interesa saber si alguien tiene experiencia en el trabajo con certificados digitales de archivos XML.
La situación es la siguiente:
Tengo un archivo de XML el cual debe ser firmado digitalmente por razones de seguridad, dicha firma es realizada por una función propia del Framework de .NET, hasta aquí todo bien, la complicación surge porque el archivo firmado debe llevar dentro de la estructura de TAGS de la firma un prefijo, ejemplo:
El XML ya firmado debería verse así:
<ds : signature>
...
</ds : signature>
siendo "ds" el prefijo, en cambio...
El XML que genero se ve asi:
<signature>
...
</signature>
dicho prefijo debería ser insertado en el archivo de XML al momento de firmarlo, no es válido anexarlo después de la firma, ya que la misma genera un número HASH que va dentro del propio XML, si se le anexa el prefjo, el número de HASH ya no es válido, y la firma no es válida.
Expongo aquí código y marco en negrita la línea donde se firma el XML.
En plataformas como Java existe una función que acepta el prefijo como parámetro, pero en .NET no se puede pasar dicho parámetro al menos que yo sepa.
Agradezco comentarios y/o ayuda de algun tipo.
Saludos.
Code Snippet//Cargo el certificado
X509Certificate2 cert = this.obtenerCertificado(codBanco);
cert.Import(clavePrivada, pass, X509KeyStorageFlags.DefaultKeySet);SignedXml signedXml = new SignedXml();
//Asigno la clave privada
signedXml.SigningKey = cert.PrivateKey;
DataObject data = new DataObject();
data.Data = doc.ChildNodes;
data.Id = "1003";
signedXml.AddObject(data);
Reference reference = new Reference();
//reference.Uri = "#" & data.Id '"#1011";
reference.Uri = "#1003";
XmlDsigC14NTransform env1 = new XmlDsigC14NTransform();
//Añadimos la transformación a la referencia
reference.AddTransform(env1);signedXml.AddReference(reference);
KeyInfo keyInfo = new KeyInfo();
keyInfo.AddClause(new KeyInfoName(data.Id));
signedXml.KeyInfo = keyInfo;
signedXml.ComputeSignature(); -
lunes, 26 de noviembre de 2012 19:45
Saludos,
Si todavía tienes la librería a mi me intereza, y si tienes un peque ejemplo o manual también, gracias mi correo es zomby_ej@hotmail.com.
Otra pregunta con esta librería conseguiste firmar con XADES-BES????
-
lunes, 26 de noviembre de 2012 19:47
Saludos, a mi me intereza gracias por el aporte., mi email es: zomby_ej@hotmail.com
gracias
-
miércoles, 28 de noviembre de 2012 10:29
Hola,
Yo necesito firmar con un certificado digital un PDF.
¿Alguien me puede ayudar?
He utilizado 'Windows SignTool' pero me aparece el error "This file format can
not be signed Because It is not recognized"Desarrollo en PowerBuilder, por lo que si alguien conoce un OCX, DLL o un ejemplo que pueda utilizar se lo agradecería.
Muchas gracias
Un saludo

