Назад | Перейти на главную страницу

Использование Squid для обновления соединений TLS до TLS 1.2

Полное раскрытие здесь Я новичок в 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. Что мне не хватает или есть лучший инструмент, который я должен использовать, чтобы делать то, что я хочу? Любая помощь здесь будет оценена. Заранее спасибо.