Srs.
Trabalho com uma aplicação que utiliza assinatura digital com as bibliotecas do Bouncy Castle:
[b]- bcmail-jdk15-129.jar
- bcpg-jdk15-129.jar
- bcprov-jdk15-129.jar
- bctest-jdk15-129.jar
- bctsp-jdk15-129.jar[/b]
Para fazer a assinatura, preciso agora colocar a DataHora atual do BD junto com ela… O código que faz a assinatura é o seguinte:
/**
* Assinar o arquivo dado passando a senha. este método é privado para que a
* senha do certificado nunca deixe esta classe.
* @param arq O arquivo a ser assinado.
* @param ks O KeyStore que contém o certificado usado para assinar.
* @param alias O alias do certificado dentro de <code>ks</code> a ser
* usado para assinar.
* @param senha A senha do certificado.
* @return A assinatura do arquivo no formato PKCS#7, com a interface
* pública do certificado já anexada.
* @throws AssinaturaException Caso ocorra qualquer problema ao assinar.
*/
private static byte[] assinar(File arq, KeyStore ks, String alias, char[] senha) throws AssinaturaException {
try {
adicionarProviderBC();
if (ks != null) {
X509Certificate cert = (X509Certificate)ks.getCertificate(alias);
PrivateKey chavePrivada = (PrivateKey) ks.getKey(alias, senha);
// Obter os dados a serem assinados
BufferedInputStream entrada = new BufferedInputStream(new FileInputStream(arq));
byte[] dados = new byte[entrada.available()];
entrada.read(dados);
entrada.close();
// Configurar o "assinante"
CMSSignedDataGenerator geradorAss = new CMSSignedDataGenerator();
geradorAss.addSigner(chavePrivada, cert, CMSSignedDataGenerator.DIGEST_SHA1);
// Adicionar o certificado junto à assinatura
ListaCertificados lista = new ListaCertificados();
lista.add(cert);
CertStore certs = CertStore.getInstance("Collection", new CollectionCertStoreParameters(lista), "BC");
geradorAss.addCertificatesAndCRLs(certs);
// Efetivamente assinar os dados de entrada
CMSProcessable conteudo = new CMSProcessableByteArray(dados);
String providerName;
if (ks.getType().equalsIgnoreCase("JKS"))
providerName = BouncyCastleProvider.PROVIDER_NAME;
else
providerName = ks.getProvider().getName();
CMSSignedData dadosAssinados = geradorAss.generate(conteudo, providerName);
byte[] assinatura = dadosAssinados.getEncoded();
return assinatura;
}
} catch (java.security.KeyStoreException kse) {
throw new AssinaturaException("Erro de acesso ao banco de certificados.");
} catch (java.security.NoSuchAlgorithmException nsae) {
throw new AssinaturaException("Erro de configuração. Não é possível obter a chave privada.");
} catch (java.security.UnrecoverableKeyException uke) {
throw new AssinaturaException("Não foi possível obter a chave privada para assinar o documento. Favor verificar a senha.");
} catch (java.io.FileNotFoundException fne) {
throw new AssinaturaException("O arquivo a ser assinado não existe.");
} catch (java.io.IOException ioe) {
throw new AssinaturaException("Erro interno de leitura ao tentar assinar o arquivo.");
} catch (java.security.InvalidAlgorithmParameterException iae) {
throw new AssinaturaException("Erro interno ao tentar gerar assinatura.");
} catch (java.security.NoSuchProviderException nspe) {
throw new AssinaturaException("Erro de configuração do aplicativo.");
} catch (java.security.cert.CertStoreException cse) {
throw new AssinaturaException("Erro ao tentar adicionar certificado à assinatura.");
} catch (org.bouncycastle.cms.CMSException cmse) {
throw new AssinaturaException("Erro ao gerar a assinatura do arquivo.");
}
return null;
}
Só preciso adicionar a Data e hora na assinatura, nada mais… alguém poderia me ajudar??
Obrigado!!
[size=“11”][color=“red”]* Editado: Lembre-se de utilizar BBCode em seus códigos - Cassolato[/color][/size] :joia: