Certificados digitais no Windows

24 respostas
T

Pra onde vai os certificados digitais instalados no Windows? Pro registro?? pq o firefox nao carrega a mesma lista de certificados do IE? Alguém sabe??

Estou desenvolvendo uma aplicação que precisa listar todos certificados “instalados na máquina”, em .NET eles usam a DLL CAPICOM pra isso, é a mesma fonte q o IE usa pra carregar essa lista. Mas o Firefox nao usa, nao consigo importar estes certificados da máquina pro Firefox nem muito menos listá-los sem usar essa tal CAPICOM. Alguém pode me elucidar melhor sobre isso???

Desde já agradeço a atenção

24 Respostas

T

Para uma conta do titio Bill, que agora está nas Ilhas Cayman, mas vai ser transferida para um outro paraíso fiscal.

Brincadeirinha - eles ficam implantados no Registry, em formato criptografado. É necessário usar a MS CryptoAPI para acessá-los.

Se você puder usar o Mustang, ele disponibiliza um novo provedor (SunMSCAPI) que pode acessar esses tais certificados via MS CryptoAPI.

Senão, você vai ter de meter a mão no bolso para pagar alguém que forneça um JCE Provider que acesse a CryptoAPI. Não sei assim de “bate-pronto” quem fornece esse tal provider.

T

Vlw Thingoll!! Salvando minha pele denovo!! ^^

T

Os certificados instalados no Firefox estão em um outro lugar, e são acessados via NSAPI (API do Netscape para segurança).
Eles ficam em um arquivo do tipo BerkeleyDB, só que criptografados também.
Se você precisa listar os certificados do Firefox, faça uma aplicação em JavaScript do Firefox mesmo, não em Java.

T

O q vc quis dizer com JavaScript do Firefox?? Não entendi bem, eu sei q usando em JavaScript “navigator.algumaCoisa” eu pego familia, versao e etc do browser. Mas eu consigo usar a NSAPI via JavaScript tbm??

T

O JavaScript do Firefox tem um caminhão de objetos prontos, só não sei se ele tem algum que manipula certificados digitais. Se não houver isso é necessário escrever uma extensão do Firefox em C (XPI). Não cheguei a mexer com isso, por isso é que estou só dizendo as linhas gerais.

T

Tu indica um site onde eu possa pegar a referencia desses objetos do javaScript do firefox?? tipo o da api da sun… aki no google ta duído

T

Baixe o fonte do Firefox e procure (he he he) - brincadeirinha, deve haver alguma área do site www.mozilla.com que seja para “developers”. Faz tanto tempo que não visito a parte de “developers” do site Mozilla que nem sei mais onde é que fica isso.

I

Repositório do windows:

  1. Use o mustang (conforme indicado pelo thingol)
  2. https://download.assembla.se/jceprovider/, não é fantástico (pelo menos quando eu usei, já faz um tempo) mas para listar certificados funciona.

Firefox:

  1. http://www.mozilla.org/projects/security/pki/jss/, em especial org.mozilla.jss.CryptoManager
  2. Use via pkcs11 - o jdk 1.5+ tem um provider para pkcs11 e para jdk’s anteriores a ibm tinha um (esqueci o link) - e monte no soft-token que a NSS usa para ser o repositório de chaves e certificados.

qualquer coisa grita…

ps- a “NSAPI” é um termo altamente dilatado, normalmente associado ao processamento de request/response do http server da netscape, à la ISAPI do IIS, para catar no google essa parte de segurança do mozilla procure por “NSS” (http://www.mozilla.org/projects/security/pki/nss/)

ps2- se tiver alguma viagem (não duvido nada :lol: ) nesse post, manda pirão - eu sou o 1o. interessado :wink:

T

Obrigado, IndyanaJones.
a) Não lembrava mais que era NSS (NSAPI é o ISAPI do Netscape/Sun Web Server).
b) Não lembrava mais que o provider era o tal do Assembla.

I

:wink:

eu tive a minha via crucis quando eu tive que escrever um módulo pkcs11 para a NSS e um CSP para o explorer. Ainda acordo gritando no meio da noite por causa daquelas coisas :smiley:
Por incrível que possa parecer, neste ponto em particular, a documentação da mozilla é bem, bem melhor do que a da microsoft - tanto em termos de clareza como riqueza de detalhes…

T

Se você precisa de algo da Microsoft a respeito de CSPs, tem de contratar um especialista deles. Acho que no Brasil a Microsoft só tem um especialista sobre isso, e a Microsoft cobra caríssimo - só para contratá-lo é necessário pagar uma reunião com o superior dele. (Participei da tal reunião também).

T

Brigado indyana e thingol… agora to procurando e lendo aki… qualquer coisa volto a incomodar vcs…^^

T

E quanto a essa tal de Bouncy Castle? Ela só manipula certificados que nao estejam criptografados ou só q nao estejam no registro do windows??

T

O BouncyCastle não lida com essa parte de hardware.
É mais especializada em implementar algoritmos e formatos de dados criptográficos. Por exemplo, se você quiser mandar um email PGP ou S/MIME criptografado e assinado, é a biblioteca a ser usada.

T

Certo… entendi… agora estou começando a entender ao menos pra q serve cada uma desses tantas APIS, JCEs, Providers e etc.^^

já é um bom começo!!

Vcs ainda vão me ver fazendo algo útil a nao ser perguntar… hehehe

T

Cara, essa Assembla faz tudo q eu tava precisando com relação a Certificados no registro do windows.
Esse código abaixo lista os certificados instalados dependendo do tipo q vc expecifica, ex. Se MY ele exibe todos "pessoais".
Muito bom!! Perfeito!! ^^

//Print out information of each certificate that
//is stored in your 'Other People' store.
//The following stores are supported:
// MY = Personal
// ADDRESSBOOK = Other People
// CA = Intermediate Certification Authorities
// ROOT = Trusted Root Certification Authorities
import java.security.*;
import java.security.cert.*;
import java.util.*;
import se.assembla.jce.provider.ms.*;

public class CertStoreTest {
	public static void main(String[] args) {

		try {
			Security.insertProviderAt(new MSProvider(), 2);
			CertStore store = CertStore.getInstance("MY",
					new CollectionCertStoreParameters(), "assembla");
			Collection c = store.getCertificates(null);
			System.out.println("Found " + c.size()
					+ " certificate(s) in 'Other People' store");
			Iterator i = c.iterator();
			while (i.hasNext()) {
				System.out.println("\nCertificate:\n"
						+ (X509Certificate) i.next());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
L

E como eu faço para listar os certificados revogados que estão dentro do registro do windows?

T

Liste os certificados, e cheque um por um se eles estão revogados. Para checar isso é necessário obter a informação de CRL, recuperar a CRL, e verificar na CRL se ele está revogado. (argh)

V

Aproveitando o tópico, utilizo a assembla para listar os certificados pessoais, e estou tentando fazer o mesmo só que utilizando SunMSCapi só que até o momento não obtive sucesso. alguém de vcs já conseguiram fazer esse feito !?

S

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.

[email removido]

T

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

C

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!

A

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

C

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

Criado 5 de maio de 2006
Ultima resposta 21 de set. de 2011
Respostas 24
Participantes 9