Aller au contenu principal

5. Examples (Exemples)

5. Examples (Exemples)

Les figures 6, 7 et 8 illustrent des exemples d'échanges. Notez que les suites de chiffrement TLS utilisant un échange Diffie-Hellman offrant une confidentialité persistante peuvent être utilisées avec une clé publique brute, bien que ce document ne montre pas l'échange d'informations à ce niveau avec les flux de messages ultérieurs.

5.1. TLS Server Uses a Raw Public Key (Le serveur TLS utilise une clé publique brute)

Cette section montre un exemple où le client TLS indique sa capacité à recevoir et valider une clé publique brute du serveur. Dans cet exemple, le client est assez restreint car il est incapable de traiter d'autres types de certificats envoyés par le serveur. Il n'a pas non plus d'identifiants au niveau de la couche TLS qu'il pourrait envoyer au serveur et omet donc l'extension client_certificate_type. Par conséquent, le client ne remplit l'extension server_certificate_type qu'avec le type de clé publique brute, comme indiqué en (1).

Lorsque le serveur TLS reçoit le client hello, il traite l'extension. Comme il possède une clé publique brute, il indique en (2) qu'il a choisi de placer la structure SubjectPublicKeyInfo dans la charge utile Certificate (3).

Le client utilise cette clé publique brute dans le handshake TLS avec une technique de validation hors bande, telle que DANE, pour la vérifier.

  client_hello,
server_certificate_type=(RawPublicKey) // (1)
->
<- server_hello,
server_certificate_type=RawPublicKey, // (2)
certificate, // (3)
server_key_exchange,
server_hello_done

client_key_exchange,
change_cipher_spec,
finished ->

<- change_cipher_spec,
finished

Application Data <-------> Application Data

Figure 6: Example with Raw Public Key Provided by the TLS Server (Figure 6: Exemple avec clé publique brute fournie par le serveur TLS)

5.2. TLS Client and Server Use Raw Public Keys (Le client et le serveur TLS utilisent des clés publiques brutes)

Cette section montre un exemple où le client TLS ainsi que le serveur TLS utilisent des clés publiques brutes. C'est l'un des cas d'utilisation envisagés pour la mise en réseau d'objets intelligents. Le client TLS dans ce cas est un dispositif intégré qui est configuré avec une clé publique brute pour une utilisation avec TLS et est également capable de traiter une clé publique brute envoyée par le serveur. Par conséquent, il indique ces capacités en (1). Comme dans l'exemple précédent, le serveur répond à la demande du client, l'indique via la valeur RawPublicKey dans la charge utile server_certificate_type (2) et fournit une clé publique brute dans la charge utile Certificate au client (voir (3)). Le serveur TLS exige une authentification du client et inclut donc une certificate_request (4). La charge utile client_certificate_type en (5) indique que le serveur TLS accepte une clé publique brute. Le client TLS, qui a une clé publique brute pré-provisionnée, la renvoie dans la charge utile Certificate (6) au serveur.

client_hello,
client_certificate_type=(RawPublicKey) // (1)
server_certificate_type=(RawPublicKey) // (1)
->
<- server_hello,
server_certificate_type=RawPublicKey // (2)
certificate, // (3)
client_certificate_type=RawPublicKey // (5)
certificate_request, // (4)
server_key_exchange,
server_hello_done

certificate, // (6)
client_key_exchange,
change_cipher_spec,
finished ->

<- change_cipher_spec,
finished

Application Data <-------> Application Data

Figure 7: Example with Raw Public Key provided by the TLS Server and the Client (Figure 7: Exemple avec clé publique brute fournie par le serveur TLS et le client)

5.3. Combined Usage of Raw Public Keys and X.509 Certificates (Utilisation combinée de clés publiques brutes et de certificats X.509)

Cette section montre un exemple combinant une clé publique brute et un certificat X.509. Le client utilise une clé publique brute pour l'authentification du client, et le serveur fournit un certificat X.509. Cet échange commence par le client indiquant sa capacité à traiter un certificat X.509, un certificat OpenPGP ou une clé publique brute, si elle est fournie par le serveur. Il préfère une clé publique brute, car la valeur RawPublicKey précède les autres valeurs dans le vecteur server_certificate_type. De plus, le client indique qu'il possède une clé publique brute pour l'authentification côté client (voir (1)). Le serveur choisit de fournir son certificat X.509 en (3) et indique ce choix en (2). Pour l'authentification du client, le serveur indique en (4) qu'il a sélectionné le format de clé publique brute et demande un certificat au client en (5). Le client TLS fournit une clé publique brute en (6) après avoir reçu et traité le message server hello du serveur TLS.

client_hello,
server_certificate_type=(RawPublicKey, X.509, OpenPGP)
client_certificate_type=(RawPublicKey) // (1)
->
<- server_hello,
server_certificate_type=X.509 // (2)
certificate, // (3)
client_certificate_type=RawPublicKey // (4)
certificate_request, // (5)
server_key_exchange,
server_hello_done
certificate, // (6)
client_key_exchange,
change_cipher_spec,
finished ->

<- change_cipher_spec,
finished

Application Data <-------> Application Data

Figure 8: Hybrid Certificate Example (Figure 8: Exemple de certificat hybride)