El archivo PKCS # 12 generalmente contiene un certificado X.509 y su clave privada asociada. Toda la información se almacena en el certificado, por lo que debe extraerla primero:
openssl pkcs12 -in foo.p12 -out foo.pem
( foo.pem
contendrá tanto el certificado y la clave privada)
El UPN se almacena como un tipo especial de "subjectAltName" en el certificado. Desafortunadamente, OpenSSL aún no sabe cómo mostrar UPN (así como algunos otros tipos de nombres), por lo que el comando habitual para examinar certificados openssl x509 -noout -text < foo.pem
) no trabajará. En su lugar, necesitará herramientas de bajo nivel.
Separe el certificado en un archivo propio (también puede hacerlo con un editor de texto):
openssl x509 < foo.pem > foo.cert
Imprima el certificado como una estructura ASN.1:
openssl asn1parse -i -dump < foo.cert
Encuentra las líneas que describen la extensión 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...
Y correr asn1parse
de nuevo, esta vez diciéndole que profundice en el contenido de la extensión (que es otra estructura ASN.1); en este ejemplo, el valor (línea "Cadena OCTETA") comienza en el desplazamiento 750:
openssl asn1parse -i -dump -strparse 750 < foo.cert
Finalmente, busque la UPN en el volcado:
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 :grawity@NULLROUTE.EU.ORG
Si tiene instaladas las herramientas GnuTLS, existe una manera más rápida pero no tan confiable. Una vez que haya extraído el certificado, puede enviarlo a certtool -i < foo.cert
, e imprimirá el contenido en bruto, incluso de los nombres que no reconoce:
Subject Alternative Name (not critical):
otherName OID: 1.3.6.1.4.1.311.20.2.3
otherName DER: 0c1867726177697479404e554c4c524f5554452e45552e4f5247
otherName ASCII: ..grawity@NULLROUTE.EU.ORG
Busque el OID 1.3.6.1.4.1.311.20.2.3
; Será seguido por los contenidos en bruto del nombre. Afortunadamente, consisten en una sola UTF8String, por lo que la salida "otherName ASCII" se entiende fácilmente, simplemente elimine los primeros dos bytes (que se muestran aquí como puntos).
Una forma más sencilla sería simplemente intentar ingresar su propio inicio de sesión de Windows; La UPN está siempre en la forma. username@domain
.
(Es un poco triste que de todas las herramientas que he probado, casi ninguna de ellas sepa cómo interpretar tipos tan simples y de uso común, incluso si son de propiedad).