2. Tipi di estensione di autorizzazione
I meccanismi di estensione generali consentono ai client e ai server di negoziare se utilizzare estensioni specifiche e come utilizzarle. Come specificato in [TLS1.2], il formato di estensione utilizzato nel messaggio client hello esteso e nel messaggio server hello esteso viene ripetuto qui per comodità:
struct {
ExtensionType extension_type;
opaque extension_data<0..2^16-1>;
} Extension;
Il campo extension_type identifica un particolare tipo di estensione, e extension_data contiene informazioni specifiche per quel particolare tipo di estensione. Questo documento specifica l'uso di due nuovi tipi di estensione: client_authz e server_authz. Questi tipi di estensione sono descritti nella Sezione 2.1 e nella Sezione 2.2, rispettivamente. Questa specifica aggiunge due nuovi tipi a ExtensionType:
enum {
client_authz(7), server_authz(8), (65535)
} ExtensionType;
Le estensioni di autorizzazione sono rilevanti quando viene stabilita una sessione TLS, e questi tipi di estensione NON DEVONO apparire nel messaggio server hello esteso a meno che lo stesso tipo di estensione non appaia nel corrispondente messaggio client hello. I client NON DEVONO inviare tipi di estensione nel messaggio client hello esteso a meno che non siano preparati ad accettare le informazioni di autorizzazione associate dal server. Se un client invia l'estensione client_authz, il client DEVE anche inviare l'estensione server_authz.
Il server DEVE controllare la presenza delle estensioni client_authz e server_authz nel messaggio client hello, e DEVE rispondere con estensioni per ogni tipo di dati di autorizzazione reciprocamente supportato. Il server NON DEVE rispondere con l'estensione client_authz senza rispondere anche con l'estensione server_authz, e viceversa.
2.1. Le estensioni client_authz e server_authz
Per offrire informazioni di autorizzazione al server TLS, i client POSSONO includere un'estensione di tipo "client_authz" nel messaggio client hello esteso. Per richiedere informazioni di autorizzazione dal server TLS, i client POSSONO includere un'estensione di tipo "server_authz" nel messaggio client hello esteso. Il campo "extension_data" di ciascuna di queste estensioni DEVE contenere una ClientAuthzFormatList come descritto di seguito:
struct {
AuthorizationDataFormat authz_format_list<1..2^8-1>;
} ClientAuthzFormatList;
Il tipo AuthorizationDataFormat viene utilizzato per descrivere le informazioni di autorizzazione nel messaggio SupplementalData. Il tipo AuthorizationDataFormat è definito come segue:
enum {
x509_attr_cert(0), saml_assertion(1),
x509_attr_cert_url(2), saml_assertion_url(3), (255)
} AuthorizationDataFormat;
I tipi di dati di autorizzazione di certificato e URL di certificato DEVONO essere accompagnati da una posizione URL per il server di autorizzazione. I tipi di certificato e URL di certificato, insieme all'URL del server di autorizzazione, consentono che la decisione di autorizzazione sia presa da una terza parte, che può essere separata dal client TLS e dal server TLS.
Il significato di authz_format_list è il seguente:
-
x509_attr_cert indica che le informazioni di autorizzazione client sono un certificato di attributo (AC) X.509 [ATTRCERT].
-
saml_assertion indica che le informazioni di autorizzazione sono un'asserzione SAML [SAML1.1] [SAML2.0].
-
x509_attr_cert_url indica che le informazioni di autorizzazione sono un certificato di attributo (AC) X.509 [ATTRCERT] fornito come URI [HTTP].
-
saml_assertion_url indica che le informazioni di autorizzazione sono un'asserzione SAML [SAML1.1] [SAML2.0] fornita come URI [HTTP].
I dati di autorizzazione sono trasportati in un messaggio SupplementalData [TLSSUPP]. Il client e il server sanno quali messaggi SupplementalData vengono utilizzati in base alla ClientAuthzFormatList e alla ServerAuthzFormatList dal messaggio client hello esteso e dal messaggio server hello esteso. I dati per ogni formato di autorizzazione nella ClientAuthzFormatList e nella ServerAuthzFormatList DEVONO essere inclusi nello stesso ordine nel messaggio SupplementalData.
2.2. Client Hello
Il formato del client hello TLS è presentato qui per mostrare il posizionamento delle estensioni di autorizzazione. La specifica completa del messaggio client hello può essere trovata in [TLS1.0], [TLS1.1] e [TLS1.2].
Per indicare il supporto delle informazioni di autorizzazione al server TLS, i client POSSONO includere una o entrambe le estensioni client_authz e server_authz in un messaggio client hello esteso.
Quando il client include l'estensione client_authz, indica l'insieme dei tipi di dati di autorizzazione (trasportati nei messaggi di handshake SupplementalData [TLSSUPP]) che il client è preparato a fornire al server.
Quando il client include l'estensione server_authz, indica l'insieme dei tipi di dati di autorizzazione (trasportati nei messaggi di handshake SupplementalData [TLSSUPP]) che il client è preparato a ricevere dal server.
Le estensioni client_authz e server_authz DEVONO essere omesse dal messaggio client hello se il client sta iniziando una ripresa di sessione.
La struttura generale del messaggio client hello esteso è definita in [TLSEXT2], che viene riprodotta qui per chiarezza:
struct {
ProtocolVersion client_version;
Random random;
SessionID session_id;
CipherSuite cipher_suites<2..2^16-2>;
CompressionMethod compression_methods<1..2^8-1>;
select (extensions_present) {
case false:
struct {};
case true:
Extension extensions<0..2^16-1>;
};
} ClientHello;