El archivo PKCS#12 normalmente 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 los 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
Busque 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 ejecuta 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 "OCTET STRING") comienza en el desplazamiento 750:
openssl asn1parse -i -dump -strparse 750 < foo.cert
Finalmente, busque el UPN en el basurero:
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]
Si tiene herramientas GnuTLS instaladas, hay una forma 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 sin procesar 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: [email protected]
Busque el OID 1.3.6.1.4.1.311.20.2.3
; será seguido por el contenido sin procesar del nombre. Afortunadamente, consisten en una única cadena UTF8String, por lo que la salida "otherName ASCII" se entiende fácilmente:simplemente elimine los dos primeros 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; el UPN siempre tiene la forma [email protected]
.
(Es un poco triste que, de todas las herramientas que he probado, casi ninguna sabe cómo interpretar tipos de nombres tan simples y de uso común, incluso si son propietarios).