![]() |
Firmar con AutoFirma y fichero PFX
1º. OBTENER ALIAS FICHERO PFX
Código:
AutoFirmaCommandLine listaliases -store pkcs12:"C:\...\certificado.pfx" -password "mipassword" -xml > "C:\...\respuesta_alias.xml"Código PHP:
Código:
<afirma><result>false</result><response><msg>La contrasena del almacen PKCS#12 / PFX no es valida</msg></response></afirma>2º. FIRMAR XML Código:
AutoFirmaCommandLine sign -i "C:\..\fichero_a_firmar.xml" -o "C:\...\fichero_firmado.xml" -format "xades" -config "format=XAdES Enveloped\nxadesNamespace=.../2000/09/xmldsig#"RESULTADO OK Código PHP:
Código PHP:
|
Cita:
En estos casos para evitar la restricción (es cuando lleváis pocos mensajes por temas de seguridad y antispam) se puede modificar el uinicio de la url poniendo h_t_t_p://... (con eso no la identifica como url y os dejaponerla...) |
Actualizao el mensaje número #2 con la recopialación de códigos.
|
He descubierto que no hay que definir el Namespace. El comando quedaría así:
Cita:
|
Cita:
Es raro que no hayan metido políticas de firma. |
Lo el alias lo puedes simplificar, hay un parámetro más fácil y menos dado a errores.
Te lo miro mañana. |
Hola, prueba algo así, en vez de alias es mejor esto subject.contains:XXXXXXXX donde XXXXXXXXX es el cif,nif,o nie del certificado, y así no va a fallar.
Pero no sé si falta o sobra algo. De momento no voy a trabajar en las firmas. Pero creo que te faltan las politicas de firma tambien: Código:
AutoFirmaCommandLine.exe sign -i c:\...\Fichero_vfactu_3_2-1-110.xml -o c:\...\Fichero_vfactu_3_2-1-110.xml.sign -format facturae -store pkcs12:"C:\...\fichero.pt2 o fichero.pfx" -password pepito -filter subject.contains:A29XXXXX -format xades -xml -config "format=XAdES Enveloped \npolicyIdentifier=urn:oid:2.16.724.1.3.1.1.2.1.9 \npolicyIdentifierHash=Dkx2R3nMv8kWo7iSAh+/1SQ70hfseOEaQbpJnURk+pg= \npolicyIdentifierHashAlgorithm=http://www.w3.org/2001/04/xmlenc#sha256 \npolicyQualifier=https://sede.administracion.gob.es/politica_de_firma_anexo_1.pdf" |
Sí, he mandado varios XML firmados así a VeriFactu y los ha tomado sin problemas.
|
Con los parámetros que te he puesto?
|
No. Lo he probado con los parámetros de mi primer mensaje.
|
Cita:
Código:
<xades:SignedDataObjectProperties>Código:
<xades:SigningCertificate><xades:Cert><xades:CertDigest><ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512"/>Código:
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>También dentro del nodo <ds:SignedInfo> debería hacer mención a sha256, pero está poniendo sha512 en todas. Dentro de <ds:Reference><ds:Transforms> se añade: Código:
<ds:Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116"> |
Cita:
¿Alguien sabe de dónde se saca el parámetro de configuración policyIdentifierHash? |
Para la politica de firmas debes tener esto en el signature:
Código:
<ds:Object> |
Cita:
El caso es que mandándole a mano al AutoFirma el DigestValue que aparece en el fichero de ejemplo firmado de la AEAT, me firma el archivo correctamente pero al validarlo en valide.redsara.es me devuelve el siguiente error: "El hash de la política incluido en la firma no coincide con el hash real de la política de firma". La llamada que realizo es: AutoFirmaCommandLine.exe sign -i "ejemplo.xml" -o "ejemplo_signed.xml" -format xades -config "format=XAdES Enveloped \nincludeOnlySignningCertificate=true \npolicyIdentifier=urn:oid:2.16.724.1.3.1.1.2.1.9 \npolicyIdentifierHash=Dkx2R3nMv8kWo7iSAh+/1SQ70hfseOEaQbpJnURk+pg= \npolicyIdentifierHashAlgorithm=http://www.w3.org/2001/04/xmlenc#sha256 \npolicyQualifier=https://sede.administracion.gob.es/politica_de_firma_anexo_1.pdf" -store pkcs12:"cert.pfx" -password XXXX -filter subject.contains:89890001K Está todo bien salvo el tema del hash de la política de firma. Otra cosa que intenté fue calcularlo desde archivo PDF: THashSHA2.GetHashStringFromFile('politica_de_firma_anexo_1.pdf'). Pero el error devuelto es el mismo. ¿Alguna idea de cómo solucionarlo? |
1 Archivos Adjunto(s)
El hash que te he puesto es el correcto, el otro que pones no es correcto es sha1 y no sha256, ademas con el digestvalue que te indica.
Mira las especificaciones de firma y lo veras. Código:
https://www.agenciatributaria.es/static_files/AEAT_Desarrolladores/EEDD/IVA/VERI-FACTU/Espec-Tecnicas/EspecTecGenerFirmaElectRfact_BORRADOR.pdf |
Cita:
Si uso tu propuesta sí me funciona. Pero ¿qué pasa si quiero aplicar el sha-256 como aparece en el ejemplo de archivo firmado proporcionado por la AEAT? ¿Cómo se calcula el sha-256 de la política de firma? Porque si uso el proporcionado en el fichero de ejemplo de la AEAT, al validarlo en valide.redsara.es me da el error de "El hash de la política incluido en la firma no coincide con el hash real de la política de firma". |
Cita:
|
El ejemplo me refiero al de la Aeat no al mio, veras que es sha1
|
Para hacerlo con SHA256 debes saber el DisgestValue correspondiente, el que pones de 256 no es valido, ya lo comprobe anteriormente cuando salio el documento, pero despues lo cambiaron a SHA1
|
Aunque yo no utilizo Autofirma para firmar los ficheros.
El codigo correcto para autofrima seria este: Código:
AutoFirmaCommandLine.exe sign -i "c:\envio_firmado.xml" -o "c:\envio_firmado_a.xsig" -format xades -config "format=XAdES Enveloped \nincludeOnlySignningCertificate=true \npolicyIdentifier=urn:oid:2.16.724.1.3.1.1.2.1.9 \npolicyIdentifierHash=G7roucf600+f03r/o0bAOQ6WAs0= \npolicyIdentifierHashAlgorithm=http://www.w3.org/2000/09/xmldsig#sha1 \npolicyQualifier=https://sede.administracion.gob.es/politica_de_firma_anexo_1.pdf" -store auto -certgui |
1 Archivos Adjunto(s)
Cita:
No veo rastro de SHA-1 en las especificaciones... |
Cita:
En el fichero de ejemplo fijate bien que viene SHA1, vuelve a descargatelo. En la anterior descarga venia como ya te he dicho anteriormente SHA256, pero el DigestValue incluido no es correcto. Por cierto el SHA1 es para la politica de firmas no para el documento que si es SHA256, veo que indicas en el documento los dos y no tiene nada que ver, una cosa es el hash de politica de firma y otra el documento que si tiene que ser minimo SHA256. |
Cita:
|
Cita:
Cualquier cosa que te comente nos dices, sino les hago yo la pregunta. |
Cita:
|
ok, muchas gracias, ya cuentas.
|
Cita:
|
Cita:
|
Cita:
+1 Nosotros también. |
Cita:
Además, tengo una función que me devuelve la salida de un comando de consola sin mostrarla, no necesito abrir una ventana de msdos o terminal para obtener el resultado. |
En otros proyectos hay compañeros que han comentado que es lento.
Supongo que si hay poco volumen de firma es suficiente. Pensad si en algún momento necesitáis un volumen grande (facturación automática) o más velocidad en ese paso. Si no se necesita es una solución válida (y sobre todo gratuita). |
Cita:
Hola, yo voy a empezar a probar este "FirmaXadesNet45", disponible en el portal de PAE https://administracionelectronica.go...=firmaxadesnet, mas estatal que este... ademas incluye ejemplos de facturae, aunque la verdad usare un port del mismo , actualizado hace 9 meses. Por si a alguien le interesa https://github.com/didac-vallhonesta...master/Library, esta en c# .net , en cuanto tenga la funcion de firma testada y funcionando la pongo. |
Los sistemas de Firma Digital son Normas Internacionales, tanto Autofirma como cualquier otro componente o programa se adapta a estas Normas.
Lo bueno de utilizar SecureBlackBox es que puedes manejar todo el stream en memoria, no necesitas utilizar ficheros en disco. Y el codigo es bastante rapido. |
Cita:
|
Cita:
Lo añado al mensaje de resumen (mensaje#2). |
Cita:
|
Cita:
Código:
Hemos actualizado el documento de especificaciones y se publicará en breve. |
Cita:
|
Cita:
|
Hola, la dll, que uso me define estos parametros, no seran buenos verdad.
Código:
public static DigestMethod SHA1 = new DigestMethod("SHA1", "http://www.w3.org/2000/09/xmldsig#sha1", "1.3.14.3.2.26"); |
| La franja horaria es GMT +2. Ahora son las 03:03:47. |
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