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

已配置SSL终止,Apache Traffic Server仍不缓存HTTPS内容求助

问题:ATS正向代理无法缓存HTTPS内容,SSL终止未生效

配置文件

records.config

# records.config
CONFIG proxy.config.http.server_ports STRING 8125 8443:ssl
CONFIG proxy.config.http.cache.required_headers INT 0
CONFIG proxy.config.url_remap.remap_required INT 0
CONFIG proxy.config.reverse_proxy.enabled INT 0
CONFIG proxy.config.ssl.server.cert.path STRING /usr/local/etc/ssl/
CONFIG proxy.config.ssl.server.private_key.path STRING /usr/local/etc/ssl/
CONFIG proxy.config.ssl.client.certification_level INT 0

ssl_multicert.config

# ssl_multicert.config
dest_ip=*      ssl_cert_name=fullchain-from-letsencrypt.pem ssl_key_name=key-from-letsencrypt.pem

证书由certbot生成,预期实现SSL终止但未生效。

代理设置与测试

export http_proxy=http://ats.domain:8125
export https_proxy=https://ats.domain:8443;

# HTTP请求正常缓存
wget http://releases.ubuntu.com/jammy/ubuntu-22.04.2-live-server-amd64.iso.zsync

# HTTPS请求报错且不缓存
wget https://releases.ubuntu.com/jammy/ubuntu-22.04.2-live-server-amd64.iso.zsync

wget HTTPS请求报错信息

--2023-08-04 10:38:30--  https://releases.ubuntu.com/jammy/ubuntu-22.04.2-live-server-amd64.iso.zsync
Resolving ats.domain (ats.domain)... 10.147.19.193
Connecting to ats.domain (ats.domain)|10.147.19.193|:8443... connected.
Failed reading proxy response: Success
Retrying.

curl测试结果

# HTTP请求正常缓存
curl http://releases.ubuntu.com/jammy/ubuntu-22.04.2-live-server-amd64.iso.zsync > /dev/null

# HTTPS请求无报错但不缓存
curl https://releases.ubuntu.com/jammy/ubuntu-22.04.2-live-server-amd64.iso.zsync > /dev/null

ATS日志

traffic_logcat -f /usr/local/var/log/trafficserver/squid.blog

1691116320.693 6 TCP_HIT/200 3859845 GET http://releases.ubuntu.com/jammy/ubuntu-22.04.2-live-server-amd64.iso.zsync - NONE/- application/x-iso9660-image
1691116855.993 7849 TCP_MISS/200 105 CONNECT releases.ubuntu.com:443/ - DIRECT/releases.ubuntu.com -

可见HTTPS请求采用CONNECT隧道方式,未触发缓存逻辑。


解决方案

核心问题分析

当前HTTPS请求走CONNECT隧道模式,ATS仅作为中转转发加密流量,无法解析隧道内的HTTPS请求内容,因此无法执行缓存。要实现HTTPS缓存,需将ATS配置为MITM(中间人)代理,终止客户端SSL连接、解析请求后再与后端建立连接,同时让客户端信任ATS的CA证书。

具体配置步骤

  1. 生成ATS专用CA证书
    Let's Encrypt证书无法用于MITM代理,需自行生成CA证书:
openssl req -x509 -newkey rsa:4096 -keyout ats-ca-key.pem -out ats-ca-cert.pem -days 3650 -nodes

将生成的ats-ca-cert.pem导入客户端的系统信任存储(如Linux的/etc/ssl/certs、Windows的证书管理器),否则客户端会报SSL证书错误。

  1. 修改records.config启用SSL拦截
    添加/更新以下配置项:
# 启用SSL拦截功能
CONFIG proxy.config.ssl.intercept.enabled INT 1
# 允许ATS自动生成目标站点的签名证书
CONFIG proxy.config.ssl.intercept.cert_generate INT 1
# 指定CA证书和密钥路径
CONFIG proxy.config.ssl.intercept.ca_cert.path STRING /usr/local/etc/ssl/ats-ca-cert.pem
CONFIG proxy.config.ssl.intercept.ca_key.path STRING /usr/local/etc/ssl/ats-ca-key.pem
# 允许缓存HTTPS内容
CONFIG proxy.config.http.cache.ssl INT 1
  1. 调整客户端代理配置
    将https_proxy指向ATS的HTTP代理端口,而非HTTPS端口:
export http_proxy=http://ats.domain:8125
export https_proxy=http://ats.domain:8125

此设置会让客户端将HTTPS请求以GET https://xxx的形式发送到ATS,触发SSL拦截逻辑。

  1. 重启ATS服务
traffic_server -k restart

验证

重新执行HTTPS请求后,查看ATS日志,若出现TCP_HIT或TCP_MEM_HIT,说明缓存生效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 01:47:11