Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Certificados de representación de la AOC (Administració Oberta de Catalunya) #18

Open
joandomenech opened this issue Jan 29, 2021 · 6 comments

Comments

@joandomenech
Copy link

joandomenech commented Jan 29, 2021

Buenos días

Dejo aquí esta issue por si a alguien le puede ser de utilidad.

Nuestras facturas firmadas con esta herramienta dejaron de ser válidas en FACe desde hace unas semanas. Nuestro certificado esta emitido per la AOC y sus validadores de firmas si que lo aceptaban como bien firmado

Para solucionar el problema encontramos en un foro que para certificados de representación era necesario que hubiera toda la cadena de certificación. He modificado el código de esta forma

        private void AddCertificateInfo(SignatureDocument sigDocument, SignatureParameters parameters)
        {
            
            sigDocument.XadesSignature.SigningKey = parameters.Signer.SigningKey;
            X509Chain cadena = new X509Chain();
            cadena = CertUtil.GetCertChain(parameters.Signer.Certificate);

            KeyInfoX509Data data = new KeyInfoX509Data();
            foreach (X509ChainElement c in cadena.ChainElements)
            {
               data.AddCertificate(c.Certificate);
            }
            
            KeyInfo keyInfo = new KeyInfo();
            keyInfo.Id = "KeyInfoId-" + sigDocument.XadesSignature.Signature.Id;
            // keyInfo.AddClause(new KeyInfoX509Data((X509Certificate)parameters.Signer.Certificate));
            keyInfo.AddClause(data);
            keyInfo.AddClause(new RSAKeyValue((RSA)parameters.Signer.SigningKey));

            sigDocument.XadesSignature.KeyInfo = keyInfo;

            Reference reference = new Reference();

            reference.Id = "ReferenceKeyInfo";
            reference.Uri = "#KeyInfoId-" + sigDocument.XadesSignature.Signature.Id;

            sigDocument.XadesSignature.AddReference(reference);
        }
@lespinosajuan
Copy link

Buenas tardes Joan!!

Has conseguido firmar XML y que la página de Factura electronica a través de su validador te la detecte como correcta??

No consigo aplicarlo en mi proyecto. Me genera el documento firmado pero dice que la firma no es válida.

Un saludo

@joandomenech
Copy link
Author

Hola

Si, como ves en el código de arribar hay que agregar toda la cadena de certificación si no dice que el certificado no es válido
El código original solo firma con el certificado de usuario, no con toda la cadena.

Des de que puse esta issue que está funcionando y no ha habido más problemas

Espero que te sirva la respuesta

@lespinosajuan
Copy link

Buenas Joan!!!

MUCHAS GRACIAS!! Por que gracias a eso lo he conseguido.

Un saludo

@joandomenech
Copy link
Author

Me alegro, un saludo!

@JoseMancebo
Copy link

1000 gracias Joan!!!
No sabes los dolores de cabeza que nos ha reportado este tema hasta que he dado con tu solución...

@joandomenech
Copy link
Author

Te entiendo perfectamente 😎
A disfrutarlo ahora

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants