Jump to content

Assinatura digital PDF


Morfas3
 Share

Recommended Posts

Boa noite,

Estou a integrar com os serviços da AMA, e estou a tentar assinar digitalmente um pdf com base em chave movel digital.

Já tentei uma solução que postaram aqui ha uns anos, com base no cartão de cidadão, mas não tive sucesso.

Alguém já fez alguma coisa com chave móvel?

Link to comment
Share on other sites

Boa tarde,

Implementei a assinatura digital com chave móvel a uns anos, na altura era necessário cumprir uns certos requisitos para iniciar o desenvolvimento, por exemplo: necessário o registo e activação da chave móvel no ambiente de pré-produção da AMA.

Aconselho-te a entrares em contacto com a AMA para saber quais os passos a seguir.

Cumps.

Link to comment
Share on other sites

8 minutes ago, gatpereira said:

Boa tarde,

Implementei a assinatura digital com chave móvel a uns anos, na altura era necessário cumprir uns certos requisitos para iniciar o desenvolvimento, por exemplo: necessário o registo e activação da chave móvel no ambiente de pré-produção da AMA.

Aconselho-te a entrares em contacto com a AMA para saber quais os passos a seguir.

Cumps.

Boas, 

Obrigado pela resposta, eu ja estou a invocar o serviço deles, ja activei a chave movel, já assino e tudo.

O problema que me deparo é que o pdf aparece com erros a informar que foi alterado ou corrupto, o que me leva a querer que ou estou a construir mal o hash do documento que é enviado para eles, ou estou a inserir erradamente a assinatura no pdf ou entao eles estão a retornar mal a assinatura.

Mas estou mais inclinado para a 1º hipotese.

Link to comment
Share on other sites

IRlyDunno

Olá @Morfas3

Conseguiste ter algum sucesso neste projeto de assinatura com a CMD?
Seria possível partilhares como estas a invocar o serviço, ou onde tem a documentação para tal?
 

Link to comment
Share on other sites

12 minutes ago, IRlyDunno said:

Olá @Morfas3

Conseguiste ter algum sucesso neste projeto de assinatura com a CMD?
Seria possível partilhares como estas a invocar o serviço, ou onde tem a documentação para tal?
 

Consegui ter sucesso sim,

A invocação do serviço da ama não foi propriamente o problema, mas diz me onde tas a ter problema.

Eu usei o Itext7 para assinar o documento.

Link to comment
Share on other sites

bom dia,
estou a tentar implementar uma solução C# onde seja possivel assinar documento com base na chave movél digital (sem recurso ao CC).
no SDK disponibilizado não é possivel fazer isto sem um CC no leitor e a propria AMA já comunicou que essa funcionalidade não está dísponivel

Pelo que entendi @Morfas3 é que conseguiu alcançar com sucesso esta solução de assinatura  de documentos com CMD, é isso?
 

Link to comment
Share on other sites

Bom dia  @reznor ,

Primeiro tem de ter o ao serviço soap que ama Disponibiliza, já tem isso?

Faça uns testes a invocar isso, eles têm um manual que explicam como invocar os serviços.

Isso vai ser um console aplication ou website?

  • Vote 1
  • Thanks 1
Link to comment
Share on other sites

Bom dia,
Não, não tenho esse serviço SOAP... Já tentei contactar a AMA mas sem sucesso.

Para já tenho uma console app pronta para testar, mas será uma webapp (website).

Link to comment
Share on other sites

@Morfas3
Boa tarde, estou com dificuldades a fazer os pedidos, ja me registei em pre produção e tudo mais mas quando faço um pedido nunca tenho uma resposta do lado da AMA.

Já passou por esta dificuldade? 

 

Obrigado

Link to comment
Share on other sites

Morfas3

Pois mas sem ter a documentação/wsdl dos serviços e credencias para acesso ao serviço, não consegue fazer nada.

O meu contacto com a ama foi a partir de um cliente para onde trabalhei. E sim eles também se queixaram do tempo de resposta.

Se calhar o que está a tentar usar é biblioteca que eles disponibilizam para conectar o cartão de cidadão ou estou errado? 

Link to comment
Share on other sites

@Morfas3
Bom dia, entretanto o contacto da AMA respondeu e já ultrapassei o problema. "Protocolos" dizem eles!

 

Obrigado  

Edited by reznor
Link to comment
Share on other sites

@Morfas3 Boas, vinha agora mesmo tentar perceber se tinhas chegado a este passo. Recebemos a Singature em byte[], o que usaste em concreto para incorporar no pdf? Estou a tentar com ItextSharp mas estou a ter alguns problemas, podes dar-me uma dica pf?

Link to comment
Share on other sites

PedroMFRibeiro

Viva @reznor,

Também estou a encontrar alguns problemas com o itext..

Quando fazes 

SignDetached(IExternalSignature externalSignature, X509Certificate[] chain, ICollection<ICrlClient> crlList, IOcspClient ocspClient, ITSAClient tsaClient, int estimatedSize, CryptoStandard sigtype)

o "externalSignature" é a nossa hash assinada, a "chain" são os certificados de conta de assinatura e o "CryptoStandard sigtype" é igual a DigestAlgorithms.SHA256 ?
Isto é suficiente?

Link to comment
Share on other sites

Morfas3

têm de usar o singdeferred

using (PdfReader reader = new PdfReader("_nome_ficheiro"))
            {
                using (FileStream fileStream = new FileStream($"_nome_ficheiro_assinado_ouput", FileMode.Create))
                {
                    Org.BouncyCastle.X509.X509Certificate[] chain = this.getUserCertificateChain(userBasePath);
                    PdfSigner signer = new PdfSigner(reader, fileStream, new StampingProperties());
                    IExternalSignatureContainer external = new MyExternalcontainer(signature, chain.ToList());
                    PdfSigner.SignDeferred(signer.GetDocument(), Signature_Field_Name, fileStream, external);

                    fileStream.Close();
                    fileStream.Dispose();
                }
                reader.Close();
            }

 

  • Thanks 1
Link to comment
Share on other sites

Morfas3

Mas antes de aplicarem a assinatura no documento, no momento de  ir buscar o hash do documento têm de "desenhar" uma assinatura em branco no pdf isto para não terem o problema que tive que quando abria o pdf dizia me que a assinatura era inválida.

No myexternalContainer é preciso implementar este método

  public byte[] Sign(Stream inputStream)
        {
            PdfPKCS7 sgn = new PdfPKCS7(null, certificado.ToArray, "SHA256", false);
            sgn.SetExternalDigest(this.SignedHash, null, "RSA");
            return sgn.GetEncodedPKCS7();
        }

vou tentar perceber o que foi feito na assinatura em branco porque isso é um passo anterior de aplicar assinatura 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.