CRLibre / API_Hacienda

API libre para Factura Electrónica en Costa Rica, interfaz para integrar sistemas con el Ministerio de Hacienda para la Facturación Electrónica
https://crlibre.org/factura-electronica/
GNU Affero General Public License v3.0
166 stars 122 forks source link

Use SHA256 everywhere #146

Closed fdelapena closed 2 years ago

fdelapena commented 2 years ago

Utiliza SHA2 en la política de firma y otros lugares. Actualiza el hash y la URL de la resolución a una URL de PDF válida (al menos antes de la situación de contingencia). En el README.md se agrega una URL de web.archive.org para que pueda acederse por ahora.

JeanCarlosChavarriaHughes commented 2 years ago

Hola @fdelapena Tienes algún XML firmado usando esta version de código? fdelapena:xmldsig-sha256

Para dejarlo como registro de cómo luce el XML firmado con SHA256

fdelapena commented 2 years ago

Hola @fdelapena Tienes algún XML firmado usando esta version de código?

Hola @JeanCarlosChavarriaHughes, muchas gracias, todavía no está probado.

Adjunto un XML firmado (sin estructura de comprobante, solo firma XAdES) con otro ejemplo firmado con (una herramienta externa, no con php todavía) con el tipo de estructura con resúmenes SHA256 que se intentaría lograr con este Pull Request, para que sirva como referencia:

prueba.zip

Puedo tratar de probar el código de esta rama en unas horas, no tengo montado el sistema todavía en local.

JeanCarlosChavarriaHughes commented 2 years ago

Ok entiendo me avisas @fdelapena La idea es para validar si el xml firmado con estructura de comprobante pasa bien con el validador https://apis.gometa.org/validar/

JeanCarlosChavarriaHughes commented 2 years ago

Hola @fdelapena Logré poner un nuevo ambiente de la API Hacienda a correr con la versión de tu pull request. Todo se ve bien, Así es como se ve la validación. En general lo veo mejor de cómo estaba antes ya que solo aparece un error en lugar de dos.

Firma sin determinación, formato XAdES-BASELINE-B.
Subindicación: NO_CERTIFICATE_CHAIN_FOUND
Detalles de validación AdES:
ERROR: The certificate chain for signature is not trusted, it does not contain a trust anchor.
Fecha declarada de la firma: 2022-06-03 00:44:23 (hora UTC)
Fecha mínima probada de la existencia de la firma: 2022-06-03 00:56:55 (hora UTC)

Así se ve con la versión anterior al Pull Request.

Firma sin determinación, formato XAdES-BASELINE-B.
Subindicación: SIGNATURE_POLICY_NOT_AVAILABLE
Detalles de validación AdES:
ERROR: The signature policy is not available!
ERROR: The certificate chain for signature is not trusted, it does not contain a trust anchor.
Fecha declarada de la firma: 2019-07-12 16:34:42 (hora UTC)
Fecha mínima probada de la existencia de la firma: 2022-06-03 00:59:09 (hora UTC)
fdelapena commented 2 years ago

Las pruebas relevantes en DSS superaron la prueba. Se muestran pantallazos detallados:

Captura desde 2022-06-03 12-45-16 Captura desde 2022-06-03 12-45-06

En cuanto a EPES (Explicit Policy Electronic Signature), al no estar disponible el PDF en línea (la URL está caída desde el evento de Conti), esa parte no valida bien en el validador DSS (signature policy not available) porque no logra descargar el PDF para calcular si el hash es correcto, salvo que se aplique el parche offline para que reconozca esta URL proporcionado una copia local y en ese caso también valida correctamente el hash proporcionado.

El Signatures Conformance Checker de ETSI supera la prueba para la versión de XAdES de la norma clásica (previa a Baseline):

Captura de pantalla 2022-06-03 a las 14 37 39-fullpage

Por lo que estructuralmente valida estructuralmente con respecto a la especificación ETSI TS 101 903 (XAdES). Este validador de estructura lo prueba contra la especificación de la v1.4.2.

Xolido también dice en las partes relevantes que está en orden:

Captura desde 2022-06-03 18-43-18

Parece que todo fue bien y que el PR estaría listo. Muchas gracias @JeanCarlosChavarriaHughes :+1:.

JeanCarlosChavarriaHughes commented 2 years ago

Confirmado y Verificado.