Table des matières de l'article :
Transport Layer Security (TLS) est un protocole de cryptage extrêmement populaire. L'implémentation de TLS dans le noyau (kTLS) améliore les performances en réduisant considérablement le besoin d'opérations de copie entre l'espace utilisateur et le noyau.
La combinaison de kTLS et sendfile()
cela signifie que les données sont chiffrées directement dans l'espace du noyau, avant d'être transmises à la pile réseau pour transmission. Cela élimine le besoin de copier les données dans l'espace utilisateur pour qu'elles soient chiffrées par les bibliothèques TLS, puis de les renvoyer dans l'espace du noyau pour la transmission. kTLS permet également de décharger le traitement TLS sur le matériel, y compris déchargement du traitement cryptographique symétrique TLS vers les périphériques réseau .
Les noyaux Linux et FreeBSD modernes prennent en charge le déchargement TLS dans le noyau, et maintenant NGINX Open Source le fait aussi ! NGINX 1.21.4 introduit la prise en charge de kTLS lorsque vous avez besoin de fichiers statiques avec SSL_sendfile()
, ce qui peut grandement améliorer les performances. Comme décrit ci-dessous, le noyau et OpenSSL doivent être compilés avec kTLS pour que NGINX puisse être utilisé SSL_sendfile()
.
Dans ce blog, nous détaillons quel système d'exploitation et quelles versions d'OpenSSL prennent en charge kTLS et montrons comment créer et configurer le noyau et NGINX pour kTLS. Pour vous donner une idée de l'amélioration des performances que vous pouvez attendre de kTLS, nous partageons également les spécifications et les résultats de nos tests sur FreeBSD et Ubuntu.
NB: Les implémentations de kTLS sont assez récentes et évoluent rapidement. Ce blog décrit la prise en charge de kTLS à partir de novembre 2021, mais gardez un œil sur les annonces sur nginx.org et le Blog NGINX sur les modifications apportées aux informations et instructions fournies ici.
Conditions générales
- Système d'exploitation - L'un des suivants :
- FreeBSD 13.0+. Depuis novembre 2021, FreeBSD 13.0+ est le seul système d'exploitation qui prend en charge kTLS dans NGINX sans une construction manuelle de NGINX pour incorporer OpenSSL 3.0.0+. Tu vois Activer NGINX avec kTLS sur FreeBSD .
- Une distribution Linux basée sur la version 4.17 ou ultérieure du noyau Linux, bien que nous vous recommandons d'utiliser celles basées sur la version 5.2 ou ultérieure dans la mesure du possible. (La prise en charge de KTLS est actuellement disponible dans la version 4.13, mais OpenSSL 3.0.0 nécessite la version 4.17 ou ultérieure de l'en-tête du noyau.)
- OpenSSL - Version 3.0.0 ou ultérieure
- NGINX - Version 1.21.4 ou ultérieure
Amélioration des performances avec kTLS
Lors de la diffusion de fichiers statiques dans des conditions de charge élevée, SSL_sendfile()
Est-il possible augmenter le débit à 2 fois l'espace utilisateur TLS, mais la taille de l'augmentation des performances dépend de manière significative de divers facteurs (performances du disque, charge du système, etc.). Vous pouvez également réduire l'utilisation du processeur si votre carte réseau prend en charge le déchargement TLS.
Riepilogo
NGINX 1.21.4 introduit la prise en charge de kTLS lors de la diffusion de fichiers statiques avec SSL_sendfile()
. Nos tests montrent que les performances s'améliorent entre 8% et 29%, selon le système d'exploitation.