Полное раскрытие здесь Я новичок в Squid. Я пытаюсь обновить исходящие TLS-соединения с помощью Squid 3.5 на FreeBSD 11 до TLS 1.2. У нас есть более старое приложение, которое не поддерживает TLS 1.2, но конечный сервер, с которым оно взаимодействует, требует этого. Я пытаюсь заставить Squid «обновить» TLS-соединения (Клиент ----> Прокси TLS 1.0 -------> Прокси -----> Конечный сервер TLS 1.2). Я настроил Squid, используя этот поток вместе с другими сайтами:
https://stackoverflow.com/questions/34398484/can-i-use-squid-to-upgrade-client-tls-connections
Хотя я вижу, что squid пытается установить соединение по протоколу TLS 1.2 с целевым хостом при обычном использовании прокси-сервера, рукопожатие не выполняется со следующим:
(SSLDump Output on Squid server while proxying connections)
2 1490815989.3016 (0.0527) S>CV3.3(85) Handshake
ServerHello
Version 3.3
random[32]=
15 21 18 2a 4f 7f 76 2e 49 fd 7e fa ea ac 3b f1
0e fe 7e f9 ce d6 46 b1 fb 14 e3 4a 5c 3d 82 b4
session_id[32]=
41 7f 92 6a 90 7f f0 1a 2f c6 b6 17 f4 a2 ab a4
cf 1a e8 65 51 bc 11 0d 3e b9 9d 4e cd bc 49 29
cipherSuite TLS_RSA_WITH_AES_256_CBC_SHA256
compressionMethod NULL
4 3 1490815989.3017 (0.0001) S>CV3.3(3031) Handshake
Certificate
4 4 1490815989.3017 (0.0000) S>CV3.3(4) Handshake
ServerHelloDone
4 5 1490815989.3028 (0.0010) C>SV3.3(262) Handshake
ClientKeyExchange
4 6 1490815989.3028 (0.0000) C>SV3.3(1) ChangeCipherSpec
4 7 1490815989.3028 (0.0000) C>SV3.3(80) Handshake
4 8 1490815989.3581 (0.0552) S>CV3.3(1) ChangeCipherSpec
4 9 1490815989.3581 (0.0000) S>CV3.3(80) Handshake
4 10 1490815989.3619 (0.0037) C>SV3.3(64) Alert
4 1490815989.3620 (0.0001) C>S TCP FIN
4 11 1490815989.4140 (0.0520) S>CV3.3(64) Alert
4 1490815989.4140 (0.0000) S>C TCP FIN
Выше показана вторая половина прокси-соединения (сервер Squid с удаленным хостом) при подключении нашего приложения к целевому хосту через прокси. Я думаю, что поля предупреждений являются причиной проблемы, но, поскольку они зашифрованы, я не уверен, что это за предупреждения. Конечным результатом является то, что наше приложение выдает ошибку с сообщением, что оно не может подключиться к удаленному хосту. Я вижу, как сервер Squid пытается подключиться, но квитирование SSL выглядит так, как будто оно каким-то образом не работает. Когда я подключаюсь напрямую с самого прокси-сервера Squid с помощью открытого SSL-клиента, он завершается правильно:
(From Squid server itself)
openssl s_client -connect host.domain.com:443
(SSLDump Output during OpenSSL Client Handshake)
1 2 1490817039.1215 (0.0541) S>CV3.3(81) Handshake
ServerHello
Version 3.3
random[32]=
28 44 f5 a1 69 9b 6f 04 c6 51 6c c0 82 05 e0 a8
5c b1 8d e0 e0 15 7b b8 29 dc 91 af ad eb 9b 03
session_id[32]=
41 7f 92 6a 90 7e a0 a2 2f c6 b6 17 f4 a2 a8 a4
55 c8 27 dc c8 8a 35 9e 3e b9 9d 4e cd bc 4d 13
cipherSuite TLS_RSA_WITH_AES_256_CBC_SHA256
compressionMethod NULL
1 3 1490817039.1216 (0.0000) S>CV3.3(3031) Handshake
Certificate
1 4 1490817039.1216 (0.0000) S>CV3.3(4) Handshake
ServerHelloDone
1 5 1490817039.1244 (0.0028) C>SV3.3(262) Handshake
ClientKeyExchange
1 6 1490817039.1244 (0.0000) C>SV3.3(1) ChangeCipherSpec
1 7 1490817039.1244 (0.0000) C>SV3.3(80) Handshake
1 8 1490817039.1811 (0.0567) S>CV3.3(1) ChangeCipherSpec
1 9 1490817039.1811 (0.0000) S>CV3.3(80) Handshake
Текущая соответствующая конфигурация Squid:
# Squid normally listens to port 3128
http_port 3128 ssl-bump generate-host-certificates=on version=1 dynamic_cert_mem_cache_size=8MB cert=/usr/local/etc/squid/certs/domain.com.cert key=/usr/local/etc/squid/certs/domain.com.private
# SSL Bump Config
always_direct allow all
ssl_bump server-first all
sslproxy_cert_error allow all
sslproxy_flags DONT_VERIFY_PEER
sslcrtd_program /usr/local/libexec/squid/ssl_crtd -s /var/ssl_db -M 4MB sslcrtd_children 8 startup=1 idle=1
Я должен отметить, что у меня нет проблем с подключением через этот прокси к другим веб-сайтам с поддержкой SSL. Обновление TLS до 1.2 работает нормально. Использование клиента, который поддерживает только TLS 1.0, например, для подключения к сайту, который поддерживает только TLS 1.2 через прокси-сервер, приводит к успешному подключению. Я читал, что, возможно, проблема связана с проблемой доверия к SSL-сертификату с клиентом (сервером squid в данном контексте), но я не получаю предупреждения, когда подключаюсь напрямую с прокси-сервера Squid. Что мне не хватает или есть лучший инструмент, который я должен использовать, чтобы делать то, что я хочу? Любая помощь здесь будет оценена. Заранее спасибо.