在此完全披露一下,我对 Squid 还不太熟悉。我正在尝试使用 FreeBSD 11 上的 Squid 3.5 将出站 TLS 连接升级到 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 握手似乎以某种方式失败了。当我使用开放 SSL 客户端直接从 Squid 代理服务器本身连接时,它可以正确完成:
(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 的站点会导致连接成功。我读到问题可能是客户端(在此上下文中为 squid 服务器)的 SSL 证书信任问题,但当我直接从 Squid 代理本身连接时,我没有收到警报。我遗漏了什么,或者是否有更好的工具可以用来做我想做的事情?任何帮助都将不胜感激。提前致谢。