• 正文
  • 相关推荐
申请入驻 产业图谱

boa-https代理工具

09/08 08:25
280
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

boa-https-proxy

由于场景需要,需要用到https,作为嵌入式主机里的简单内置web,原来用的服务是boa,比较简单,也不支持https,后来找lighttpd移植测试,移植过程的艰辛不必多说了,也是好多坑,最崩溃的是移植完以后http是可以用, https访问就会挂掉……
后来换个思路,做个代理算了,也有开源的类似工具,但是功能比较多,编译出来也比较大,最后还是让AI写了一个基于go语言的https代理。
为嵌入式设备上仅支持 HTTP 的 boa Web 服务提供 HTTPS 访问的 TLS 终结反向代理,纯 Go 标准库实现,无任何第三方依赖,可直接交叉编译到嵌入式 Linux

源码

https://gitee.com/fensnote/https-proxy

工作原理

浏览器/客户端 ──HTTPS(443)──> boa-https-proxy ──HTTP(80)──> boa Web 服务

代理监听 HTTPS 端口,完成 TLS 握手解密后,把请求以明文 HTTP 转发给本机(或局域网内)的 boa 服务,再将响应原样返回。boa 本身不需要任何改动,也感知不到 HTTPS 的存在。

快速开始

1. 编译

本机(Windows):

go build -o boa-https-proxy.exe .

交叉编译到嵌入式设备(在 Windows/Linux 开发机上执行):

# ARMv7(常见于 Cortex-A 嵌入式板子)

GOOS=linux GOARCH=arm GOARM=7 go build -trimpath -ldflags "-s -w" -o boa-https-proxy-armv7 .

# ARM64 / aarch64

GOOS=linux GOARCH=arm64 go build -trimpath -ldflags "-s -w" -o boa-https-proxy-arm64 .

# MIPS(老式路由器/网关常用)

GOOS=linux GOARCH=mips GOMIPS=softfloat go build -trimpath -ldflags "-s -w" -o boa-https-proxy-mips .

# x86_64

GOOS=linux GOARCH=amd64 go build -trimpath -ldflags "-s -w" -o boa-https-proxy-amd64 .

设备架构不确定时,登录设备执行

uname -m

确认(

armv7l

选 arm/7,

aarch64

选 arm64,

mips

选 mips)。

2. 部署到设备

把可执行文件拷到设备(如 /usr/sbin/ 或 /opt/),确保有执行权限:

chmod +x boa-https-proxy-armv7

3. 启动

最简单的启动方式(自动生成自签名证书,10 年有效):

# 假设 boa 在本机 80 端口

./boa-https-proxy-armv7 -selfsigned

# boa 不在本机 / 想换端口 / 把 HTTP 80 也接管做跳转

./boa-https-proxy-armv7 -listen :443 -target http://192.168.1.50:80 -selfsigned -redirect :80

启动后访问 https://设备IP/ 即可。

4. 开机自启(可选)

设备是 busybox 系(boa 的典型环境)时,在 /etc/init.d/S99httpsproxy 写:

#!/bin/sh

case "$1" in

  start)

    /opt/boa-https-proxy-armv7 -selfsigned >/dev/null 2>&1 &

    ;;

  stop)

    killall boa-https-proxy-armv7

    ;;

esac

命令行参数

参数 默认值 说明
-listen :443 HTTPS 监听地址,如 :4430.0.0.0:8443
-target http://127.0.0.1:80 后端 boa 服务地址,可指向局域网内其它主机
-cert / -key server.crt / server.key TLS 证书与私钥文件路径
-selfsigned false 证书文件不存在时自动生成自签名证书(10 年有效)
-cert-hosts localhost,127.0.0.1 自签名证书包含的主机名 / IP(逗号分隔),部署时建议填入设备 IP 或域名,如 -cert-hosts 192.168.1.50,mydevice.local
-host 强制转发给 boa 的 Host 头;留空则透传客户端原始 Host
-redirect 额外监听一个 HTTP 地址(如 :80),把访问 301 跳转到 HTTPS
-v false 详细访问日志(含 Host 与 UA)
-version false 打印版本号

验证

# 忽略自签证书告警访问

curl -k https://设备IP/

# 查看 301 跳转

curl -sI http://设备IP/ | grep -i location

浏览器访问自签名证书页面会提示 "不安全",点 "继续访问" 即可;若不想看到告警,见下文。

常见问题

1. 浏览器提示证书不受信任?

自签名证书必然告警。生产 / 长时间使用建议:

• 用设备实际 IP / 域名配合 -cert-hosts 重新生成证书,并在客户端电脑上把 server.crt 导入 "受信任的根证书颁发机构";

• 或购买 / 申请泛域名证书(如 Let's Encrypt),用 -cert-key 指定。

2. boa 页面里的绝对路径跳转带了 https 端口?

boa 是 HTTP 服务,生成的绝对 URL 只会带自己的端口,与 HTTPS 无关。代理默认透传客户端 Host。若 boa 根据 Host 头生成重定向,可用 -host 强制指定(如 -host 设备IP)。

3. 代理能转发 WebSocket / 长连接吗?

能。底层 httputil.ReverseProxy 支持 HTTP/1.1 keep-alive 与 WebSocket 升级,代理层已透传 Flush/Hijack。

4. 内存占用?

极小。默认 idle 连接池上限 64,嵌入式设备上运行无压力;静态编译的单文件二进制约 5MB。

目录结构

boa-https-proxy/

├── main.go              # 全部源码(单文件)

├── go.mod

├── boa-https-proxy.exe  # Windows 本机编译产物

├── boa-https-proxy-armv7# Linux/ARMv7 交叉编译产物

├── server.crt/server.key# 测试生成的证书(可删除,-selfsigned 会重建)

└── test_www/            # 本地模拟 boa 的测试页面(可删除)

 

相关推荐

专注嵌入式Linux应用开发,C/C++技术交流;Qt编程技术交流。