Assinatura Digital - Obtendo informações do Certificado

Boa tarde,

Buscando algumas informações do Certificado Digital, para além da verificação da assinatura fazer outras validações necessarias
ao sistema que trabalho (ex: verificar se o certificado pertence ao usuario logado no sistema), nao encontrei na classe Certificate
nada do tipo.

No toString() do objeto Certificate achei tais informações.
Logico, usar substring nisso é bem tosco entao gostaria de saber se alguem ai conhece o objeto certo pra obter essas informações do Certificado.

Abraços

O certificado (java.security.cert.Certificate) normalmente é um java.security.cert.X509Certificate; veja os diferentes métodos desse X509Certificate.

Entretanto, certas coisas, como as extensões (como as que são necessárias para você verificar em certificados emitidos dentro do ICP-Brasil), são mais difíceis de destrinchar, e talvez você precise pegar o certificado bruto (obtido pelo método getEncoded de java.security.cert.Certificate) e abra o ASN.1 usando alguma API do BouncyCastle.

Vlw thingol. Tenho o bouncyCastle no projeto aqui.

Abraços

Galera,

 Aproveitando este tópico, podem me dar um help de como usar o pacote bouncyCastle para certificado digital? Preciso realizar a critptografia (chave pública) de uma mensagem de um chat e descriptografia (chave privada) desta mesma informação.

Grato.

Raphael

Thingol, as informacoes que vc consegue extrair do certificado padrao ICP-Brasil, incluem o CNPJ/CPF, mesmo que esta informacao nao esteja presente no CN do subject, ex.: CN=MEU CLIENTE LTDA, OU=(EM BRANCO), OU=ICP-BRASIL…
Pela informacao do suporte da Certisign, para certificados com uso definido na NFe, a CA nao precisa incluir o CNPJ no nome, o que acontece obrigatoriamente em um e-CNPJ (CN=MEU CLIENTE LTDA:01001001000100, …).
Poderia detalhar mais esta solucao?

Grato

Alencar

O local correto onde deve ser encontrado o CNPJ é na extensão SubjectAlternativeName, que deve conter um campo otherName, cujo OID é 2.16.76.1.3.3; não no CN. Para mais detalhes, olhe o seguinte documento:

http://www.iti.gov.br/twiki/pub/Certificacao/Resolucoes/RESOLU__O_41_DE_18_04_2006.PDF

(Concordo que essa documentação é difícil de entender, mas é por isso que muita gente cobra uma nota preta para ter conformidade com a ICP-Brasil.)

[quote=thingol]O local correto onde deve ser encontrado o CNPJ é na extensão SubjectAlternativeName, que deve conter um campo otherName, cujo OID é 2.16.76.1.3.3; não no CN. Para mais detalhes, olhe o seguinte documento:

http://www.iti.gov.br/twiki/pub/Certificacao/Resolucoes/RESOLU__O_41_DE_18_04_2006.PDF

(Concordo que essa documentação é difícil de entender, mas é por isso que muita gente cobra uma nota preta para ter conformidade com a ICP-Brasil.)[/quote]

Li em um post seu de 2006 (http://www.guj.com.br/posts/list/41287.java) sobre este acesso.
Na versao 1.6 do java ja deve existir classes de acesso a campos ASN.1, nao?
Poderia nos dar alguma dica?

Grato pela atencao

As classes de acesso a ASN.1 não fazem parte da API oficial (java.security.* ou javax.security.* ); se quiser deixar seu programa dependente da JVM da Sun (o que pode ser um péssimo negócio se você tiver de implantar seu programa em um IBM WebSphere), há algumas classes com.sun.* que fazem isso. Na JVM da IBM há outras classes com.ibm.* que também fazem isso, mas de forma diferente.

Eu prefiro usar o BouncyCastle ( http://www.bouncycastle.org ) para evitar esses problemas de deployment; para quem me perguntou como obter os campos OtherName, veja o pedaço de código que postei em ( http://www.guj.com.br/posts/list/41287.java ) .

[quote=thingol]
Eu prefiro usar o BouncyCastle ( http://www.bouncycastle.org ) para evitar esses problemas de deployment; para quem me perguntou como obter os campos OtherName, veja o pedaço de código que postei em ( http://www.guj.com.br/posts/list/41287.java ) . [/quote]

Feito amigo. consegui capturar o CNPJ testando se OID = “2.16.76.1.3.3” (teste if (otherName.first.toString.equals…)

Obrigado pela atencao dispensada.

Alencar