В настоящее время у меня есть настройка squid для использования самозаверяющего сертификата для MITM для кеширования запросов HTTPS. Это работает. Если элемента нет в кеше, я хочу запросить у онлайн-прокси, такого как Crawlera. К сожалению, Crawlera предлагает только конечную точку http. Когда я пытаюсь перейти на эту конечную точку, все работает для HTTP, но для HTTPS я получил ошибку: Handshake with SSL server failed: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
Пользуюсь 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.
Насколько я могу судить, вам нужно просто установить cache_peer в http (удалять ssl
вариант, который, кстати, если вы планируете его использовать, должен быть tls
поскольку кальмар 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 и не является опечаткой.
Итак, оказалось, что я столкнулся с известной проблемой 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