# https-proxy **Repository Path**: fensnote/https-proxy ## Basic Information - **Project Name**: https-proxy - **Description**: https的代理,对原有的http服务实现https功能 - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-07 - **Last Updated**: 2026-09-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # boa-https-proxy 为嵌入式设备上仅支持 HTTP 的 boa Web 服务提供 HTTPS 访问的 **TLS 终结反向代理**,纯 Go 标准库实现,无任何第三方依赖,可直接交叉编译到嵌入式 Linux。 ## 工作原理 ``` 浏览器/客户端 ──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 监听地址,如 `:443`、`0.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 的测试页面(可删除) ```