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

Como gerar e assinar um documento com um certificado auto assinado ? #343

Open
HelloWar75 opened this issue May 8, 2022 · 2 comments
Open

Comments

@HelloWar75
Copy link

HelloWar75 commented May 8, 2022

Aqui na empresa temos uma demanda onde alguns usuários assinam com um certificado A1 ou A3 da Safeweb e outros com um certificado auto assinado com o CA Root sendo um que nós geramos tem como fazer isso utilizando a biblioteca ?

Fora isso toda vez que tento assinar importando o PFX via base64 ele gera esse erro alguém conseguiria me ajudar ?

hashPDFtoSign: 856f8c7f4feb2800f0c3a8cbfe7ebb1bf999e31e1d1ee121b701edda1a17871e java.io.IOException: Short read of DER length at sun.security.util.DerInputStream.getLength(DerInputStream.java:582) at sun.security.util.DerValue.init(DerValue.java:391) at sun.security.util.DerValue.<init>(DerValue.java:332) at sun.security.util.DerValue.<init>(DerValue.java:345) at sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1938) at java.security.KeyStore.load(KeyStore.java:1445) at br.com.luisjustin.engines.PADES$1.sign(PADES.java:269) at org.apache.pdfbox.pdfwriter.COSWriter.doWriteSignature(COSWriter.java:793) at org.apache.pdfbox.pdfwriter.COSWriter.visitFromDocument(COSWriter.java:1199) at org.apache.pdfbox.cos.COSDocument.accept(COSDocument.java:452) at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1435) at org.apache.pdfbox.pdmodel.PDDocument.saveIncremental(PDDocument.java:1410) at br.com.luisjustin.engines.PADES.signPDF(PADES.java:297) at br.com.luisjustin.PlaygroundSingByP12.main(PlaygroundSingByP12.java:56)

package br.com.luisjustin;

import br.com.luisjustin.engines.PADES;
import br.com.luisjustin.models.SignFile;
import org.demoiselle.signer.core.keystore.loader.KeyStoreLoader;
import org.demoiselle.signer.core.keystore.loader.factory.KeyStoreLoaderFactory;

import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.util.Base64;
import java.util.Enumeration;
import java.util.Properties;

public class PlaygroundSingByP12 {

    public static void main(String[] args) throws IOException {

        InputStream configFile = new FileInputStream("C:/config.properties");
        Properties prop = new Properties();
        prop.load(configFile);

        SignFile file = new SignFile();
        file.setFileB64(prop.getProperty("pdfBase64"));
        file.setCertBase64(true);

        String b64Cert = "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";

        file.setCertB64(b64Cert);

        System.out.println("------------------------------");
        System.out.println(file.getFileID());
        System.out.println(file.getFileB64());
        System.out.println("------------------------------");

        if ( file.isCertBase64() ) {
            file.setFileCertificate("1");
        }

        byte[] pdfContent = Base64.getDecoder().decode(file.getFileB64());
        PADES pades = new PADES();

        int numberOfSigns = pades.getNumberOfSigns(pdfContent);

        if( numberOfSigns == 0 ) {
            pdfContent = pades.addSignPage(pdfContent);
        }

        if( numberOfSigns == 0) {
            pdfContent = pades.signPDF(pdfContent, file, "Signature1", numberOfSigns);
        }else{
            pdfContent = pades.signPDF(pdfContent, file, "Signature" + (numberOfSigns + 1), numberOfSigns);
        }

//        String b64Encoded = Base64.getEncoder().encodeToString(pdfContent);
//        file.setFileB64(b64Encoded);

    }
}
@esaito
Copy link
Member

esaito commented May 12, 2022

O certificado final usado para assinatura não pode ser auto-assinado, precisa de no mínimo um nível acima. No caso daqueles emitido pela SafeWeb OK.
Nestes casos precisa implementar seu componente de cadeia, use esse como exemplo: https://github.com/demoiselle/signer/tree/master/chain-icp-brasil-homolog.

@HelloWar75
Copy link
Author

O certificado final usado para assinatura não pode ser auto-assinado, precisa de no mínimo um nível acima. No caso daqueles emitido pela SafeWeb OK. Nestes casos precisa implementar seu componente de cadeia, use esse como exemplo: https://github.com/demoiselle/signer/tree/master/chain-icp-brasil-homolog.

Implementando resolvo o problema de DER ? pois o DER acontece esse problema quando envio via base64 se instalar ele no Windows ele roda dai só da o problema de politica.

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

No branches or pull requests

2 participants