Indice dei contenuti dell'articolo:
Transport Layer Security (TLS) è un protocollo di crittografia estremamente popolare. L’implementazione di TLS nel kernel (kTLS) migliora le prestazioni riducendo significativamente la necessità di operazioni di copia tra lo spazio utente e il kernel.
La combinazione di kTLS e sendfile()
significa che i dati vengono crittografati direttamente nello spazio del kernel, prima di essere passati allo stack di rete per la trasmissione. Ciò elimina la necessità di copiare i dati nello spazio utente per essere crittografati dalle librerie TLS e quindi di nuovo nello spazio del kernel per la trasmissione. kTLS consente anche l’offload dell’elaborazione TLS sull’hardware, incluso l’ offload dell’elaborazione crittografica simmetrica TLS sui dispositivi di rete .
I moderni kernel Linux e FreeBSD supportano l’offload di TLS nel kernel, e ora lo fa anche NGINX Open Source! NGINX 1.21.4 introduce il supporto per kTLS quando servono file statici con SSL_sendfile()
, che può migliorare enormemente le prestazioni. Come descritto di seguito, sia il kernel che OpenSSL devono essere compilati con kTLS affinché NGINX possa utilizzare SSL_sendfile()
.
In questo blog descriviamo in dettaglio quale sistema operativo e versioni di OpenSSL supportano kTLS e mostriamo come costruire e configurare il kernel e NGINX per kTLS. Per darti un’idea del miglioramento delle prestazioni che puoi aspettarti da kTLS, condividiamo anche le specifiche ei risultati dei nostri test su FreeBSD e Ubuntu.
Nota: le implementazioni di kTLS sono piuttosto nuove e si evolvono rapidamente. Questo blog descrive il supporto per kTLS a partire da novembre 2021, ma tieni d’occhio gli annunci su nginx.org e il blog NGINX sulle modifiche alle informazioni e alle istruzioni fornite qui.
Requisiti generali
- Sistema operativo – Uno dei seguenti:
- FreeBSD 13.0+. A partire da novembre 2021, FreeBSD 13.0+ è l’unico sistema operativo che supporta kTLS in NGINX senza una build manuale di NGINX per incorporare OpenSSL 3.0.0+. Vedi Abilitare NGINX con kTLS su FreeBSD .
- Una distribuzione Linux basata sul kernel Linux versione 4.17 o successiva, anche se consigliamo di utilizzare quelle basate sulla versione 5.2 o successiva, quando possibile. (Il supporto kTLS è effettivamente disponibile nella versione 4.13, ma OpenSSL 3.0.0 richiede la versione dell’intestazione del kernel 4.17 o successiva.)
- OpenSSL – Versione 3.0.0 o successiva
- NGINX – Versione 1.21.4 o successive
Miglioramento delle prestazioni con kTLS
Quando si servono file statici in condizioni di carico elevato, SSL_sendfile()
è possibile aumentare la velocità effettiva fino a 2 volte rispetto al TLS dello spazio utente, ma la dimensione dell’aumento delle prestazioni dipende in modo significativo da vari fattori (prestazioni del disco, carico del sistema, ecc.). È anche possibile ridurre l’utilizzo della CPU se la scheda di rete supporta l’offload TLS.
Riepilogo
NGINX 1.21.4 introduce il supporto per kTLS quando servono file statici con SSL_sendfile()
. I nostri test mostrano che le prestazioni migliorano tra l’8% e il 29%, a seconda del sistema operativo.