Traffic Server服务反向代理HTTPS(简写)
一、交互过程
1)用户端(192.168.248.1)请求https://www.test.com通过DNS解析为Traffic Server服务器地址(192.168.248.128),与Traffic Server服务器协商的得到密钥A,用户端将相关数据通过密钥A加密并封装在HTTPS发送至Traffic Server服务器,。
2)Traffic Server服务器通过密钥A解析收到的用户端发送的相关数据,并查看本地缓存。如果本地缓存未存在相关数据,则进行如下步骤:
-
Traffic Server服务器代替用户端向Nextcloud服务器(192.168.248.130)协商加密密钥B;
-
Traffic Server服务器会将从用户端收到的数据、cookie等相关数据,通过密钥B加密并封装在HTTPS发送至Nexcloud服务器;
3)Nexcloud服务器收到从Traffic Server服务器发送过来的数据通过密钥B解密之后进行响应,并通过密钥B加密后返回至Traffic Server服务器;
4)Traffic Server服务器收到从Nexcloud服务器返回的加密数据,通过密钥B进行解密;并将解密后的数据通过密钥A加密后返回至客户端;
二、配置详情
Traffice Server服务器:
Apache Traffic Server 9.1.2下载网址:https://trafficserver.apache.org/downloads
1、部署编译环境
1)使用阿里云镜像站
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
2)安装依赖包
yum install autoconf automake libtool pkgconfig perl-ExtUtils-MakeMaker openssl-devel pcre-devel ncurses-devel libcurl-devel libcap-devel hwloc-devel flex tcl tcl-devel python3 gcc-c++
3)更新gcc
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。
如果要长期使用gcc 9.3的话:
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
4)下载Traffic Server
cd /var
wget -O ./trafficserver-9.1.2.tar.bz2 https://dlcdn.apache.org/trafficserver/trafficserver-9.1.2.tar.bz2
tar xf trafficserver-9.1.2.tar.bz2
ln -s trafficserver-9.1.2 trafficserver
5)编译安装
cd trafficserver
useradd ATS
./configure --with-user=ATS --with-group=ATS --prefix=/usr/local/etc/trafficserver912 --enable-debug --enable-experimental-plugins --enable-example-plugins
make && make check
make install
6)部署至/etc/目录下
ln -s /usr/local/etc/trafficserver912/ /etc/trafficserver
7)添加环境变量
vim /root/.bash_profile
PATH=$PATH:$HOME/bin:/etc/trafficserver/bin
8)创建Server证书(密钥A)文件
mkdir -p /etc/trafficserver/ssl/{server,client}
cd /etc/trafficserver/ssl/server
openssl genrsa -des3 -out server.key 2048
openssl req -new -key server.key -out server.csr
Country Name (2 letter code) [XX]:cn # 国家代号
State or Province Name (full name) []:ShanDong # 省
Locality Name (eg, city) [Default City]:QingDao # 市
Organization Name (eg, company) [Default Company Ltd]:test # 公司名
Organizational Unit Name (eg, section) []: # 可以不输入
Common Name (eg, your name or your server's hostname) []:
Email Address []:test@test.com # 邮箱
A challenge password []: # 可以不输入
An optional company name []: # 可以不输入
cp server.key server.key.back
openssl rsa -in server.key.back -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
9)创建Client证书(密钥B)文件
cd /etc/trafficserver/ssl/client
openssl genrsa -des3 -out client.key 2048
openssl req -new -key client.key -out client.csr
Country Name (2 letter code) [XX]:cn # 国家代号
State or Province Name (full name) []:ShanDong # 省
Locality Name (eg, city) [Default City]:QingDao # 市
Organization Name (eg, company) [Default Company Ltd]:test # 公司名
Organizational Unit Name (eg, section) []: # 可以不输入
Common Name (eg, your name or your server's hostname) []:
Email Address []:client@test.com # 邮箱
A challenge password []: # 可以不输入
An optional company name []: # 可以不输入
cp client.key client.key.back
openssl rsa -in client.key.back -out client.key
openssl x509 -req -days 365 -in client.csr -signkey client.key -out client.crt
10)编写配置文件
cd /etc/trafficserver/etc/trafficserver
vim remap.config
#----------文件最后添加如下内容---------------
map http://192.168.248.128/ http://192.168.248.130:80/ @action=allow @src_ip=0.0.0.0-255.255.255.255
map https://192.168.248.128/ https://192.168.248.130:443/ @action=allow @src_ip=0.0.0.0-255.255.255.255
#------------------------------------------
vim ip_allow.yaml
ip_allow:
- apply: in
ip_addrs: 127.0.0.1
action: allow
methods: ALL
- apply: in
ip_addrs: ::1
action: allow
methods: ALL
#--添加如下内容--------------
- apply: in
ip_addrs: 192.168.248.0/24
action: allow
methods: ALL
#-------------------------
- apply: in
ip_addrs: 0/0
action: deny
methods:
- PURGE
- PUSH
- DELETE
- apply: in
ip_addrs: ::/0
action: deny
methods:
- PURGE
- PUSH
- DELETE
vim records.config
#----------修改原始内容-------
CONFIG proxy.config.http.server_ports STRING 80 443:ssl
#---------------------------
#----------文件最后添加如下内容---------------
CONFIG proxy.config.ssl.server.multicert.exit_on_load_fail INT 0
CONFIG proxy.config.ssl.server.multicert.filename STRING ssl_multicert.config
CONFIG proxy.config.ssl.server.cert.path STRING /etc/trafficserver/ssl/server/
CONFIG proxy.config.ssl.server.private_key.path STRING /etc/trafficserver/ssl/server/
CONFIG proxy.config.ssl.client.private_key.path STRING /etc/trafficserver/ssl/client/
CONFIG proxy.config.ssl.client.private_key.filename STRING client.key
CONFIG proxy.config.ssl.client.cert.path STRING /etc/trafficserver/ssl/client/
CONFIG proxy.config.ssl.client.cert.filename STRING client.crt
#------------------------------------------
vim ssl_multicert.config
#----------文件最后添加如下内容---------------
dest_ip=* ssl_cert_name=server.crt ssl_key_name=server.key
#------------------------------------------
11)启动服务并更改主机防火墙
trafficserver start
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --reload
12)查看相关功能
14)验证代理服务
HTTP服务:
HTTPS服务:
-----------------------------------------------如需转载,请注明出处--------------------------------------------------
本作为本人独立编写,但本人能力有限如果不对的地方欢迎大佬指正。