Na RFC 5280 está escrito que por exemplo X520OrganizationName
pode usar uma das seguintes codificações:
X520OrganizationName ::= CHOICE {
teletexString TeletexString
(SIZE (1..ub-organization-name)),
printableString PrintableString
(SIZE (1..ub-organization-name)),
universalString UniversalString
(SIZE (1..ub-organization-name)),
utf8String UTF8String
(SIZE (1..ub-organization-name)),
bmpString BMPString
(SIZE (1..ub-organization-name)) }
Como posso pesquisar a codificação usada em um determinado certificado X509? Existe algum comando openssl ou software semelhante?
Use o software decodificador ASN.1 DER:
OpenSSL:
openssl asn1parse -i -in Foo.crt
(asn1parse espera o formato "PEM" Base64, assim como a maioria dos outros subcomandos do openssl, mas você pode usar
-inform DER
para fornecer certificados de formato binário.)Dumpasn1 de P.Gutmann:
dumpasn1 Foo.der
(dumpasn1 requer o formato binário (não Base64). Converta o certificado em DER binário usando
openssl x509 -in Foo.crt -out Foo.der -outform DER
ou mesmo usandobase64 -d
.)asn1.js (on-line): https://lapo.it/asn1js/
(outra versão semelhante em https://pkitools.net/pages/ca/asn1.html )
O DN do assunto é um dos primeiros campos do certificado (
antesapós os dois carimbos de data e hora – o DN do emissor édepoisantes dos carimbos de data/hora); é representado como uma 'Sequência' com cada RDN sendo um 'Conjunto' (normalmente tendo um elemento, mas o formato permite múltiplos, por exemploCN=this+UID=that,OU=etc,O=etc
).Por exemplo:
Método mais específico e mais fácil de ler com OpenSSL:
Nas versões mais antigas do OpenSSL o formato padrão é PEM e você deve especificar
-inform DER
(ou abreviar-inform d
) se for aplicável. No entanto, na versão 3.0.0, que agora são as únicas versões suportadas pelo upstream, a maioria dos comandos, inclusive,x509
aceita entrada como PEM ou DER automaticamente. (asn1parse
não, porque ao contrário de outros comandos, ele não olha nem requer as linhas do rótulo PEM; seu formato 'PEM' na verdade aceita qualquer base64, a menos que você especifique a nova opção-strictpem
. Às vezes isso é útil, às vezes não.)