Support fragmented TLS handshake records#431
Conversation
d3ae098 to
8bb9716
Compare
DPI bypass tools like ByeDPI fragment a single TLS record into multiple records to evade censorship. This broke ReadClientHello because it assumed the entire ClientHello arrives in one TLS record. Add reassembleTLSHandshake that reads continuation records and reconstructs a single TLS record before parsing and HMAC verification. Per RFC 5246 Section 6.2.1, handshake messages may be fragmented across multiple records — this is valid TLS behavior.
8bb9716 to
38abee7
Compare
|
|
||
| RUN set -x \ | ||
| && version="$(git describe --exact-match HEAD 2>/dev/null || git describe --tags --always)" \ | ||
| && version="$(git describe --exact-match HEAD 2>/dev/null || git describe --tags --always 2>/dev/null || echo dev)" \ |
There was a problem hiding this comment.
из-за этого сборка в докере из исходников не работала
|
Спасибо! Немного стыдно, но я совсем не знал о такой фрагментации, поэтому мне нужно немножко времени, чтобы во всем разобраться. |
|
я случайно) Да, я тоже удивился. Из-за этого у меня не работает прокси через wifi (так как на роутере есть bydpi) |
|
Почитал, разобрался, наконец-то встало на место, зачем там 2 раза длина повторяется. PR тоже хороший, я не вижу каких-то явных проблем или недостатков. Я его вмержу, но попробую сам для себя повторить поддержку такой фрагментации, отрефакторить. Не потому, что код не нравится - код нравится; мне просто критически важно, чтобы мозг сам такое повторил, и я очень хорошо осознавал, чего каждая строчка делает. В этом смысле отдельное спасибо за тесты! :) |
|
Спасибо за прокси! |
DPI bypass tools like ByeDPI fragment a single TLS record into multiple records to evade censorship. This broke ReadClientHello because it assumed the entire ClientHello arrives in one TLS record.
Add reassembleTLSHandshake that reads continuation records and reconstructs a single TLS record before parsing and HMAC verification. Per RFC 5246 Section 6.2.1, handshake messages may be fragmented across multiple records — this is valid TLS behavior.