静看光阴荏苒
不管不顾不问不说也不念

使用Caddy搭建TLS1.3+HTTP2代理

目前Caddy的官方版本还不支持TLS1.3,不过我们也可以自己编译然后魔改一下尝尝鲜。据说今年2月份左右应该就会支持TLS1.3了,之前一直不支持的原因是GO标准库里不支持,而Caddy是基于这个标准库的。

虽然最后测试使用TLS1.3+HTTP2代理的效果并不理想,Caddy日志里面一堆Reset,只能说GFW是真的牛批,但是通过这篇文章可以学到如何从源头构建一个GO程序以及为Caddy添加插件的方法,还是挺不错的~

先安装一下基本组件:

yum -y install git wget nano patch

下载GO的预构建包,前几天Golang刚发布了Go1.12beta2这个版本,这个版本里面就是带有TLS1.3支持的了:

wget https://dl.google.com/go/go1.12beta2.linux-amd64.tar.gz
tar -xzvf go1.12beta2.linux-amd64.tar.gz -C /usr/bin

编辑账户配置文件:

nano ~/.bash_profile

加入GO的PATH:

export PATH=$PATH:/usr/bin/go/bin

使其生效:

source ~/.bash_profile

新建一个文件夹命名为caddy并导入GOPATH为当前这个文件夹:

mkdir caddy && export GOPATH=$PWD/caddy

拉取项目源码:

go get github.com/mholt/caddy
go get github.com/caddyserver/builds

这个是用于配置HTTP代理的插件,如果你需要就拉取,不需要可以省略:

go get github.com/caddyserver/forwardproxy

进入到caddy源码目录:

cd $GOPATH/src/github.com/mholt/caddy

下载TLS1.3补丁:

wget https://www.hnrk.io/md/caddy.patch

把补丁打上去:

patch -p1 < caddy.patch

编辑如下源码,添加HTTP代理插件:

nano $GOPATH/src/github.com/mholt/caddy/caddy/caddymain/run.go

将如下内容插入到这个文件内:

_ "github.com/caddyserver/forwardproxy"

位置如图所示:

这里不局限于这个代理插件,只要是Caddy官方支持的插件都可以通过这个方式添加。

进入到构建目录:

cd $GOPATH/src/github.com/mholt/caddy/caddy

编译:

go run build.go

完成之后在当前目录下就会有caddy的二进制文件了,我们移动到/usr/local/bin:

mv caddy /usr/local/bin

新建两个目录,一个用于存放caddy的配置文件,一个用于存放caddy自动申请的ssl证书:

mkdir -p /etc/caddy && mkdir -p /etc/ssl/caddy

新建Caddyfile配置文件:

vi /etc/caddy/Caddyfile

写入:

tls.koko.cat {
	tls 1062951199@qq.com
	log stdout
	forwardproxy {
	basicauth user password
	hide_ip
	hide_via
	}
}

注:

1.tls后面修改为你自己的邮箱,caddy自动申请ssl证书需要。

2.basicauth设置一个你的账号和密码,一定要设置,否则你搭建完的代理可能一瞬就被扫描,变成公开代理。。。

然后我们配置systemd服务:

vi /etc/systemd/system/caddy.service

写入:

[Unit]
Description=Caddy HTTP/2 web server
Documentation=https://caddyserver.com/docs
After=network-online.target
Wants=network-online.target systemd-networkd-wait-online.service

[Service]
Restart=on-abnormal
User=root
Group=root
Environment=CADDYPATH=/etc/ssl/caddy
ExecStart=/usr/local/bin/caddy -log stdout -agree=true -conf=/etc/caddy/Caddyfile
ExecReload=/bin/kill -USR1 $MAINPID
KillMode=mixed
KillSignal=SIGQUIT
TimeoutStopSec=5s

[Install]
WantedBy=multi-user.target

启动caddy以及设置开机启动:

systemctl start caddy
systemctl enable caddy

如有报错或运行出错,可以执行下面的命令查看日志:

journalctl --boot -u caddy.service

接着我们打开这个网站测试一下我们配置的站点是否支持TLS1.3:

https://www.ssllabs.com

经测试正常:

TLS1.3目前属于测试/实验阶段,服务端支持了还要客户端浏览器支持才行,下面是Chrome70开启TLS1.3的方法:

chrome://flags/

搜索TLS1.3,然后这里选择Enable(Final):

访问一下我们的域名看看是否正常:

代理的话,Chrome这里使用SwitchyOmega按如图设置即可:

赞(3)
未经允许不得转载:荒岛 » 使用Caddy搭建TLS1.3+HTTP2代理
分享到: 更多 (0)

评论 3

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    建议添加probe_resistance参数和web页面
    另外推荐个项目也支持tls1.3+http2 https://trojan-gfw.github.io/trojan/

    ggh5年前 (2019-01-13) Google Chrome 73.0.3667.2 Google Chrome 73.0.3667.2 Android 8.0.0 Android 8.0.0回复
  2. #2

    你的网站我在成都,在中国任何地方都无法打开你的网站,都只能用翻墙软件打开,请你解决此问题,谢谢亲

    安静安静5年前 (2019-01-27) Google Chrome 63.0.3239.132 Google Chrome 63.0.3239.132 Windows 7 x64 Edition Windows 7 x64 Edition回复

分享创造快乐

广告合作资源投稿