Certificados digitais no Windows

Ola…
Gostaria de obter informações de como criar um modulo em java para assinatura eletronica…
vc tem alguma ideia de como fazer ou pelo menos qual biblioteca utilizar ja que a capicom.dll não tem como utilizar no java.
Criei um modulo de assinatura digital no formato pkcs#7 x.509 mais em pascal (Delphi) se tiver alguma ideia fovor entrar em contato.

soulslinux@hotmail.com

Beeem, vou reviver isso e ver se o pessoal é bom da memória ahahaha…

Galerinha, isso ainda procede? Não achei essa biblioteca em lugar nenhum do Assembla…

Preciso de um método para acessar Certificados Digital A1 e mostrar a validade do mesmo…

Att. Jonas

Ola TheKill,

Existe meios de você obter a validade de um certificado em java. Uma forma seria obtendo um X509Certificate do seu certificado, e assim obter a data de vencimento.
Um exemplo seria assim:

Aqui carrego o certificado:

try {
                    entrada = new FileInputStream(ParametroTotem.caminhoCertificadoDigital);
                    KeyStore ks = KeyStore.getInstance("pkcs12");
                    ks.load(entrada, senhaCertificado.toCharArray());
                } catch (IOException IOEx) {
                    JOptionPane.showMessageDialog(null, "Não foi possivel carregar o certificado! Verifique o caminho ou a senha do certificado!");
                }

KeyStore.PrivateKeyEntry pkEntry = null;
        Enumeration aliasesEnum = ks.aliases();
        PrivateKey privateKey = null;
        while (aliasesEnum.hasMoreElements()) {
            String alias = (String) aliasesEnum.nextElement();
            if (ks.isKeyEntry(alias)) {
                pkEntry = (KeyStore.PrivateKeyEntry) ks.getEntry(alias, new KeyStore.PasswordProtection(senhaCertificado.toCharArray()));
                privateKey = pkEntry.getPrivateKey();
                break;
            }
        }

E aqui eu verifico a validade:

public static boolean getValidade(X509Certificate cert) {
        try {
            cert.checkValidity();
            return true;
        } catch (CertificateExpiredException e) {
            JOptionPane.showMessageDialog(null, "Certificado expirado! Seu Certificado já venceu\nentre em contato com uma unidade certificadora\ne renove seu certificado!", "Validação do Certificado", JOptionPane.ERROR_MESSAGE);
            return false;
        } catch (CertificateNotYetValidException e) {
            JOptionPane.showMessageDialog(null, "Certificado inválido!", "Validação do Certificado", JOptionPane.ERROR_MESSAGE);
            return false;
        }
    }

Ou assim:

public static void getValidade(X509Certificate cert) {
        int diasParaVencer = UtilitarioData.getDiferencaEntreDatas(UtilitarioData.getDataInicial(UtilitarioData.getDataHoraAtual()), cert.getNotAfter());
        if (diasParaVencer <= 30) {
            JOptionPane.showMessageDialog(null, "Falta(m) " + diasParaVencer + " dia(s) para vencer o certificado!", "Validação do Certificado", JOptionPane.ERROR_MESSAGE);
        }
    }

Os métodos que você provavelmente ira usar são:

cert.getNotAfter();
            cert.checkValidity();

Existe um método que ainda não usei:

            cert.checkValidity(Date data);

Qualquer duvida posta pra gente.

vlw!

Olá, mas o documento assinado fica com a mensagem que a data não foi verificada usando os seguintes métodos acima…
Como faço para validar está data no documento ???

At

Ola antonioishac,

Acho que vc está falando de coisa diferente, eu uso esses métodos para validar um certificado do tipo A1, independente do documento que vou assinar.

A assinatura do documento e uma outra situação.

Que tipo de documento vc está assinando? É uma NF-e?

Valeu