Git Product home page Git Product logo

Comments (6)

esaito avatar esaito commented on June 3, 2024

Boa tarde,

Está seguindo esse exemplo:?

https://github.com/demoiselle/signer/blob/master/policy-impl-cades/src/test/java/org/demoiselle/signer/policy/impl/cades/pkcs7/impl/CAdESSignerTest.java

from signer.

williamargenton avatar williamargenton commented on June 3, 2024

Bom dia! Analisei o exemplo que você informou, meu algorítimo está na mesma linha, setei as informações necessárias para realizar a assinatura. Para fins de entendimento, segue a instrução problemática:

for (AlgAndLength algLength : signaturePolicy.getSignPolicyInfo().getSignatureValidationPolicy()
				.getCommonRules().getAlgorithmConstraintSet().getSignerAlgorithmConstraints().getAlgAndLengths()) {
			listOfAlgAndLength.add(algLength);
		}
signaturePolicy.getSignPolicyInfo().getSignatureValidationPolicy().getCommonRules()

Até esse get, tudo ok, porém, quando é chamado o próximo get, o objeto está null

signaturePolicy.getSignPolicyInfo().getSignatureValidationPolicy().getCommonRules().getAlgorithmConstraintSet() 

Por algum motivo, no momento de converter o arquivo que recebo da rede ( "http://politicas.icpbrasil.gov.br/PA_AD_RB_v2_3.der") para um objeto java, não está caindo em nenhuma condição do case no método parse da classe CommonRules.

from signer.

danilo-flexdoc avatar danilo-flexdoc commented on June 3, 2024

Também estou recebendo este erro no momento da assinatura, nos meus teste observei que o problema é a versão do Bouncy Castle, eu estava justamente tentando atualizar para uma versão mais nova (1.70) que não possui vulnerabilidade, mas pelo que vi a assinatura só funciona se utilizar a versão 1.62 que possui 1 vulnerabilidade, @esaito existe plano para uma atualização da dependência?

from signer.

esaito avatar esaito commented on June 3, 2024

Também estou recebendo este erro no momento da assinatura, nos meus teste observei que o problema é a versão do Bouncy Castle, eu estava justamente tentando atualizar para uma versão mais nova (1.70) que não possui vulnerabilidade, mas pelo que vi a assinatura só funciona se utilizar a versão 1.62 que possui 1 vulnerabilidade, @esaito existe plano para uma atualização da dependência?

Existe sim, por enquanto o que falta é tempo para desenvolvimento. Houve um colega da comunidade que chegou a fazer o upgrade e submeteu o código mas acabou quebrando uma outra parte que monta os atributos da ICP-Brasil, o código ficou neste branch: https://github.com/demoiselle/signer/tree/revert-346-master

from signer.

esaito avatar esaito commented on June 3, 2024

Bom dia! Analisei o exemplo que você informou, meu algorítimo está na mesma linha, setei as informações necessárias para realizar a assinatura. Para fins de entendimento, segue a instrução problemática:

for (AlgAndLength algLength : signaturePolicy.getSignPolicyInfo().getSignatureValidationPolicy()
				.getCommonRules().getAlgorithmConstraintSet().getSignerAlgorithmConstraints().getAlgAndLengths()) {
			listOfAlgAndLength.add(algLength);
		}
signaturePolicy.getSignPolicyInfo().getSignatureValidationPolicy().getCommonRules()

Até esse get, tudo ok, porém, quando é chamado o próximo get, o objeto está null

signaturePolicy.getSignPolicyInfo().getSignatureValidationPolicy().getCommonRules().getAlgorithmConstraintSet() 

Por algum motivo, no momento de converter o arquivo que recebo da rede ( "http://politicas.icpbrasil.gov.br/PA_AD_RB_v2_3.der") para um objeto java, não está caindo em nenhuma condição do case no método parse da classe CommonRules.

Chegou a executar o teste do código de exemplo?
Tem como compartilhar o seu código completo?

from signer.

williamargenton avatar williamargenton commented on June 3, 2024

Sim tentei executar o teste do código de exemplo.
Está ainda não é a versão final, mas segue os métodos.

	public synchronized byte[] assinarDigitalmenteOnline(String senha, String uuid, Documento documento)
			throws NoSuchAlgorithmException, CertificateException, KeyStoreException, IOException,
			UnrecoverableKeyException {
		
                CAManagerConfiguration config = CAManagerConfiguration.getInstance();
		config.setCached(false);
		ConfigurationRepo configRepo = ConfigurationRepo.getInstance();

		configRepo.setOnline(false);
		configRepo.setCrlPath("/tmp/crl_cache/");
	
		configRepo.setOnlineLPA(false);
		configRepo.setLpaPath("/tmp/lpa/");
		
		TimeStampConfig tsConfig = TimeStampConfig.getInstance();
		tsConfig.setTimeOut(100);
		tsConfig.setConnectReplay(5);

		CertificadoICPBrasil certficado = this.carregarCertificado(senha, uuid);
		byte[] doc = this.downloadDocumento(documento);

		KeyStore ks = this.criarKeyStore(uuid, senha);
		
		PKCS7Signer signer = PKCS7Factory.getInstance().factoryDefault();
		signer.setCertificates(ks.getCertificateChain(certficado.getAlias()));
		signer.setPrivateKey((PrivateKey) ks.getKey(certficado.getAlias(), senha.toCharArray()));
		
		signer.setAlgorithm(SignerAlgorithmEnum.SHA512withRSA);
		if (System.getProperty("os.name").contains("indows")) {
			signer.setAlgorithm(SignerAlgorithmEnum.SHA256withRSA);
		}		
		return signer.doDetachedSign(doc);
	}


private synchronized KeyStore criarKeyStore(String uuid, String senha) {
		return KeyStoreLoaderFactory.factoryKeyStoreLoader(new ByteArrayInputStream(this.downloadCertificado(uuid)))
				.getKeyStore(senha);
}

private CertificadoICPBrasil carregarCertificado(String senha, String uuid)
			throws NoSuchAlgorithmException, CertificateException, KeyStoreException, IOException {
	return CertificadoUtil.carregarCertificado(this.downloadCertificado(uuid), senha);
}


public class CertificadoUtil {
	
	public synchronized static CertificadoICPBrasil carregarCertificado(byte[] certificado, String senha)
			throws NoSuchAlgorithmException, CertificateException, IOException, KeyStoreException {
		
		X509Certificate x509 = null;
		InputStream cert = new ByteArrayInputStream(certificado);
		KeyStore ks = KeyStore.getInstance("PKCS12");
		ks.load(cert, senha.toCharArray());
		CertificadoICPBrasil certificadoICPBrasil = null;
		
		Enumeration<String> enumeration = ks.aliases();
		while (enumeration.hasMoreElements()) {
			String alias = enumeration.nextElement();
			x509 = (X509Certificate) ks.getCertificate(alias);
			CertificateManager cm = new CertificateManager(x509);
			certificadoICPBrasil = cm.load(CertificadoICPBrasil.class);
			certificadoICPBrasil.setAlias(alias);
		}
		return certificadoICPBrasil;
	}
}

OBS: Utilizo o SpringBoot, e já verifiquei tanto o certificado, KeyStore, PrivateKey, CertificateChain, e o próprio documento, e nenhum desses objetos estão nulos.

from signer.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.