Di fronte a questa domanda, Microsoft ha risposto nel modo in cui sono abituati: con un'estensione specifica di Microsoft. Hanno definito Nome principale utente , che in realtà è una OtherName
element, l'UPN identificato da un Microsoft OID (1.3.6.1.4.1.311.20.2.3) e codificato come UTF8String
(come succintamente specificato ci ). Il formato della stringa simula quello di un indirizzo email, in quanto consiste in un nome account e un nome di dominio, uniti con un carattere '@'.
È interessante notare che sebbene l'UPN sembri un indirizzo e-mail, non è pensato per essere utilizzato per l'invio di e-mail; e, corrispondentemente, Microsoft ha non usare un elemento rfc822name
, perché tale nome trasmette la semantica basata su email (in particolare quando il certificato viene usato con S/MIME ) che l'UPN non dovrebbe incarnare.
Il "modo X.509" per codificare un nome in un certificato, il cui formato non corrisponde alle categorie predefinite, è farlo sulla stessa linea di Microsoft: usa otherName
, con un OID di tua proprietà, e definisci la tua sintassi. Ovviamente, tale nome sarà utilizzabile solo dal proprio software ... Sebbene si possa decidere di riutilizzare il formato Microsoft UPN, e quindi (possibilmente) ottenere una certa compatibilità con il software Microsoft (l'obiettivo dell'UPN è di mappare un certificato su un Account di Active Directory).
La cosa veramente importante è determinare quali sistemi software dovranno gestire il tuo "nome utente". È inutile codificare un nome utente in un certificato se i sistemi che devono decodificare quel nome utente non sanno come farlo. Ad esempio, supponiamo che il nome utente debba essere utilizzato da un sito Web alimentato da Apache, il certificato client presentato a livello SSL. La documentazione , in particolare SSLUserName
direttiva di configurazione, ci mostra che Apache può essere impostato per utilizzare alcuni campi specifici del certificato come "username", tra l'elenco completo di variabili d'ambiente gestite dal modulo SSL. Se ti trovi in quella situazione, dovrai inserire il tuo "nome utente" in uno di questi campi, non in qualche otherName
con una tua sintassi.
Guardando questi campi, direi che la tua migliore scommessa sarebbe "UID". Questo è uno dei componenti di un Distinguished Name, specificato in RFC 4519 sotto OID 0.9.2342.19200300.100.1. 1. È fondamentalmente una stringa in formato libero e mod_ssl
di Apache sa come estrarlo e trasformarlo in un nome utente con:
SSLUserName SSL_CLIENT_S_DN_UID
Come parte di un DN, questo andrebbe direttamente nel campo subjectDN
, non in un'estensione Nome alt soggetto. (Ciò solleva la questione del perché Microsoft non abbia usato quel campo "UID" per il loro UPN, suppongo che volessero a un certo punto usare il subjectDN
completo come percorso in qualche directory LDAP, e quindi non poter aggiungere altro campi a volontà nel DN.)