4. The "record_size_limit" Extension
4. The "record_size_limit" Extension
Les ExtensionData de l'extension record_size_limit sont RecordSizeLimit :
uint16 RecordSizeLimit;
La valeur de RecordSizeLimit est la taille maximale d'enregistrement en octets que l'extrémité accepte de recevoir. Cette valeur limite la taille des enregistrements créés lors de l'encodage des données d'application et du message de poignée de main protégé en enregistrements.
Lorsque l'extension record_size_limit est négociée, une extrémité NE DOIT PAS générer un enregistrement protégé dont le texte clair est plus grand que la valeur RecordSizeLimit reçue de son pair. Les messages non protégés ne sont pas soumis à cette limite.
Cette valeur est la longueur du texte clair d'un enregistrement protégé. Elle inclut le type de contenu et le remplissage ajoutés dans TLS 1.3 (c'est-à-dire la longueur complète de TLSInnerPlaintext). En TLS 1.2 et antérieur, la limite couvre toutes les entrées de compression et de chiffrement (c'est-à-dire les données qui produisent finalement TLSCiphertext.fragment). Le remplissage ajouté dans le cadre du chiffrement, par exemple par un chiffrement par blocs, n'est pas inclus dans ce décompte (voir la section 4.1).
Une extrémité qui prend en charge toutes les tailles d'enregistrement peut inclure toute limite jusqu'à la limite maximale définie par le protocole. Pour TLS 1.2 et antérieur, cette limite est de 2^14 octets. TLS 1.3 utilise une limite de 2^14+1 octets. Des valeurs plus élevées sont actuellement réservées pour de futures versions du protocole pouvant autoriser des enregistrements plus grands ; une extrémité NE DOIT PAS envoyer une valeur supérieure à la taille maximale d'enregistrement définie par le protocole sauf si une telle version future ou extension l'autorise explicitement. Un serveur NE DOIT PAS appliquer cette restriction ; un client peut annoncer une limite plus élevée activée par une extension ou une version que le serveur ne comprend pas. Un client PEUT interrompre la poignée de main avec une alerte illegal_parameter si l'extension record_size_limit contient une valeur supérieure à la taille maximale d'enregistrement permise par la version du protocole et les extensions négociées.
Même si un pair fournit une limite de taille d'enregistrement plus grande, une extrémité NE DOIT PAS envoyer d'enregistrements plus grands que la limite définie par le protocole, sauf autorisation explicite d'une future version ou extension du TLS.
La limite de taille d'enregistrement ne s'applique qu'aux enregistrements envoyés vers l'extrémité qui annonce la limite. Une extrémité peut envoyer des enregistrements plus grands que la limite qu'elle annonce pour elle-même. Une extrémité TLS qui reçoit un enregistrement plus grand que sa limite annoncée DOIT générer une alerte fatale record_overflow ; une extrémité DTLS qui reçoit un enregistrement plus grand que sa limite annoncée PEUT soit générer une alerte fatale record_overflow, soit rejeter l'enregistrement.
Les extrémités DEVRAIENT annoncer l'extension record_size_limit, même si elles n'ont pas besoin de limiter la taille des enregistrements. Pour les clients, cela permet aux serveurs d'annoncer une limite à leur convenance. Pour les serveurs, cela permet aux clients de savoir que leur limite sera respectée. Si cette extension n'est pas négociée, les extrémités peuvent envoyer des enregistrements de toute taille permise par le protocole ou d'autres extensions négociées.
Les extrémités NE DOIVENT PAS envoyer une extension record_size_limit avec une valeur inférieure à 64. Une extrémité DOIT traiter la réception d'une valeur plus petite comme une erreur fatale et générer une alerte illegal_parameter.
En TLS 1.3, le serveur envoie l'extension record_size_limit dans le message EncryptedExtensions.
Lors d'une renégociation ou d'une reprise, la limite de taille d'enregistrement est renégociée. Les enregistrements sont soumis aux limites fixées dans la poignée de main qui produit les clés utilisées pour protéger ces enregistrements. Il est donc possible que l'extension ne soit pas négociée lorsqu'une connexion est renégociée ou reprise.
Le Path Maximum Transmission Unit (PMTU) en DTLS limite également la taille des enregistrements. La limite de taille d'enregistrement n'affecte pas la découverte du PMTU et DEVRAIT être fixée indépendamment. La limite de taille d'enregistrement est fixée pendant la poignée de main et doit donc être basée sur les contraintes à l'extrémité et non sur l'environnement réseau actuel. En comparaison, le PMTU est déterminé par le chemin réseau et peut évoluer dynamiquement dans le temps. Voir [PMTU] et la section 4.1.1.1 de [DTLS] pour plus de détails sur la découverte du PMTU.
Le PMTU régit la taille des datagrammes UDP, ce qui limite la taille des enregistrements, mais n'empêche pas les enregistrements d'être plus petits. Une extrémité qui envoie de petits enregistrements peut toujours envoyer plusieurs enregistrements dans un seul datagramme UDP.