Squid: прозрачное проксирование HTTPS?

Имеется squid версии 3.3. Требуется заблокировать доступ на определенные сайты, при этом очень желательно, чтобы HTTPS на сайтах, не входящих в список заблокированных, работал нормально.


Конечно, влезть в трафик просто так не получится, поэтому используется sslbump. Ниже приведены настройки squid и другие опции. Ситуация: браузер Android-устройства кричит о неправильном сертификате, несмотря на то, что в устройство был установлен сертификат.


Файл конфигурации:

https_port 3130 transparent ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/home/user/.keystore/squid.pem key=/home/user/.keystore/squid.key

##Also add the following lines to enable SSL bumping:
always_direct allow all
ssl_bump client-first all

# the following two options are unsafe and not always necessary:
sslproxy_cert_error allow all
sslproxy_flags DONT_VERIFY_PEER
sslcrtd_program /usr/lib/squid/ssl_crtd -s /usr/share/ssl-db -M 4MB



С помощью iptables трафик перенаправляется на порт 3130.


Опции сборки squid:

Squid Cache: Version 3.3.6-20130708-r12586
configure options:  '--prefix=/usr' '--includedir=/usr/include' '--datadir=/usr/share' '--bindir=/usr/sbin' '--libexecdir=/usr/lib/squid' '--localstatedir=/var' '--sysconfdir=/etc/squid3' '--enable-delay-pools' '--enable-ssl' '--enable-ssl-crtd' '--enable-linux-netfilter' '--enable-eui' '--enable-snmp' '--enable-gnuregex' 'CC=distcc'



Следующим образом был создан сертификат и ключ:

openssl genrsa -out squid.key
openssl req -new -key /etc/squid/ssl/squid.key -out squid.csr
openssl x509 -req -days 3650 -in /etc/squid/ssl/squid.csr -signkey squid.key -out squid.pem



Создание сертификата для импорта в Android-устройство:

openssl x509 -in squid.pem -outform DER -out squid.der



Полученный файл был установлен на Android-устройство. Но, как я уже говорил, браузер и другие программы кричат о проблемах с безопасностью.

Вот здесь человек говорит, что прозрачное проксирование HTTPS возможно.


Возможно ли настроить проксирование так, чтобы со стороны пользователя не было никаких уведомлений о проблемах с безопасностью?


Спасибо.
  • Вопрос задан
  • 33898 просмотров
Решения вопроса 1
Maximus43
@Maximus43
Будем считать, что проксирование у вас работает, сертификаты https сайтов автоматические генерируются и подписываются. Я в эти детали вникать не буду.
Проблема, как я понял, в том, что браузер не принимает эти сгенеренные сертификаты. И это достаточно естественно, потому что корневой сертификат создавать с дефолтными настройками не надо. Создайте конфиг и вставьте туда

subjectKeyIdentifier=hash

authorityKeyIdentifier=keyid:always,issuer:always

basicConstraints=critical,CA:TRUE, pathlen:0

keyUsage = cRLSign, keyCertSign

basicConstraints = CA:true

keyUsage = digitalSignature, cRLSign, keyCertSign


Используйте конфиг при подписании корневого сертификата.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
resetnow
@resetnow Автор вопроса
Заработало.

Помимо того, что указано выше, нужно использовать следующий способ генерации сертификатов:

openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout squid.pem -out squid.pem
openssl x509 -in squid.pem -outform DER -out squid.der


После этого в строке https_port указываем squid.pem для параметров key и cert, squid.der устанавливаем на целевое устройство. К слову, вот здесь описан способ установки сертификатов на Android без принудительного включения блокировки экрана паролем.
Ответ написан
@Lexus345
я
У современных браузеров встроенный DNS клиент, без явного указания прокси они сами резолвят домен и подключение идет по IP, для генерации сертификата squid'у нужно знать имя домена по которому идет подключение, прозначный режим для MITM не катит.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы