В OpenSSL, опція `SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS` для SSL
з'єднання використовується для запобігання вразливості TLS-CBC-IV, описаної в
[\[1\]][1]. Це відома проблема TLSv1/SSLv3, але вона привертає багато
уваги останнім часом як атака BEAST [\[2\]][2] (CVE-2011-3389). Теми, пов'язані з Ruby
, знаходяться в нашому трекері проблем [\[3\]][3].

До тепер розширення Ruby OpenSSL використовує опцію `SSL_OP_ALL`, комбіновану
опцію OpenSSL для різних обхідних шляхів помилок, які повинні бути досить
нешкідливими, для всіх SSL з'єднань за замовчуванням. І воно лише дозволяє користувачам
додавати інші опції, тому ви не могли видалити функцію, яка включена
в опцію `SSL_OP_ALL`, таку як `SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS`. Це
було навмисним, оскільки воно не розкривало константи, такі як
`SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS`, але ми повинні дозволити скасувати
опцію, щоб розширення Ruby OpenSSL вставляло порожні фрагменти на
початку SSL з'єднань (називається "0/n splitting") для запобігання
атаці TLS BEAST.

[Цей випуск][4] визначає додаткові константи та дозволяє користувачам скасувати
опції в `SSL_OP_ALL`. Опція за замовчуванням все ще `SSL_OP_ALL`, але ви
можете налаштувати SSLSocket з виконанням "0/n splitting" для запобігання BEAST
, як це.

    ctx = SSLContext.new
    ctx.options = OP_ALL & ~OP_DONT_INSERT_EMPTY_FRAGMENTS
    ctx.verify_mode = OpenSSL::SSL::VERIFY_PEER
    SSLSocket.new(socket, ctx)

Подяка Apple за повідомлення про цю проблему.

ПРИМІТКА: Деякі SSL кінцеві точки відомі тим, що мають помилку, яка не може обробити
"0/n splitting" правильно, тому ми (і OpenSSL) не встановлюємо це як
опцію за замовчуванням. Будь ласка, протестуйте підключення SSL перед увімкненням цього в
виробничому середовищі. Якщо інша кінцева точка, до якої ви підключаєтеся, не може
обробити "0/n splitting", ви повинні використовувати інший обхідний шлях для запобігання
атаці TLS BEAST, наприклад, примусове використання набору шифрів RC4. Для
деталей, будь ласка, знайдіть обговорення та ресурси навколо CVE-2011-3389.




[1]: http://www.openssl.org/~bodo/tls-cbc.txt
[2]: https://www.cve.org/CVERecord?id=CVE-2011-3389
[3]: https://bugs.ruby-lang.org/5353
[4]: http://mla.n-z.jp/?ruby-talk=393484
