FrameworkDemoiselle.gov.brCommunity Documentation
Este componente provê mecanismos de assinatura digital baseado nas normas ICP-Brasil e implementa mecanismos de assinatura digital no formato XML
O padrão xades define o formato para assinatura. E a ICP-Brasil define um conjunto próprio de informações básicas para as assinaturas digitais chamado PBAD
A interface org.demoiselle.signer.policy.impl.xades.xml.Signer
provê as funcionalidades de Assinatura.
Para as funções de VALIDAÇÃO temos a interface org.demoiselle.signer.policy.impl.xades.xml.Checker
Este componente, até a presente versão, permite assinar no formato Enveloped (A Assinatura passa ser parte do documento) e Detached Envloped (Assinatura Desanexada).
Para Assinar em XML Enveloped, a entrada deve ser um arquivo em formato XML.
A seguir temos um fragmento de código que demonstra a utilização do componente nesta funcionalidade
Keystore ks = getKeyStoreTokenBySigner();
File newFile = new File("caminho para o arquivo");
String alias = getAlias(ks);
XMLSigner xmlSigner = new XMLSigner();
// para A3
xmlSigner.setPrivateKey((PrivateKey) ks.getKey(alias, null));
// para A1
// quando certificado em arquivo, precisa informar a senha
// char[] senha = "senha".toCharArray();
// xmlSigner.setPrivateKey((PrivateKey) ks.getKey(alias, senha));
xmlSigner.setCertificateChain(ks.getCertificateChain(alias));
// o par�mentro true � para diferenciar do m�todo que recebe uma String contendo um XML
Document doc = xmlSigner.signEnveloped(true, newFile.getPath());
Keystore ks = getKeyStoreTokenBySigner();
File newFile = new File("caminho para o arquivo");
String alias = getAlias(ks);
XMLSigner xmlSigner = new XMLSigner();
// para A3
xmlSigner.setPrivateKey((PrivateKey) ks.getKey(alias, null));
// para A1
// quando certificado em arquivo, precisa informar a senha
// char[] senha = "senha".toCharArray();
// xmlSigner.setPrivateKey((PrivateKey) ks.getKey(alias, senha));
xmlSigner.setCertificateChain(ks.getCertificateChain(alias));
// para mudar a politica de Assinatura
xmlSigner.setPolicyId(XMLPoliciesOID.AD_RT_XADES_2_4.getOID());
// indicando o local do arquivo XML
Document doc = xmlSigner.signEnveloped(true, newFile.getPath());
Abaixo um trecho de código exemplo:
KeyStore ks = getKeyStoreTokenBySigner();
File newFile = new File("caminho para o arquivo");
String alias = getAlias(ks);
XMLSigner xmlSigner = new XMLSigner();
// para A3
xmlSigner.setPrivateKey((PrivateKey) ks.getKey(alias, null));
// para A1
// quando certificado em arquivo, precisa informar a senha
// char[] senha = "senha".toCharArray();
// xmlSigner.setPrivateKey((PrivateKey) ks.getKey(alias, senha));
xmlSigner.setCertificateChain(ks.getCertificateChain(alias));
Document doc = xmlSigner.signDetachedEnveloped(newFile.getPath());
A seguir temos um fragmento de código que demonstra a utilização do componente nesta funcionalidade
File newFile = new File("caminho para o arquivo");
XMLChecker xadesChecker = new XMLChecker();
xadesChecker.check(true, newFile.getPath());
List<XMLSignatureInformations> results = new ArrayList<XMLSignatureInformations>();
results = xadesChecker.getSignaturesInfo();
public class SignatureInformations {
private LinkedList<X509Certificate> chain; // cadeia do certificado que gerou a assinatura
private Date signDate; // data do equipamento no momento da gera��o das assinatura (n�o tem validade legal)
private Timestamp timeStampSigner = null; // Carimbo de tempo da assinatura, quando a politica utilizada permitir
private XMLSignaturePolicy signaturePolicy; // Politica ICP-BRASIL usada para gera��o da assinatura
private Date notAfter; // data de vencimento do certificado que produziu a assinatura
private LinkedList<String> validatorWarnins = new LinkedList<String>(); // Lista de avisos que por ventura possam ter sido encontrados na valida��o da assinatura
private LinkedList<String> validatorErrors = new LinkedList<String>(); // Lista de erros que por ventura possam ter sido encontrados na valida��o da assinatura
private boolean invalidSignature = false; // Se a assinatura � v�lida
private BasicCertificate icpBrasilcertificate = null; // Class que representa o certificado no padr�o ICP-Brasil que produziu a Assinatura
List<XMLSignatureInformations> results = new ArrayList<XMLSignatureInformations>();
results = xadesChecker.getSignaturesInfo();
if (!results.isEmpty()) {
for (XMLSignatureInformations sis : results) {
for (String valErr : sis.getValidatorErrors()) {
System.err.println("++++++++++++++ ERROS ++++++++++++++++++");
System.err.println(valErr);
}
for (String valWarn : sis.getValidatorWarnins()) {
System.err.println("++++++++++++++ AVISOS ++++++++++++++++++");
System.err.println(valWarn);
}
if (sis.getSignaturePolicy() != null) {
System.out.println("------ Politica ----------------- ");
System.out.println(sis.getSignaturePolicy().toString());
}
BasicCertificate bc = sis.getIcpBrasilcertificate();
System.out.println(bc.toString());
if (bc.hasCertificatePF()) {
System.out.println(bc.getICPBRCertificatePF().getCPF());
}
if (bc.hasCertificatePJ()) {
System.out.println(bc.getICPBRCertificatePJ().getCNPJ());
System.out.println(bc.getICPBRCertificatePJ().getResponsibleCPF());
}
if (sis.getTimeStampSigner() != null) {
System.out.println(sis.getTimeStampSigner().toString());
}
}
}