Конфигурация Squid 6.10 с поддержкой HTTPS не может установить соединение TLS.

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

На Ubuntu 16.04 у меня установлен Squid 3.5.12, собранный из исходников с следующим конфигом:

auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid/squid-password
acl guests proxy_auth REQUIRED

acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 443         # https
acl CONNECT method CONNECT

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
#http_access allow localhost
#http_access deny all
http_access allow guests

#http_port 3128

https_port 3129 connection-auth=off cert=/etc/letsencrypt/live/mywebsite.com/fullchain.pem key=/etc/letsencrypt/live/mywebsite.com/privkey.pem

coredump_dir /var/spool/squid

refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern (Release|Packages(.gz)*)$      0       20%     2880
refresh_pattern .               0       20%     4320

который работает через HTTPS. Я могу использовать мой прокси с браузером Google Chrome следующим образом:

"C:\Program Files\Google\Chrome\Application\chrome.exe" --proxy-server=https://mywebsite.com:3129

При переходе на Ubuntu 24.04, я установил squid с помощью следующей команды:

sudo apt install squid-openssl

и он начал работать с настройками по умолчанию через HTTP:

auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/squid-password
acl guests proxy_auth REQUIRED

acl localnet src 0.0.0.1-0.255.255.255  # RFC 1122 "this" network (LAN)
acl localnet src 10.0.0.0/8             # RFC 1918 local private network (LAN)
acl localnet src 100.64.0.0/10          # RFC 6598 shared address space (CGN)
acl localnet src 169.254.0.0/16         # RFC 3927 link-local (directly plugged) machines
acl localnet src 172.16.0.0/12          # RFC 1918 local private network (LAN)
acl localnet src 192.168.0.0/16         # RFC 1918 local private network (LAN)
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 1025-65535  # unregistered ports
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

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localhost
http_access deny to_localhost
http_access deny to_linklocal
http_access allow guests

include /etc/squid/conf.d/*.conf

#http_access deny all
http_port 3128

coredump_dir /var/spool/squid

refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern \/(Packages|Sources)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims
refresh_pattern \/Release(|\.gpg)$ 0 0% 0 refresh-ims
refresh_pattern \/InRelease$ 0 0% 0 refresh-ims
refresh_pattern \/(Translation-.*)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims
refresh_pattern .               0       20%     4320

Для HTTPS я добавляю следующее:

https_port 3129 tls-cert=/etc/letsencrypt/live/mywebsite.com/fullchain.pem tls-key=/etc/letsencrypt/live/mywebsite.com/privkey.pem generate-host-certificates=on dynamic_cert_mem_cache_size=4MB
sslcrtd_program /lib/squid/security_file_certgen -c -s /var/lib/squid/ssl_db -M 4MB

или

https_port 3129 connection-auth=off tls-cert=/etc/letsencrypt/live/mywebsite.com/fullchain.pem tls-key=/etc/letsencrypt/live/mywebsite.com/privkey.pem

но безуспешно.

Когда я попытался подключиться через HTTPS с помощью

"C:\Program Files\Google\Chrome\Application\chrome.exe" --proxy-server=mywebsite.com:3129

В логах появилась ошибка, что не удалось настроить TLS соединение:

2025/01/15 08:43:34 kid1| ERROR: failure while accepting a TLS connection on conn23 local=172.236.29.157:3129 remote=91.122.37.167:50191 FD 12 flags=1: SQUID_TLS_ERR_ACCEPT+TLS_LIB_ERR=A00009B+TLS_IO_ERR=1
    connection: conn23 local=172.236.29.157:3129 remote=91.122.37.167:50191 FD 12 flags=1
2025/01/15 08:43:39 kid1| ERROR: failure while accepting a TLS connection on conn24 local=172.236.29.157:3129 remote=91.122.37.167:50281 FD 12 flags=1: SQUID_TLS_ERR_ACCEPT+TLS_LIB_ERR=A00009B+TLS_IO_ERR=1
    connection: conn24 local=172.236.29.157:3129 remote=91.122.37.167:50281 FD 12 flags=1
2025/01/15 08:43:39 kid1| ERROR: failure while accepting a TLS connection on conn25 local=172.236.29.157:3129 remote=91.122.37.167:50282 FD 12 flags=1: SQUID_TLS_ERR_ACCEPT+TLS_LIB_ERR=A00009B+TLS_IO_ERR=1
    connection: conn25 local=172.236.29.157:3129 remote=91.122.37.167:50282 FD 12 flags=1

и браузер Chrome не запрашивает учетные данные и показывает ошибку ERR_CONNECTION_RESET.

Что я сделал неправильно?

EDIT1

Мой HTTPS прокси работает с curl:

curl -x https://mywebsite.com:3129 --proxy-user guest:<password> -L https://api.ipify.org/

но не работает с Google Chrome.

Почему предыдущая версия Squid 3.5.12 работала с Google Chrome, а версия 6.10 нет?

Google Chrome требует, чтобы прокси было указано со схемой (префикс https://):

"C:\Program Files\Google\Chrome\Application\chrome.exe" --proxy-server=https://mywebsite.com:3129

Ответ или решение

Для решения проблемы с поддержкой HTTPS в Squid 6.10 на Ubuntu 24.04, следует учитывать несколько ключевых моментов, включая отличия в конфигурации Squid 3.5.12 и Squid 6.10, а также особенности работы различных версий браузера Google Chrome.

Теория

Настройка TLS в Squid: В версии Squid 6.10 произошло обновление подходов к конфигурации HTTPS подключений. Например, параметры tls-cert и tls-key используются вместо старых cert и key, также добавлена возможность генерации динамических сертификатов. Эти изменения требуют внимательного подхода к настройке.

Поведение браузеров: Современные браузеры, включая Google Chrome, изменили свои подходы к работе с прокси и безопасным соединением. Использование прокси может потребовать дополнительных настроек как на стороне клиента, так и на стороне сервера.

Пример

Рабочая конфигурация для Curl: Как указано в вашем примере, curl успешно подключается к прокси, используя команду:

curl -x https://mywebsite.com:3129 --proxy-user guest:<password> -L https://api.ipify.org/

Это указывает, что прокси сервер Squid корректно обрабатывает запросы TLS от curl.

Ошибка в Google Chrome: Ошибка ERR_CONNECTION_RESET в Google Chrome может указывать на проблемы с подлинностью сертификата, неподдерживаемыми версиями TLS или несоответствием шифров.

Применение

  1. Проверка версии TLS и циклофоров: Убедитесь, что текущая конфигурация Squid использует современные версии TLS (например, TLS 1.3) и поддерживает поверхностные шифры, ожидаемые браузерами. Необходимо сверить поддержку на стороне сервера и клиента.

  2. Проверка целостности сертификатов: Обновите сертификаты и проверьте их правильность, используя следующие команды:

    openssl x509 -in /etc/letsencrypt/live/mywebsite.com/fullchain.pem -text -noout

    Убедитесь, что ваш сертификат не просрочен и цепочка сертификации завершается надлежащим образом.

  3. Логи Squid: Углубленная проверка логов Squid может выявить дополнительные детали о сбоях в соединении (например, TLS_LIB_ERR=A00009B). Используйте эти сообщения при настройке параметров и устранении ошибок.

  4. Конфигурация Squid: Используйте обновленные параметры конфигурации, как указано ниже:

    https_port 3129 tls-cert=/etc/letsencrypt/live/mywebsite.com/fullchain.pem tls-key=/etc/letsencrypt/live/mywebsite.com/privkey.pem generate-host-certificates=on dynamic_cert_mem_cache_size=4MB
    sslcrtd_program /lib/squid/security_file_certgen -c -s /var/lib/squid/ssl_db -M 4MB
  5. Настройка Google Chrome: Убедитесь, что запускаете Chrome с точной спецификацией схемы прокси:

    "C:\Program Files\Google\Chrome\Application\chrome.exe" --proxy-server=https://mywebsite.com:3129

Применяя вышеуказанные рекомендации, вы можете устранить проблемы, связанные с настройкой HTTPS в Squid на Ubuntu 24.04, и успешно обеспечить безопасное подключение клиентов через Google Chrome. Проблемы в различиях работы между версиями Squid и поведения браузера могут быть решены через корректную настройку сертификатов, шифров и версий протокола на стороне сервера.

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

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