¿Cómo puedo imprimir / mostrar el "Nombre principal del usuario" o UPN de un certificado "p12" en Linux?


3

Mi empresa me envió un certificado para mi teléfono inteligente. El nombre del archivo es "3274634.p12". La documentación dice "Ingrese su nombre principal de usuario (UPN) como inicio de sesión" y describe cómo obtener este valor con Internet Explorer.

¿Cómo puedo hacer lo mismo en Linux (Kubuntu 13.04)?


1
De manera predeterminada, no se define "UPN" o "Nombre principal de usuario" en un archivo PKCS # 12. ¿Puede decirnos cómo funciona esto en IE? Entonces, cualquiera puede decirle cómo hacerlo en Linux.
Uwe Plonus

Respuestas:


7

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).


Cómo ... complicado pero funciona. Sólo una cosa. Se imprime :name@domain. Supongo que los dos puntos pueden / deben ser ignorados?
Aaron Digulla

1
@AaronDigulla: Sí, los dos puntos son solo parte de la salida de asn1parse. La UPN es siempre name@domain.
grawity

1
dumpasn1 También podría valer la pena intentarlo. Todavía no lo he probado en el certificado con UPN, pero su archivo de configuración incluye "OID = 1 3 6 1 4 1 311 20 2 3 Comentario = Microsoft UPN Descripción = universalPrincipalName"
armb
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.