Usando o Squid para atualizar conexões TLS para o TLS 1.2

2

Divulgação completa aqui, eu sou relativamente novo no Squid. Eu estou tentando atualizar conexões TLS de saída usando o Squid 3.5 no FreeBSD 11 para o TLS 1.2. Temos um aplicativo antigo que não suporta o TLS 1.2, mas o servidor final está se comunicando com ele. Estou tentando fazer com que o Squid 'atualize' as conexões TLS (Cliente ---- > Proxy TLS 1.0 ------- > Proxy ----- > Servidor final TLS 1.2). Eu configurei o Squid usando este thread junto com vários outros sites:

link

Embora eu possa ver o squid tentando fazer conexões como TLS 1.2 para o host de destino ao usar o proxy normalmente, o handshake falha com o seguinte:

    (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

O exemplo acima mostra a segunda metade da conexão com proxy (servidor Squid para host remoto) durante a conexão de nosso aplicativo ao host de destino através do proxy. Eu acho que os campos de alerta são o que está causando o problema, mas desde que eles são criptografados, não tenho certeza quais são os alertas. O resultado final é que nosso aplicativo falha com um erro dizendo que não pode se conectar ao host remoto. Eu vejo o servidor Squid tentando se conectar, mas o handshake SSL parece falhar de alguma forma. Quando eu me conecto diretamente do próprio servidor Squid Proxy usando o cliente SSL aberto, ele é concluído corretamente:

    (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

Configuração atual relevante do 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

Devo salientar que não tenho problemas em conectar-me por meio desse proxy a outros sites habilitados para SSL. Atualização TLS para 1.2 funciona bem. Usando um cliente que suporta apenas o TLS 1.0, por exemplo, para conectar-se a um site que suporta apenas o TLS 1.2 através dos resultados do proxy em uma conexão bem-sucedida. Eu li que, talvez, o problema seja um problema de confiança do certificado SSL com o cliente (o servidor squid neste contexto), mas eu não recebo os alertas quando me conecto diretamente a partir do próprio proxy Squid. O que estou perdendo ou existe uma ferramenta melhor que eu deveria estar usando para fazer o que eu quero? Qualquer ajuda aqui seria apreciada. Agradecemos antecipadamente.

    
por Robert Franzke 30.03.2017 / 23:27

0 respostas

Tags