文章目录
前言
关于HTTP与HTTPS:基于网络的普及和网速的提升,我们普通用户也可以搭建自己的HTTP服务并开放到公网中方便我们随时随地访问,如开源的智能家居系统
Home Assistant
、支持WebDAV
协议的网盘、网络摄像机
等。不过HTTP
协议是使用明文传输方式来传输信息的,当你访问只支持HTTP
协议的网站,在经过路由器、宽带接入商等中间环节时,搜索的关键字、账号密码等都是可见的,这些信息很容易被截获从而造成重要数据的泄露。这样就产生了由SSL
+HTTP
协议构建的可进行加密传输、身份认证的网络协议:HTTPS
协议。在HTTPS
协议下传输数据,客户端会将数据加密后发送到服务器,服务器解密后获得数据,反之亦然。在此过程中,数据通过密钥进行加密,这样即使中间环节劫持到内容也会因没有密钥无法破解。
下面就来为我们的Termux加上HTTPS
协议。
准备工作
- Termux环境及搭建好的HTTP服务(前面说过的filebrowser、kodbox等)
- Termxu有公网地址(ipv4, ipv6均可)及对其公网地址解析过的域名,详见:《Termux解析公网ip——从全世界各地连接你的Termux》
- ssl证书(各大云服务商每年都有免费领取额度,没有的不用担心,往下看第一小节)
一、申请ssl证书
说两种方法,自己看情况选择。
1. 国内云服务商免费申领
一些国内云服务商,每年都会有免费的DV单域名ssl证书能领取,像是阿里就是一个自然年20张免费证书,这里我就拿阿里云做例子了。
打开申领页面,点击ssl证书
->免费证书
->立即购买
,数量选择20
,可以看到配置费用为零,白给的东西,果断购买:
购买完就看见创建证书变成20了。点击创建证书
,就能看见下面新增了一个状态为待申请
的证书,之后点击证书申请
:
然后按下图填写申请:
点击下一步,等几秒页面会自动跳转,复制生成的记录值:
之后打开你的域名管理台,我这里就还是以我用的dynv6
为例了:
登录你的账号后依次点击:My Zones
-> 你的域名
->Add Recond
-> Type TXT
添加记录值:
Name
留空不填,Content
填写刚刚复制的记录值,之后点Save
保存,就能看到添加的记录值了:
返回阿里申请界面,因为证书解析是需要时间的,所以等待5~10分钟再点击验证,验证成功就可以点击提交审申请了:
申请成功后证书就会变成已签发状态了,最后点击下载,选择其他:
下载下来一个zip压缩包,里面两个文件,我们所需要的ssl证书到手了。
二、 安装caddy
1. 下载
准备工作做完就该轮到我们的主角了,下载页面:https://caddyserver.com/download
系统架构选择Linux arn64
, 加插件选一个mholt/caddy-webdav
用来测试就好,以后有需要其他插件可以使用caddy的内置命令来添加。
2.部署
在Termux的home目录下创建caddy工作目录,并将刚刚下载的文件拷贝进去:
mkdir ~/caddy &&mv /scard/download/caddy_linux_arm64_custom ~/caddy
更改执行文件名为caddy
:
cd ~/caddy &&mv caddy_linux_arm64_custom caddy
并赋予其执行权限:
chmod +x caddy
配置管理密码:
./caddy hash-password --plaintext 123456
拷贝生成的加密密码。
编写配置文件:
vim ~/caddy/Caddyfile
添加以下内容:
{
#指定http服务端口,大于1023,不然未root的手机无权限访问
http_port 8961
order webdav before file_server
}
# 使用一个WebDav服务测试,以开放5050端口为例,可以自行修改
:5050 {
# 设置/sdcard/download为可以被访问的目录,我设置的是手机的下载目录,可自行修改为想要访问的目录
root * /sdcard/download
encode gzip
# 生成123456(此处明文密码自己设置)的密码 caddy hash-password --plaintext 123456
# 下面的username为用户名(可自行更改),后面的长字符串为使用上面命令生成的加密密码
basicauth {
yibingyihan xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
}
# WebDAV访问相关
route {
rewrite /webdav /webdav/
webdav /webdav/* {
# 使用WebDAV访问路径的前缀
prefix /webdav
}
# 设置HTTP文件服务,可以在浏览器中查看下载文件
file_server browse
}
}
保存文件。
3. 运行测试
~/caddy/caddy run #前台运行,测试时使用
~/caddy/caddy start #后台运行,实际运行环境使用
浏览器访问:http://域名:5050
运行成功,也看到了因为没有ssl认证显示不安全连接,接下来就解决这个问题。首先ctrl
+C
退出运行。
三、添加https服务
将刚刚下载的证书解压到~/caddy/ssl
中:
unzip -n /sdcard/download/8709731_yibyih.dynv6.net_other.zip -d ~/caddy/ssl
为了后续方便使用,给解压出的证书文件改个短一些的名,只要不动后缀,名字随意更改:
mv 8709731_yibyih.dynv6.net.key private.key &&mv 8709731_yibyih.dynv6.net.pem chain.pem
1. 对于原生在caddy搭建的服务
对于原生搭建在caddy上的服务,我们可以直接在配置中指定ssl证书路径即可,比如刚刚的Webdav
服务, 稍稍修改配置文件加上ssl证书路径即可:
vim ~/caddy/Caddyfile
{
http_port 8961
order webdav before file_server
}
# 使用一个WebDav服务测试,以开放5050端口为例,可以自行修改
:5050 {
# 设置/sdcard/download为可以被访问的目录,我设置的是手机的下载目录,可自行修改为想要访问的目录
root * /sdcard/download
encode gzip
# 生成123456(此处明文密码自己设置)的密码 caddy hash-password --plaintext 123456
# 下面的username为用户名(可自行更改),后面的长字符串为使用上面命令生成的加密密码
basicauth {
yibingyihan xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
}
#此处指定证书文件,一定要使用的绝对路径
tls /data/data/com.termux/files/home/caddy/ssl/chain.pem /data/data/com.termux/files/home/caddy/ssl/private.key
# WebDAV访问相关
route {
rewrite /webdav /webdav/
webdav /webdav/* {
# 使用WebDAV访问路径的前缀
prefix /webdav
}
# 设置HTTP文件服务,可以在浏览器中查看下载文件
file_server browse
}
}
保存配置文件,开启caddy服务:
cd ~/caddy &&./caddy run
使用浏览器访问测试: https://域名:5050
可以看到此时已经显示为安全站点了,ssl证书安装成功。
2. 对于其他程序搭建的http服务
而对于其他程序搭建的http服务,可以采用反代理的形式实现前置跳转https,这里以nginx的默认网站为例,nginx
搭建完, 访问默认的首页是这个样子的:http://域名:8080
可以看到显示不安全站点,接下来我们使用caddy接管8080端口并前置加上ssl证书:
vim ~/caddy/Caddyfile
添加以下内容:
#使用8443来接管8080,8443可随意指定
https://你的域名:8443 {
encode gzip
tls /data/data/com.termux/files/home/caddy/ssl/chain.pem /data/data/com.termux/files/home/caddy/ssl/private.key
reverse_proxy 你的域名:8080 {
header_up Host 你的域名:8080
header_down Access-Control-Allow-Origin *
header_down Access-Control-Allow-Methods *
header_down Access-Control-Allow-Headers *
}
}
保存配置,还是开启caddy服务,浏览器访问:https://域名:8443
安全,代理成功。
同理可代理其他http服务,比如前面说的filerowser
:《Termux网络文件管理器——filebrowser》
#使用18651来接管18650,18651可随意指定
https://你的域名:18650 {
encode gzip
tls /data/data/com.termux/files/home/caddy/ssl/chain.pem /data/data/com.termux/files/home/caddy/ssl/private.key
#我的filebrowser端口为18650
reverse_proxy 你的域名:18650 {
header_up Host 你的域名:18650
header_down Access-Control-Allow-Origin *
header_down Access-Control-Allow-Methods *
header_down Access-Control-Allow-Headers *
}
}
访问:https://域名:18651
4. 开机自启动
开机自启动的事我们还是交给专业的去做——termux-services
,我就简单的把设置命令都写在这了,有兴趣了解用法的请看这里:《Termux设置服务自启动》
创建自启动服务目录:
pkg install termux-services &&mkdir -p $PREFIX/var/service/caddy_ato/log
配置自启动脚本:
vim $PREFIX/var/service/caddy_ato/run
复制下面的内容进去:
#!/data/data/com.termux/files/usr/bin/sh
exec 2>&1
exec ~/caddy/caddy run >dev/null 2>&1
配置服务日志脚本:
vim $PREFIX/var/service/caddy_ato/log/run
复制下面的内容进去:
#!/data/data/com.termux/files/usr/bin/sh
svlogger="/data/data/com.termux/files/usr/share/termux-services/svlogger"
exec "${svlogger}" "$@"
赋予脚本执行权限:
chmod +x $PREFIX/var/service/caddy_ato/log/run $PREFIX/var/service/caddy_ato/run
将caddy配置文件链接到自启动目录:
ln -s ~/caddy/Caddyfile $PREFIX/var/service/caddy_ato/Caddyfile
相关命令:
sv-enable caddy_ato #开启自启动
sv-disable caddy_ato #取消自启动
sv stop caddy_ato #停止caddy进程,同时本次运行期间不再自动重启
sv start caddy_ato #开启caddy进程
caddy
的发现让我这几天一直烦恼的事情——Termux挂载移动硬盘有了解决办法,至于如何解决的,我们下篇文章见!有兴趣看官的赏个订阅再走呗!
快速导航 | |||
👈Termux解析公网ipv6——从全世界各地连接你的Termux | Termux云盘计划——Webdav移动硬盘挂载👉 |