Satu Baris Baru Ekstra Dapat Merusak TLS Setelah CONNECT
Periksa pembingkaian header HTTP saat konektor proksi tulisan tangan membuka terowongan dan langsung menghasilkan galat dekode TLS.
Saat CONNECT mengembalikan 200 dan TLS langsung gagal didekode, periksa byte batas pada konektor sebelum mengubah sertifikat atau cipher.
Nilai otorisasi yang dihasilkan mungkin sudah berakhir dengan baris baru. Menambahkan akhir baris lain dapat menyelesaikan header HTTP lebih awal, meninggalkan bidang Host yang dimaksud atau teks biasa lain di belakang permintaan.
Permintaan HTTP/1.1 CONNECT minimal menggunakan CRLF di antara baris dan baris kosong di akhir:
b"CONNECT example.com:443 HTTP/1.1\r\nHost: example.com:443\r\n\r\n"Letakkan bidang otorisasi apa pun sebelum baris kosong terakhir itu, tanpa jeda baris tersemat. Di Python, "\n" mewakili baris baru; string mentah yang berisi garis miring terbalik dan huruf n tidak. Periksa byte apa yang dihasilkan pembantu pengodean sebelum mencoba menghapusnya—pembantu lama dapat menambahkan jeda baris.
Setelah CONNECT berhasil, byte yang tersisa itu milik protokol terowongan. Teks biasa yang tersesat dapat mencapai rekan yang mengharapkan TLS. Status berhasil tidak dapat memperbaiki byte yang sudah mengantre setelah permintaan yang cacat.
Periksa juga batas penerimaan. Baca respons proksi selengkapnya sebelum menyerahkan soket ke TLS, tangani pembacaan parsial dan pertahankan apa pun yang terbaca di luar header. Satu pembacaan soket tidak harus berisi satu pesan utuh.
Jika Anda memiliki parser ini, bandingkan representasi byte yang disunting dengan tata bahasa kabel; pertahankan panjang dan batas baris tetap terlihat sambil menyembunyikan kata sandi. Untuk aplikasi yang hanya membutuhkan koneksi proksi, konektor yang terpelihara menghindari keharusan memiliki kode pembingkaian ini.