roman.kurtysh@rk-e-as.pt Posted April 12, 2021 at 10:59 AM Report Share #621955 Posted April 12, 2021 at 10:59 AM Bom dia. Estamos desenvolver uma plataforma e precisamos implementar assinatura digital. Alguém poderia estar interessado implementar esta solução no nosso portal ASP, C# ? Em vez de estudar todo o processo gostaria contratar alguém com experiência. Alguém poderia estar interessado ? Link to comment Share on other sites More sharing options...
Jose Sanches Posted June 11, 2021 at 12:04 PM Report Share #622616 Posted June 11, 2021 at 12:04 PM Olá, Estou a acompanhar este fórum, e deparo-me com o mesmo problema. Ainda não foi capaz de implementar uma versão estável. Tenho algumas variantes (estou a usar Java com iText 7) - porém o comportamento/implementação é semelhante. Segui as dicas deixadas por @Morfas3, @reznor e @Labreu mas obtenho sempre a mensagem (quando incluo o hash assinado da AMA) O documento foi alterado ou corrompido após a aplicação da assinatura. Alguém conseguiu com sucesso assinar um PDF? Podem-me ajudar? Obrigado. Link to comment Share on other sites More sharing options...
Jose Sanches Posted July 8, 2021 at 06:19 PM Report Share #622905 Posted July 8, 2021 at 06:19 PM Deixo um exemplo em java. Consegui avançar um pouco... private static final String input = "c:/tmp/ama/PDF-1.pdf"; private static final String output = "c:/tmp/ama/signed.pdf"; public static void main(String[] args) throws IOException, GeneralSecurityException { Security.addProvider(new BouncyCastleProvider()); PdfReader reader = new PdfReader(input); OutputStream fos = new FileOutputStream(output); StampingProperties stampingProperties = new StampingProperties(); //For any signature in the Pdf but the first one, you need to use appendMode // stampingProperties.useAppendMode(); PdfSigner pdfSigner = new PdfSigner(reader, fos, stampingProperties); /*you can modify the signature appearance */ PdfSignatureAppearance appearance = pdfSigner.getSignatureAppearance(); appearance.setPageRect(new Rectangle(36, 508, 254, 200)); appearance.setPageNumber(1); appearance.setLayer2FontSize(10f); appearance.setReason("Teste Assinatura"); appearance.setLocation("Lisboa"); IExternalSignatureContainer gsContainer = new GSSignatureContainer(PdfName.Adobe_PPKLite, PdfName.Adbe_pkcs7_detached); pdfSigner.signExternalContainer(gsContainer, 8049); } public class GSSignatureContainer implements IExternalSignatureContainer { /* Signature dictionary. Filter and SubFilter. */ private PdfDictionary sigDic; public GSSignatureContainer( PdfName filter, PdfName subFilter) { sigDic = new PdfDictionary(); sigDic.put(PdfName.Filter, filter); sigDic.put(PdfName.SubFilter, subFilter); } @Override public byte[] sign(InputStream data) throws GeneralSecurityException { try { //get all certificates (3) from client via web service Certificate[] chain = new CallAMA().getCertificates(); String hashAlgorithm = DigestAlgorithms.SHA256;//"SHA-256"; BouncyCastleDigest digest = new BouncyCastleDigest(); MessageDigest md = digest.getMessageDigest(hashAlgorithm); byte[] hash = DigestAlgorithms.digest(data, md); PdfPKCS7 sgn = new PdfPKCS7(null, chain, hashAlgorithm, null, digest, false); //Collection<byte[]> ocsp = new OcspClientBouncyCastle(null); OcspClientBouncyCastle ocspClient = new OcspClientBouncyCastle(null); Collection<byte[]> ocsp = new ArrayList<byte[]>(); for(var i = 0; i < chain.length - 1; i++) { byte[] encoded = ocspClient.getEncoded((X509Certificate)chain[i], (X509Certificate)chain[i + 1], null); if(encoded != null) ocsp.add(encoded); } byte[] attributeBytes = sgn.getAuthenticatedAttributeBytes(hash, PdfSigner.CryptoStandard.CADES, ocsp, null); //criar sha256 message digest byte[] attributeBytesDigest = MessageDigest.getInstance(hashAlgorithm).digest(attributeBytes); /**************************************************** * CALL client (AMA) -> receive SMS and signed hash * ****************************************************/ byte[] signedHash = new CallAMA().getHashSignedByAma(attributeBytesDigest); sgn.setExternalDigest(signedHash, null, "RSA"); ITSAClient tsaClient = null;//new GSTSAClient(access); return sgn.getEncodedPKCS7(hash, PdfSigner.CryptoStandard.CADES, tsaClient, ocsp, null); } catch (IOException | GeneralSecurityException de) { de.printStackTrace(); throw new GeneralSecurityException(de); } } @Override public void modifySigningDictionary(PdfDictionary signDic) { signDic.putAll(sigDic); } } } Link to comment Share on other sites More sharing options...
Nuno Carreira Posted October 18, 2021 at 11:26 AM Report Share #624187 Posted October 18, 2021 at 11:26 AM Bom dia, O itext7-core é gratis certo? <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext7-core</artifactId> <version>7.1.7</version> <type>pom</type> </dependency> Link to comment Share on other sites More sharing options...
JakeBass Posted June 8, 2022 at 09:26 AM Report Share #626163 Posted June 8, 2022 at 09:26 AM O iText tem licença AGPL. Ou seja, não se pode usar comercialmente. A versão 4.1.6 e anteriores têm licença MPL/LGPL e já se pode usar comercialmente. Link to comment Share on other sites More sharing options...
MasterHammer Posted October 18, 2022 at 02:48 PM Report Share #627604 Posted October 18, 2022 at 02:48 PM Alguém encontrou uma alternativa ao iText? É que o itext ainda fica caro, quando o nº de documentos a assinar é grande. Link to comment Share on other sites More sharing options...
Nuno Carreira Posted October 19, 2022 at 08:53 AM Report Share #627613 Posted October 19, 2022 at 08:53 AM (edited) 18 horas atrás, MasterHammer disse: Alguém encontrou uma alternativa ao iText? É que o itext ainda fica caro, quando o nº de documentos a assinar é grande. Bom dia, sim eu utilizei o pdfBox, é gratuito. <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.23</version> </dependency> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox-tools</artifactId> <version>2.0.0-RC1</version> </dependency> Edited October 19, 2022 at 09:05 AM by Nuno Carreira Link to comment Share on other sites More sharing options...
bioshock Posted October 19, 2022 at 01:04 PM Report Share #627617 Posted October 19, 2022 at 01:04 PM 22 hours ago, MasterHammer said: Alguém encontrou uma alternativa ao iText? É que o itext ainda fica caro, quando o nº de documentos a assinar é grande. 4 hours ago, Nuno Carreira said: Bom dia, sim eu utilizei o pdfBox, é gratuito. Vocês estão a assinar com que certificado? O da própria empresa ou o vosso certificado de software de facturação? Link to comment Share on other sites More sharing options...
Nuno Carreira Posted October 19, 2022 at 02:14 PM Report Share #627623 Posted October 19, 2022 at 02:14 PM 1 hora atrás, bioshock disse: Vocês estão a assinar com que certificado? O da própria empresa ou o vosso certificado de software de facturação? Com o certificado fornecido pela AT, numa das chamadas ao WebService deles. Link to comment Share on other sites More sharing options...
bioshock Posted October 19, 2022 at 03:00 PM Report Share #627624 Posted October 19, 2022 at 03:00 PM 39 minutes ago, Nuno Carreira said: Com o certificado fornecido pela AT, numa das chamadas ao WebService deles. Onde é que leste que isso é possível? https://dre.pt/dre/detalhe/decreto-lei/28-2019-119622094 Cito: Quote Faturação eletrónica Artigo 12.º Emissão de fatura por via eletrónica 1 - As faturas e demais documentos fiscalmente relevantes podem, mediante aceitação pelo destinatário, ser emitidos por via eletrónica. 2 - Para efeitos do artigo 6.º, considera-se garantida a autenticidade da origem e a integridade do conteúdo dos documentos emitidos por via eletrónica se adotado, nomeadamente, um dos seguintes procedimentos: a) Aposição de uma assinatura eletrónica qualificada nos termos legais; b) Aposição de um selo eletrónico qualificado, nos termos do Regulamento (UE) n.º 910/2014, do Parlamento Europeu e do Conselho, de 23 de julho de 2014; c) Utilização de um sistema de intercâmbio eletrónico de dados, desde que os respetivos emitentes e destinatários outorguem um acordo que siga as condições jurídicas do «Acordo tipo EDI europeu», aprovado pela Recomendação n.º 1994/820/CE, da Comissão, de 19 de outubro. Link to comment Share on other sites More sharing options...
bioshock Posted October 20, 2022 at 11:53 AM Report Share #627638 Posted October 20, 2022 at 11:53 AM 20 hours ago, bioshock said: Onde é que leste que isso é possível? https://dre.pt/dre/detalhe/decreto-lei/28-2019-119622094 Cito: Não é possível. https://i.postimg.cc/WbX1SfZx/autoridade-tributaria.png Link to comment Share on other sites More sharing options...
Nuno Carreira Posted October 20, 2022 at 03:52 PM Report Share #627649 Posted October 20, 2022 at 03:52 PM 3 horas atrás, bioshock disse: Não é possível. https://i.postimg.cc/WbX1SfZx/autoridade-tributaria.png Penso que não entendou o que lhe queria dizer. Link to comment Share on other sites More sharing options...
Luís Pontes Posted December 6, 2022 at 06:56 PM Report Share #628607 Posted December 6, 2022 at 06:56 PM Boa tarde, eu quero assinar um pdf com a minha assinatura digital. Posso criar uma assinatura digital no Adobe? https://helpx.adobe.com/pt/acrobat/using/digital-ids.html Obrigado, Luís Pontes Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now