Есть ли способ кэшировать или пересылать https-запросы на http-прокси с помощью Squid?

В настоящее время у меня есть настройка squid для использования самозаверяющего сертификата для MITM для кеширования запросов HTTPS. Это работает. Если элемента нет в кеше, я хочу запросить у онлайн-прокси, такого как Crawlera. К сожалению, Crawlera предлагает только конечную точку http. Когда я пытаюсь перенаправить на эту конечную точку, все работает для HTTP, но для HTTPS я получил сообщение об ошибке: Не удалось установить связь с сервером SSL: ошибка: 140770FC: Процедуры SSL: SSL23_GET_SERVER_HELLO: неизвестный протокол

Я использую squid 4.2. Есть ли способ настроить squid, чтобы я мог указать его как прокси для запроса https, а затем заставить его действовать как кеш или перенаправить на прокси-сервер HTTP (который поддерживает CONNECT)? Если в какой-то момент я передаю в виде обычного текста, это не имеет никакого значения для этого приложения.

Следующая моя конфигурация для Squid:

http_port 3128 ssl-bump \
  cert=/apps/server_crt.pem key=/apps/server_key.pem \
  generate-host-certificates=on dynamic_cert_mem_cache_size=4MB
sslcrtd_program /apps/squid/libexec/security_file_certgen -s /apps/squid/var/lib/ssl_db -M 4MB sslcrtd_children 8 startup=1 idle=1 
acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump bump all
acl localnet src 10.0.0.0/8     # RFC1918 possible internal network
acl localnet src 172.16.0.0/12  # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7       # RFC 4193 local private network range
acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl Safe_ports port 1025-65535  # unregistered ports
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
coredump_dir /apps/squid/var/cache
maximum_object_size 10 GB
cache_dir ufs /apps/squid/var/cache/squid 100 16 256
cache_mem 256 MB
maximum_object_size_in_memory 512 KB
cache_replacement_policy heap LFUDA
range_offset_limit -1
quick_abort_min -1 KB
offline_mode on
http_access allow localnet
http_access allow localhost
http_access deny all
refresh_pattern . 525600 100% 525600 ignore-reload ignore-no-store ignore-private ignore-auth ignore-must-revalidate store-stale

cache_peer proxy.crawlera.com parent 8010 0 ssl login=APIKEY:
never_direct allow all

Обновить

Если я изменю приведенные выше директивы ssl_bump на следующие :

acl step1 at_step SslBump1
acl step2 at_step SslBump2
acl step3 at_step SslBump3

ssl_bump stare step2
ssl_bump bump step3

Запрос ресурсов HTTPS проходит через оба прокси-сервера к цели и правильно возвращает ответ вызывающему, но у него больше нет доступа MITM на прокси-сервере Squid для кэширования результатов, поэтому они ПОДКЛЮЧАЮТСЯ к Crawlera на последующие запросы на тот же ресурс. HTTP, с другой стороны, будет проходить через оба прокси, если его нет в кеше, в противном случае он будет возвращен из кеша.

Это все еще не то решение, которое я ищу, я хотел бы также кешировать HTTPS .

0
задан 20 September 2018 в 20:47
2 ответа

Итак, оказалось, что я столкнулся с известной проблемой Squid. Алекс Руссков из списка рассылки Squid Users был достаточно любезен, чтобы помочь мне и указать мне направление форка Squid от Measurement Factory. На этой вилке находится ветвь Squid, которая действительно может решить проблему объединения ssl_bump с cache_peer . https://github.com/measurement-factory/squid/tree/SQUID-360-peering-for-SslBump

Я смог собрать из этой ветки, и моя исходная конфигурация заработала!

Я не думайте, что ни одна из более поздних ветвей вилки Measurement Factory включает это исправление. Это также не официальный код проекта Squid, поэтому он не будет поддерживаться SP. Но мне сказали, что MF беспокоятся о том, чтобы включить его в официальный выпуск SP, и у MF определенно есть прецедент для успешного выполнения этого.

Вот мое Dockerized сквозное решение https://github.com/brett-- anderson / squid_proxy

0
ответ дан 4 December 2019 в 13:23

Насколько я могу судить, вам следует просто установить для параметра cache_peer значение http (удалить параметр ssl , который, кстати, если вы планируете для его использования должно быть tls , поскольку squid v4.x )

cache_peer proxy.crawlera.com parent 8010 0 ssl login=APIKEY

Попробуйте:

cache_peer proxy.crawlera.com parent 8010 0 login=APIKEY

PS: Я только что заметил : в конце строка после APIKEY, я не уверен, что это правильно, вы можете удалить ее, если только она не связана с самим APIKEY и не является опечаткой.

2
ответ дан 4 December 2019 в 13:23

Теги

Похожие вопросы