Что: 432f7635faed298751cef04f0102deee68ea942f Когда: 2021-09-04 23:40:40+03:00 ------------------------------------------------------------------------ Темы: crypto dns go web ------------------------------------------------------------------------ tofuproxy http://www.git.stargrave.org/?p=tofuproxy.git;a=tree Уже не первый год у меня была идея сделать прокси-сервер который бы полностью брал на себя всё что касается TLS-а как минимум. Вот какой-нибудь Xombrero броузер, на старом WebKit движке, как броузер может быть неплох, но вот TLS в нём уныл. В других возможно даже TLS 1.3 поддерживается, но нету certificate pinning-а, нету TOFU и прочих технологий, присутствующих в Xombrero. В Xombrero/WebKit мне не нравится что я не вижу и не управляю redirect-ом -- он просто автоматически происходит, тогда как в Firefox был плагин показывающий промежуточную HTML страницу. Например именно так я сегодня увидел что lite.duckduckgo.com уже не работает и он делается redirect на html.duckduckgo.com. В этом же Xombrero были какие-то проблемы с HTTP авторизацией на не стандартных портах. Плюс мне хочется автоматически перебрасывать с www.reddit.com на old.reddit.com. Плюс запретить качать всякие Web-шрифты (это я правкой WebKit исходного кода реализовал). Плюс делать certificate pinning не на сам сертификат, а на его SPKI. А ещё бы DANE использовать. Плюс блокировать всякие рекламные домены (Google Analytics и прочее). В Lynx вообще с TLS всё плачевно с детализацией информации и никакого pinning конечно же. Править древний движок -- нет ни желания, ни времени. Зато Go-шную crypto/tls я излазил вдоль и поперёк когда-то. Плюс имею и ГОСТ TLS 1.3 поддержку в ней. И в ней есть все современные быстрые протоколы (*25519, ChaCha20-Poly1305). Прокси на Go мог бы решить все проблемы. Вот только к нему нужен какой-то интерактивный интерфейс или какой-то способ взаимодействия: ведь увидев не сходящийся pinning, он же должен будет меня спросить что делать. Не раз я начинал его делать, но почему-то каждый раз довольно быстро забивал, ибо не просто было почему то. Сегодня без причины снова вспомнил о таком прокси, задумался в чём же могут быть подвохи, не придумал, за несколько часов написал. Я искренне не понимаю почему у меня прежде с ним возникали трудности. Обожаю Go! Это HTTP прокси демон. HTTPS соединения он терминирует на себе, выступаю в роли клиента для HTTPS серверов. На лету генерирует сертификаты для хостов, выступая в качестве TLS-сервера, с поддержкой DANE. * Запрещаю HEAD методы (405 возвращаю). Потому что Xombrero упорно любит слать и GET и HEAD -- достал * Если хост www.reddit.com -- возвращаю redirect на old.reddit.com * Если хост является поддоменом hardcoded списка шпионящих доменов (google-analytics.com, fbcdn., mc.yandex.ru и прочие), то 404 * Ошибки на уровне Go библиотеки возвращаются в виде текстовой страницы * Если ответом является redirect, то он преобразуется в HTML страницу с ссылкой, чтобы явно это перенаправление было видно. Если это temporary redirect, а User-Agent это newsboat, то HTML страница не отдаётся. Многие RSS/Atom имеют официальные URL-ы которые всегда делают перенаправление * В противном случае ответ проксируется как есть, с честным копированием тела из клиента в ответ сервера * Для TLS на диск сохраняются присланные сертификаты для данного домена (TOFU). Если штатные проверки Go не прошли или SPKI сохранённого сертификата отличается (SPKI pinning), то показывается xmessage окно с Accept/Once/Reject кнопками и выводом certtool сертификатов "наших" и "ихних". То есть, можно разрешить и совершенно штатно не валидные сертификаты (например выданные для других доменов) * Accept обновляет сертификаты на диске. Если SPKI pinning отрабатывает, но сертификат был обновлён, то оно автоматически обновляется * Кроме того, можно делать DANE-EE проверку напротив TLSA записи из DNS. Результат DANE показывается в xmessage тоже В разные FIFO файлы пишутся TSV сообщения с TAI64N префиксом о: запросах, ошибках, успешных ответах, "других" ответах (redirect, 404), заменённых на HTML redirect-ах, событиях TLS подключений (плюс версия TLS, ciphersuite, SPKI хэш сертификата), события связанные с сертификатами (DANE, обновления, reject-ы). multitail скриптом я собираю их все воедино и разукрашиваю. Единственное что не делал ещё: перехват HTTP авторизации, видимо тоже через показ xmessage-like окон. Я уже на самом деле забыл где именно с ней у меня возникали проблемы. Сейчас и Lynx и Xombrero и Newsboat работают через этот прокси -- всё тип топ. ------------------------------------------------------------------------ оставить комментарий: mailto:comment@blog.stargrave.org?subject=Re:%20tofuproxy%20%28432f7635faed298751cef04f0102deee68ea942f%29 ------------------------------------------------------------------------ Сгенерирован: SGBlog 0.34.0