O arquivo PKCS # 12 geralmente contém um certificado X.509 e sua chave privada associada. Todas as informações são armazenadas no certificado, então você precisa extraí-las primeiro:
openssl pkcs12 -in foo.p12 -out foo.pem
( foo.pem
conterá o certificado e a chave privada.)
O UPN é armazenado como um tipo especial de "subjectAltName" no certificado. Infelizmente, o OpenSSL ainda não sabe como exibir UPNs (assim como alguns outros tipos de nomes), portanto o comando usual para examinar certificados ( openssl x509 -noout -text < foo.pem
) não funcionará. Em vez disso, você precisará de ferramentas de baixo nível.
Separe o certificado para um arquivo próprio (você também pode fazer isso com um editor de texto):
openssl x509 < foo.pem > foo.cert
Imprimir o certificado como uma estrutura ASN.1:
openssl asn1parse -i -dump < foo.cert
Encontre as linhas que descrevem a extensão subjectAltName:
742:d=4 hl=3 l= 200 cons: SEQUENCE
745:d=5 hl=2 l= 3 prim: OBJECT :X509v3 Subject Alternative Name
750:d=5 hl=3 l= 192 prim: OCTET STRING [HEX DUMP]:3081BDA036...
E execute asn1parse
novamente, desta vez dizendo para aprofundar o conteúdo da extensão (que é uma outra estrutura ASN.1) - neste exemplo, o valor (linha "OCTET STRING") começa no deslocamento 750 :
openssl asn1parse -i -dump -strparse 750 < foo.cert
Finalmente, procure o UPN no despejo:
59:d=1 hl=2 l= 40 cons: cont [ 0 ]
61:d=2 hl=2 l= 10 prim: OBJECT :Microsoft Universal Principal Name
73:d=2 hl=2 l= 26 cons: cont [ 0 ]
75:d=3 hl=2 l= 24 prim: UTF8STRING :[email protected]
Se você tiver as ferramentas GnuTLS instaladas, há um caminho mais rápido, mas não tão confiável. Depois de extrair o certificado, você poderá alimentá-lo com certtool -i < foo.cert
e imprimir o conteúdo bruto até mesmo de nomes que ele não reconhece:
Subject Alternative Name (not critical):
otherName OID: 1.3.6.1.4.1.311.20.2.3
otherName DER: 0c1867726177697479404e554c4c524f5554452e45552e4f5247
otherName ASCII: [email protected]
Procure o OID 1.3.6.1.4.1.311.20.2.3
; será seguido pelo conteúdo bruto do nome. Felizmente, eles consistem em uma única UTF8String, então a saída "otherName ASCII" é facilmente entendida - apenas tire os dois primeiros bytes (mostrados como pontos aqui).
Uma maneira mais simples seria apenas tentar entrar no seu próprio login do Windows; o UPN está sempre no formato username@domain
.
(É um pouco triste que, de todas as ferramentas que eu tentei, quase nenhum deles saiba como interpretar tipos de nome tão simples e comumente usados - mesmo que proprietários -).