Assinatura Digital - Obtendo informações do Certificado  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
fabim
GUJ Master
[Avatar]

Membro desde: 14/12/2006 19:30:03
Mensagens: 1268
Localização: Vitoria - Espirito Santo
Offline

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

ειπεν αυτη ο ιησους εγω ειμι η αναστασις και η ζωη ο πιστευων εις εμε καν αποθανη ζησεται

Sun Certified Web Component Developer
Sun Certified Java Programmer
Sun Certified Java Associate
Sun Certified Business Component Developer - Em Andamento
Bacharelando em Sistemas de Informacao


[MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

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.
[WWW]
fabim
GUJ Master
[Avatar]

Membro desde: 14/12/2006 19:30:03
Mensagens: 1268
Localização: Vitoria - Espirito Santo
Offline

Vlw thingol. Tenho o bouncyCastle no projeto aqui.

Abraços

ειπεν αυτη ο ιησους εγω ειμι η αναστασις και η ζωη ο πιστευων εις εμε καν αποθανη ζησεται

Sun Certified Web Component Developer
Sun Certified Java Programmer
Sun Certified Java Associate
Sun Certified Business Component Developer - Em Andamento
Bacharelando em Sistemas de Informacao


[MSN]
_rapha_
Debugger

Membro desde: 08/12/2006 16:10:50
Mensagens: 52
Offline


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
philler
JavaTeenager
[Avatar]

Membro desde: 26/11/2007 18:34:06
Mensagens: 188
Offline

thingol wrote:
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.


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
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

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.)
[WWW]
philler
JavaTeenager
[Avatar]

Membro desde: 26/11/2007 18:34:06
Mensagens: 188
Offline

thingol wrote: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.)


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
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

philler wrote:
Na versao 1.6 do java ja deve existir classes de acesso a campos ASN.1, nao?


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 ) .
[WWW]
philler
JavaTeenager
[Avatar]

Membro desde: 26/11/2007 18:34:06
Mensagens: 188
Offline

thingol wrote:
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 ) .


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
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team