内网 nginx 做反代,自签 CA 和域名证书,在 win 上装自签 CA 没问题,但手机没办法装,完全解决不了。
现在想的就是用一个 http/socks 代理,将流量转成 http 协议,来访问 nginx 。
所以有没有这种东西呢?
现在想的就是用一个 http/socks 代理,将流量转成 http 协议,来访问 nginx 。
所以有没有这种东西呢?
|
xfewpiApr 29, 2025
1
|
|
w88975Apr 29, 2025
2
https 自签 转 http, 用 nginx 反代一个 http 协议的就行
你手机上访问你的自签域名, 本质还是走的 https 协议, 你加个代理, 无非就是 MIT 绕过证书校验, 还是得走 https 啊 没懂你的场景是什么 |
|
009694Apr 29, 2025 via iPhone
3
你反代的网站访问不了是因为浏览器不认你的证书。 根 http socks 代理无任何关系。 你不解决证书信任或者把 https 反代成 http 套几层 socks 都没用
|
|
5
@w88975
最理想的:我手机→nginx 反代→目标网站,解决。 因手机实在没办法装自签 CA 证书(反正网上找得到的办法我都试过了)。 但现在:我手机→ http/socks 代理转 http 协议→nginx 反代→目标网站。 |
|
6
@009694
我目标就是 http/socks 代理转 http 协议,不是 https ,nginx 的 http 反代 https 早测试过了,没问题。 |
|
derdctApr 29, 2025 via Android
7
手机为什么不能装,我现在就装的是啊?(
可能你指的是 android 后面版本部分应用不信任用户态的 CA ,只信任 System CA? |
|
8
为什么不换个思路,在内网用公网域名+公网证书?
|
|
yinminApr 29, 2025 via iPhone
9
stunnel 可以将 https 转成 http
|
|
yuchenrApr 29, 2025
10
用 clash 就好了啊
|
|
11
不理解 , 反代了 http 加不加 s 不是 nginx 配置的事情吗
|
|
lifei6671Apr 29, 2025
12
|
|
BenjaminSuApr 29, 2025
13
v2ray 的 routing 功能,可以进行各种协议的桥接。
|
|
opengpsApr 29, 2025
14
https 是短链接,socks 是长连接,这个结构导致了你要的长连接转为短链接 ,已经不可能实现
|
|
0x5c0fApr 29, 2025
15
proxychain 或者 tun2socks ?
|
|
BreadKillerApr 29, 2025
16
我也不太懂
手机->nginx 如果只是内网访问,不配置证书不就完事了?现在配了自签证书又想转 http 不就多此一举了? |
|
JudoonApr 29, 2025
17
@BreadKiller 我觉得有一种可能是此 nginx 不是他能控制的。否则就和你说的一样,多此一举。
另外 @楼主,如果如我上面猜测的话,你再起一个你的 nginx 监听 http 端口, proxy_pass https://<old_nginx> 然后 ignore 证书就行了。 如果这都不满足,我觉得是你没有把原始需求说明白,又或者是个 YX 问题 |
|
busierApr 29, 2025 via iPhone
18
你需要的是 socat
|
|
rkonfjApr 29, 2025 via iPhone
19
可以的,但是需要自定义代理服务器。似乎没有现成的正向代理服务器支持这种。
|
|
busierApr 29, 2025 via iPhone
20
socat TCP4-LISTEN:<本地端口>,reuseaddr,fork PROXY:<代理服务器 IP>:<远程地址>:<远程端口>,proxyport=<代理服务器端口>
适用于 http proxy 这样访问<本地端口>,效果就是穿过 http 代理的<远程端口> |
|
rkonfjApr 29, 2025
21
@rkonfj #19 这是一个用 Go 实现的简单代 http 理服务器,把所有 http 请求都代理到 backend (可以设置你自签 CA 的 https 服务器)
``` package main import ( "crypto/tls" "crypto/x509" "flag" "net/http" "net/http/httputil" "net/url" "os" ) var ( backend string caPath string ) func main() { flag.StringVar(&backend, "backend", "", "server URL") flag.StringVar(&caPath, "ca", "", "ca certificate path") flag.Parse() backendURL, _ := url.Parse(backend) caCertPool, _ := x509.SystemCertPool() if caPath != "" { caCert, err := os.ReadFile(caPath) if err != nil { panic(err) } if ok := caCertPool.AppendCertsFromPEM(caCert); !ok { panic("append CA failed") } } rp := httputil.NewSingleHostReverseProxy(backendURL) rp.Transport = &http.Transport{ TLSClientConfig: &tls.Config{ RootCAs: caCertPool, ServerName: backendURL.Hostname(), }, } http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { r.Header.Del("Proxy-Connection") r.Host = backendURL.Host rp.ServeHTTP(w, r) }) http.ListenAndServe(":3080", nil) } ``` |
|
chaodadaApr 29, 2025
22
gost
|
|
24
这个问题搞来搞去就回到像 3 楼说的证书问题,这关过不了。
我自签 CA ,再用 CA 签域名。 在 WIN 和 DEBIAN 上装自签 CA 都没问题。就安卓不行。 一台安卓 10 MIUI11 ,有 ROOT ,用面具刷证书模块,但没见到系统证书里出现。 一台安卓 13 MIUI14 ,没 ROOT ,装自签 CA 生成的 pfx ,揭示“无法将此文件用作 CA 证书”。 自签 CA 分别用 openssl 和 xca 生成,都试过,结果一样。 |
|
psllllApr 29, 2025
26
如果是在局域网下,可以用 hosts 功能,先拿到 ssl 证书,hosts 让域名指向 nginx 服务器上,填 ssl 证书路径,这样你用域名访问就有 https 了,而且默认信任域名证书不需要自签
|
|
samIIsunApr 29, 2025
27
@ztjal 看到你提到的证书格式 pfx ,是否由于安卓对证书格式的要求导致的导入失败。
“在 Android 设备安装 CA 的步骤: 1. 保证根 CA 是 PEM 或 DER 的文件格式,并且扩展名为 .crt 。如果需要,进行转换。” 引用自: https://support.hcl-software.com/csm?id=kb_article&sysparm_article=KB0098688 |
|
youggApr 29, 2025
28
不是自己购买的域名吗?, 是的话 LetsEncrypt 签证书很容易吧.
|
|
mohumohuApr 30, 2025
34
这不就用 sniproxy 就好了,搞这么复杂
|
|
szdosarApr 30, 2025
36
简单讲,你希望外网访问内网 web 服务?假设你的服务器是 linux 且按照了 cloudflared ,web 服务端口是 8080
''' sudo cloudflared tunnel --url http://localhost:8080 --edge-ip-version auto --no-autoupdate --protocol http2 > ~/argo.log 2>&1 & ps aux | grep cloudflared | grep tunnel | grep 8080 cat ~/argo.log 2>/dev/null | grep -a trycloudflare.com | awk 'NR==2{print}' | awk -F// '{print $2}' | awk '{print $1}' ''' |
|
yc8332Apr 30, 2025
37
nginx 那边不要 https 不就好了。
|