Il file PKCS#12 di solito contiene un certificato X.509 e la chiave privata associata. Tutte le informazioni sono memorizzate nel certificato, quindi devi prima estrarlo:
openssl pkcs12 -in foo.p12 -out foo.pem
(foo.pem
conterrà sia il certificato che la chiave privata.)
L'UPN viene archiviato come tipo speciale di "subjectAltName" nel certificato. Sfortunatamente, OpenSSL non sa ancora come visualizzare gli UPN (così come alcuni altri tipi di nomi), quindi il solito comando per esaminare i certificati (openssl x509 -noout -text < foo.pem
) non funzionerà. Invece, avrai bisogno di strumenti di basso livello.
Separa il certificato in un file a sé stante (puoi farlo anche con un editor di testo):
openssl x509 < foo.pem > foo.cert
Stampa il certificato come struttura ASN.1:
openssl asn1parse -i -dump < foo.cert
Trova le righe che descrivono l'estensione 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...
Ed esegui asn1parse
di nuovo, questa volta dicendogli di scavare più a fondo nei contenuti dell'estensione (che sono un'altra struttura ASN.1) – in questo esempio, il valore (riga "OCTET STRING") inizia all'offset 750:
openssl asn1parse -i -dump -strparse 750 < foo.cert
Infine, cerca l'UPN nel dump:
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 hai installato gli strumenti GnuTLS, c'è un modo più veloce ma non altrettanto affidabile. Una volta estratto il certificato, puoi inviarlo a certtool -i < foo.cert
, e stamperà il contenuto non elaborato anche dei nomi che non riconosce:
Subject Alternative Name (not critical):
otherName OID: 1.3.6.1.4.1.311.20.2.3
otherName DER: 0c1867726177697479404e554c4c524f5554452e45552e4f5247
otherName ASCII: [email protected]
Cerca l'OID 1.3.6.1.4.1.311.20.2.3
; sarà seguito dal contenuto grezzo del nome. Fortunatamente, sono costituiti da un'unica stringa UTF8, quindi l'output "otherName ASCII" è facilmente comprensibile:elimina semplicemente i primi due byte (qui mostrati come punti).
Un modo più semplice sarebbe semplicemente provare a inserire il proprio login di Windows; l'UPN è sempre nella forma [email protected]
.
(È un po' triste che tra tutti gli strumenti che ho provato, quasi nessuno sappia come interpretare tipi di nome così semplici e di uso comune, anche se proprietari.)