Pessoal,
tenho um certificado no formato X-509, ele tem um campo especial. Posso pegar o valor desse campo usando o metodo java.security.cert.X509Certificate.getExtensionValue(String).
Este metodo retorna um array de bytes.
- Como posso converter o valor desse campo para o seu valor real em String?
- Esse array de bytes esta em que base (hexa, octa, etc…)?
Apos pesquisar eu vi que o array de bytes retornado eh um octeto no formato DER. Como eu posso converter esse octeto??
Obrigado.
Você precisa aprender um pouco sobre ASN.1, visto que mesmo se você usar uma biblioteca (como o BouncyCastle, http://www.bouncycastle.org ) é necessário saber o que é SEQUENCE, SEQUENCE OF, CHOICE, SET, PrintString, UniversalString, IA5String, BIT STRING, PrintableString, OID etc.
Pegue as dicas sobre ASN.1 em:
http://asn1.elibel.tm.fr/
http://www.oss.com
Use o seguinte programa para “disassemblar” um certificado X.509:
dumpasn1
(você pode pegar o fonte em C em: http://www.cs.auckland.ac.nz/~pgut001/ )
Consegui,
Os campos do certificado sao tratados como extensoes, porem alguns sao convertidos automaticamente, como por exemplo o Subject.
os campos do certificado sao octetos no formato DER onde a terceira posicao do octeto eh o valor armazenado.
Converti o campo especial para um octeto DER, isso me devolveu o valor do campo em formato decimal, a partir dai foi tranquilo.