GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso stampare/visualizzare il nome dell'entità utente o l'UPN di un certificato p12 su Linux?

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


Linux
  1. Come modificare la variabile PATH in Linux

  2. Come impostare il nome di un thread nei pthread di Linux?

  3. Come ottengo il nome utente in un Makefile?

  4. Di quanti gruppi Unix può far parte un utente?

  5. Come posso modificare $ PATH su Linux?

Come utilizzare il comando usermod in Linux

Come rimuovere l'utente in Linux utilizzando la riga di comando

Come conoscere i gruppi di un utente Linux

Come utilizzare il comando id in Linux:5 esempi utili

Come utilizzare il comando ulimit in Linux

Come modificare il nome host su Debian Linux