Netflix ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» ΠΏΠ°Ρ‚Ρ‡ΠΈ с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ TLS для ядра FreeBSD

Компания Netflix ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ»Π° для тСстирования Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΡƒΡŽ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ядра FreeBSD Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ TLS (KTLS), которая позволяСт Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ сущСствСнного увСличСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ для TCP-сокСтов. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ ускорСниС ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… с использованиСм ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² TLS 1.0 ΠΈ 1.2, отправляСмых Π² сокСт ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ write, aio_write ΠΈ sendfile.

ОбмСн ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ядра Π½Π΅ поддСрТиваСтся ΠΈ соСдинСниС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Π½Π°Ρ‡Π°Π»Π΅ Π±Ρ‹Ρ‚ΡŒ установлСно ΠΈ согласовано Π² пространствС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ядру ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π² процСссС согласования соСдинСния сСссионного ΠΊΠ»ΡŽΡ‡Π° для сокСтов Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° опция TCP_TXTLS_ENABLE, послС Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ всС отправляСмыС Π² сокСт Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΊΠ°Π΄Ρ€Ρ‹ TLS с использованиСм Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°. Для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ слуТСбных сообщСний, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для согласования соСдинСния, слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ sendmsg с Ρ‚ΠΈΠΏΠΎΠΌ записи TLS_SET_RECORD_TYPE.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ Π΄Π²Π° основных ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ TLS-ΠΊΠ°Π΄Ρ€ΠΎΠ²: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΈ ifnet (с задСйствованиСм Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… срСдств ускорСния сСтСвых ΠΊΠ°Ρ€Ρ‚). Π’Ρ‹Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° осущСствляСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ
ΠΎΠΏΡ†ΠΈΠΈ сокСта TCP_TXTLS_MODE. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ позволяСт ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ бэкСнды для ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ бэкСнд ktls_ocf.ko с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ AES-GCM, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π° Π±Π°Π·Π΅ Ρ„Ρ€Π΅ΠΉΠΌΠ²Ρ€ΠΎΠΊΠ° OpenCrypto. Для управлСния прСдлагаСтся нСсколько sysctl Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π²Π΅Ρ‚ΠΊΠΈ kern.ipc.tls.*. ΠŸΡ€ΠΈ сборкС ядра ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° TLS Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠΏΡ†ΠΈΠΈ KERN_TLS.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ