Вопрос или проблема
У меня настроен Squid для проксирования через HTTP. Это сделано в контексте локального компьютера (squid работает на той же машине, что и выполняет запросы), поэтому HTTPS не нужен (и не желателен). Сам Squid выполняет запросы через HTTPS к удаленному серверу. Прокси работает – я могу видеть контент в своем браузере, который проходит через прокси, и я подтвердил (с помощью tcpdump), что он действительно проходит через прокси. Однако я не могу заставить его что-либо кэшировать.
Мой конфигурационный файл выглядит следующим образом:
http_port 0.0.0.0:3128
acl SSL_ports port 80
acl SSL_ports port 443
acl Safe_ports port 80
acl Safe_ports port 443
acl CONNECT method CONNECT
http_access allow localhost
cache_dir ufs /tmp/Cache 900 1 1
cache_mem 256 MB
maximum_object_size 900000 KB
Я прочитал этот вопрос и этот вопрос, и, похоже, они упоминают о включении SSL “bump” для решения этой проблемы. Однако, поскольку трафик между локальным клиентом и прокси НЕ зашифрован, это здесь не применимо.
Как сделать так, чтобы кэширование работало, если единственное шифрование происходит между Squid и удаленным сервером?
.
Ответ или решение
Для того чтобы настроить кэширование HTTPS-запросов с помощью Squid, когда сам Squid использует только HTTP для связи с клиентом и HTTPS к удаленному серверу, необходимо учесть несколько важных аспектов его работы и конфигурации. Рассмотрим их подробно.
Теория
Squid – это мощный прокси-сервер с функцией кэширования, способный обрабатывать как HTTP, так и HTTPS-запросы. Однако обход с HTTPS-соединениями требует немного иной конфигурации, поскольку трафик по HTTPS шифруется и, соответственно, сам процесс кэширования становится несколько более сложным. Обычно для работы с HTTPS использовалась технология SSL Bump, позволяющая считывать и кэшировать содержимое HTTPS-трафика. Однако, так как в вашей конфигурации связь между клиентом и Squid осуществляется по HTTP, а HTTPS используется только между Squid и удаленным сервером, SSL Bump может не потребоваться.
Пример
Ваш текущий конфигурационный файл выстроен так, что позволяет Squid действовать как HTTP-прокси для вашего локального клиента. Он корректно настраивает кэширование, однако для работы с HTTPS необходима дополнительная настройка. Давайте рассмотрим пример того, как это можно сделать:
Рекомендуется создать конфигурацию, которая позволит вам использовать Squid в качестве прозрачного или пересылающего HTTPS-прокси. Вот несколько шагов, которые могут понадобиться:
-
Настройка SSL Bump: Для возможности просмотра и кэширования HTTPS трафика можно настроить SSL Bump, даже если он не кажется необходимым на первый взгляд. Это позволит Squid расшифровывать трафик между ним и удалённым сервером, что и требуется для кэширования.
-
Настройка ACL: Убедитесь, что у вас корректно настроены ACL, чтобы разрешить доступ к необходимым портам. Обычно это порты 80 и 443 для HTTP и HTTPS соответственно. Ваш пример кода уже содержит такие настройки.
-
Кэширование HTTPS: Пропишите соответствующие настройки в конфигурации Squid для кэширования ресурсов, получаемых по HTTPS. Это может включать такие параметры, как
cache_peer
,sslproxy_cert_error
,ssl_bump
и другие, необходимые для SSL-перехвата. -
Оптимизация параметров кэширования: Убедитесь, что директивы
cache_mem
иmaximum_object_size
настроены так, чтобы было достаточно памяти для объектов, которые вы хотите кэшировать. -
Проверка кэширования: Проверяйте лог-файлы Squid для удостоверения того, что запросы действительно попадают в кэш и извлекаются из него. Логи могут указать, какие проблемы возникают при попытке кэширования.
Применение
-
Добавление SSL Bump в конфиг: Вам нужно будет добавить следующие строки в конфигурационный файл Squid:
http_port 3128 intercept https_port 3129 intercept ssl-bump cert=/path/to/cert.pem key=/path/to/key.pem ssl_bump server-first all sslproxy_cert_error allow all sslproxy_flags DONT_VERIFY_PEER
Убедитесь, что добавили пути к вашим SSL-сертификатам. Это позволит Squid расшифровывать и кэшировать HTTPS трафик.
-
Проверка политики кэширования: Убедитесь, что ваши политики кэширования соответствуют требованиям. Это может включать в себя правильную настройку заголовков
Cache-Control
и настраиваемых параметров кэширования в конфигурации. -
Тестирование и отладка: После изменения конфигурации, перезапустите Squid и следите за его журналами с помощью команды
tail -f /var/log/squid/access.log
. Это поможет вам убедиться, что запросы правильно кэшируются и из кеша извлекаются.
Таким образом, для успешного кэширования HTTPS-запросов с использованием Squid важно правильно настроить SSL-перехват, настроить политики кэширования и убедиться в правильной работе конфигурации через логирование и отладку. Таким образом, вы сможете эффективно использовать Squid даже в ситуациях, когда клиентский трафик не шифруется, но требуется кэшировать зашифрованный трафик с удаленными серверами.