Как настроить Squid для кэширования HTTPS-запросов, когда сам Squid использует только HTTP для клиента.

Вопрос или проблема

У меня настроен 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-прокси. Вот несколько шагов, которые могут понадобиться:

  1. Настройка SSL Bump: Для возможности просмотра и кэширования HTTPS трафика можно настроить SSL Bump, даже если он не кажется необходимым на первый взгляд. Это позволит Squid расшифровывать трафик между ним и удалённым сервером, что и требуется для кэширования.

  2. Настройка ACL: Убедитесь, что у вас корректно настроены ACL, чтобы разрешить доступ к необходимым портам. Обычно это порты 80 и 443 для HTTP и HTTPS соответственно. Ваш пример кода уже содержит такие настройки.

  3. Кэширование HTTPS: Пропишите соответствующие настройки в конфигурации Squid для кэширования ресурсов, получаемых по HTTPS. Это может включать такие параметры, как cache_peer, sslproxy_cert_error, ssl_bump и другие, необходимые для SSL-перехвата.

  4. Оптимизация параметров кэширования: Убедитесь, что директивы cache_mem и maximum_object_size настроены так, чтобы было достаточно памяти для объектов, которые вы хотите кэшировать.

  5. Проверка кэширования: Проверяйте лог-файлы Squid для удостоверения того, что запросы действительно попадают в кэш и извлекаются из него. Логи могут указать, какие проблемы возникают при попытке кэширования.

Применение

  1. Добавление 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 трафик.

  2. Проверка политики кэширования: Убедитесь, что ваши политики кэширования соответствуют требованиям. Это может включать в себя правильную настройку заголовков Cache-Control и настраиваемых параметров кэширования в конфигурации.

  3. Тестирование и отладка: После изменения конфигурации, перезапустите Squid и следите за его журналами с помощью команды tail -f /var/log/squid/access.log. Это поможет вам убедиться, что запросы правильно кэшируются и из кеша извлекаются.

Таким образом, для успешного кэширования HTTPS-запросов с использованием Squid важно правильно настроить SSL-перехват, настроить политики кэширования и убедиться в правильной работе конфигурации через логирование и отладку. Таким образом, вы сможете эффективно использовать Squid даже в ситуациях, когда клиентский трафик не шифруется, но требуется кэшировать зашифрованный трафик с удаленными серверами.

Оцените материал
Добавить комментарий

Капча загружается...