You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Squid 5.8配置双向TLS(mTLS)失败,求解决方案

Squid 5.8配置客户端mTLS访问API的正确方案

问题场景

有一个启用双向TLS(mTLS)的公开API api.example.com,直接使用curl https://api.example.com --cert /path/to/cert --key /path/to/key可正常访问。需要通过Squid代理访问该API,让后端进程无需手动指定证书密钥即可调用,但添加tls_outgoing_options和ssl_bump配置后,测试握手失败,报错OpenSSL SSL_connect: SSL_ERROR_SYSCALL。

核心错误排查

首先注意:你之前的测试命令curl https://api.example.com是直接访问API,并未通过Squid代理,因此Squid的mTLS配置根本没生效。测试必须指定代理地址,命令应为:

curl -x http://[你的Squid主机IP]:[Squid端口] https://api.example.com -v

正确配置步骤

1. 配置Squid客户端mTLS证书

不要拆分tls_outgoing_options指令(拆分后会覆盖前序配置),将证书和密钥写在同一行,可通过ACL指定仅对目标API生效:

# 定义目标API的访问控制列表
acl target_api dstdomain api.example.com
# 为该API的出站请求配置客户端证书和密钥
tls_outgoing_options cert=/path/to/client.cert key=/path/to/client.key target_api

如果需要对所有出站HTTPS请求使用该证书,可省略ACL:

tls_outgoing_options cert=/path/to/client.cert key=/path/to/client.key

2. 确保证书文件权限正确

Squid运行用户(通常为squid)必须能读取证书和密钥:

# 更改文件归属
chown squid:squid /path/to/client.cert /path/to/client.key
# 密钥权限需严格限制,避免泄露
chmod 600 /path/to/client.key
# 证书权限可放宽
chmod 644 /path/to/client.cert

3. 验证证书格式

Squid仅支持PEM格式的证书和密钥,如果你的证书是PKCS#12(.p12)格式,需转换为PEM:

# 提取客户端证书
openssl pkcs12 -in client.p12 -out client.cert -nokeys -clcerts
# 提取客户端密钥(-nodes 参数避免设置密码)
openssl pkcs12 -in client.p12 -out client.key -nocerts -nodes

4. 移除不必要的ssl_bump配置

ssl_bump用于SSL流量拦截(中间人代理),你的需求是让Squid作为客户端发起mTLS连接,无需拦截流量,因此应删除ssl_bump server-first all配置,避免干扰正常TLS握手流程。

5. 重启Squid并验证

# 重启Squid服务
systemctl restart squid
# 查看日志排查问题(日志路径可能因系统不同略有差异)
tail -f /var/log/squid/cache.log
tail -f /var/log/squid/access.log

完成以上配置后,后端进程只需将代理地址设为Squid的地址,即可自动通过mTLS访问目标API。

内容的提问来源于stack exchange,提问作者Altaz Bhanji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 04:01:08