4. TLS Client and Server Handshake Behavior (Comportement du handshake TLS client et serveur)
4. TLS Client and Server Handshake Behavior (Comportement du handshake TLS client et serveur)
Cette spécification étend les messages ClientHello et ServerHello, selon les procédures d'extension définies dans la [RFC5246]. Elle n'étend ni ne modifie aucun autre message TLS.
Note : Aucune nouvelle suite de chiffrement n'est requise pour utiliser des clés publiques brutes. Toutes les suites de chiffrement existantes qui prennent en charge une méthode d'échange de clés compatible avec l'extension définie peuvent être utilisées.
L'échange de messages de haut niveau de la Figure 5 montre les extensions client_certificate_type et server_certificate_type ajoutées aux messages hello client et serveur.
client_hello,
client_certificate_type,
server_certificate_type ->
<- server_hello,
client_certificate_type,
server_certificate_type,
certificate,
server_key_exchange,
certificate_request,
server_hello_done
certificate,
client_key_exchange,
certificate_verify,
change_cipher_spec,
finished ->
<- change_cipher_spec,
finished
Application Data <-------> Application Data
Figure 5: Basic Raw Public Key TLS Exchange (Figure 5: Échange TLS de clé publique brute de base)
4.1. Client Hello (Client Hello)
Afin d'indiquer la prise en charge des clés publiques brutes, les clients incluent les extensions client_certificate_type et/ou server_certificate_type dans un message client hello étendu. Le mécanisme d'extension hello est décrit dans la section 7.4.1.4 de TLS 1.2 [RFC5246].
L'extension client_certificate_type dans le client hello indique les types de certificats que le client est capable de fournir au serveur, lorsqu'ils sont demandés à l'aide d'un message certificate_request.
L'extension server_certificate_type dans le client hello indique les types de certificats que le client est capable de traiter lorsqu'ils sont fournis par le serveur dans une charge utile de certificat ultérieure.
Les extensions client_certificate_type et server_certificate_type envoyées dans le client hello comportent chacune une liste de types de certificats pris en charge, triés par préférence du client. Lorsque le client ne prend en charge qu'un seul type de certificat, il s'agit d'une liste contenant un seul élément.
Le client TLS DOIT omettre les types de certificats de l'extension client_certificate_type dans le client hello s'il ne possède pas la clé publique brute correspondante ou le certificat qu'il peut fournir au serveur lorsqu'on lui demande à l'aide d'un message certificate_request, ou s'il n'est pas configuré pour en utiliser un avec le serveur TLS donné. Si le client n'a plus de types de certificats à envoyer dans le client hello, autre que le type par défaut X.509, il DOIT omettre l'extension client_certificate_type dans le client hello.
Le client TLS DOIT omettre les types de certificats de l'extension server_certificate_type dans le client hello s'il est incapable de traiter la clé publique brute correspondante ou un autre type de certificat. Si le client n'a plus de types de certificats à envoyer dans le client hello, autre que le type de certificat par défaut X.509, il DOIT omettre toute l'extension server_certificate_type du client hello.
4.2. Server Hello (Server Hello)
Si le serveur reçoit un client hello qui contient l'extension client_certificate_type et/ou l'extension server_certificate_type, alors trois résultats sont possibles :
-
Le serveur ne prend pas en charge l'extension définie dans ce document. Dans ce cas, le serveur renvoie le server hello sans les extensions définies dans ce document.
-
Le serveur prend en charge l'extension définie dans ce document, mais il n'a aucun type de certificat en commun avec le client. Ensuite, le serveur met fin à la session avec une alerte fatale de type "unsupported_certificate".
-
Le serveur prend en charge les extensions définies dans ce document et a au moins un type de certificat en commun avec le client. Dans ce cas, les règles de traitement décrites ci-dessous sont suivies.
L'extension client_certificate_type dans le client hello indique les types de certificats que le client est capable de fournir au serveur, lorsqu'ils sont demandés à l'aide d'un message certificate_request. Si le serveur TLS souhaite demander un certificat au client (via le message certificate_request), il DOIT inclure l'extension client_certificate_type dans le server hello. Cette extension client_certificate_type dans le server hello indique alors le type de certificats que le client est invité à fournir dans une charge utile de certificat ultérieure. La valeur transmise dans l'extension client_certificate_type DOIT être sélectionnée parmi l'une des valeurs fournies dans l'extension client_certificate_type envoyée dans le client hello. Le serveur DOIT également inclure une charge utile certificate_request dans le message server hello.
Si le serveur n'envoie pas de charge utile certificate_request (par exemple, parce que l'authentification du client se produit au niveau de la couche application ou qu'aucune authentification du client n'est requise) ou si aucun des certificats pris en charge par le client (comme indiqué dans l'extension client_certificate_type dans le client hello) ne correspond aux types de certificats pris en charge par le serveur, alors la charge utile client_certificate_type dans le server hello DOIT être omise.
L'extension server_certificate_type dans le client hello indique les types de certificats que le client est capable de traiter lorsqu'ils sont fournis par le serveur dans une charge utile de certificat ultérieure. Si le client hello indique la prise en charge des clés publiques brutes dans l'extension server_certificate_type et que le serveur choisit d'utiliser des clés publiques brutes, alors le serveur TLS DOIT placer la structure SubjectPublicKeyInfo dans la charge utile Certificate. Avec l'extension server_certificate_type dans le server hello, le serveur TLS indique le type de certificat transporté dans la charge utile Certificate. Cette indication supplémentaire permet d'éviter les ambiguïtés d'analyse puisque la charge utile Certificate peut contenir soit le certificat X.509, soit une structure SubjectPublicKeyInfo. Notez qu'une seule valeur est autorisée dans l'extension server_certificate_type lorsqu'elle est transportée dans le server hello.
4.3. Client Authentication (Authentification du client)
Lorsque le serveur TLS a spécifié RawPublicKey comme client_certificate_type, l'authentification du client TLS auprès du serveur TLS n'est prise en charge que par l'authentification du SubjectPublicKeyInfo client reçu via une méthode hors bande.
4.4. Server Authentication (Authentification du serveur)
Lorsque le serveur TLS a spécifié RawPublicKey comme server_certificate_type, l'authentification du serveur TLS auprès du client TLS n'est prise en charge que par l'authentification du SubjectPublicKeyInfo client reçu via une méthode hors bande.