V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
daimaosix
V2EX  ›  NGINX

对 ACME 服务器进行反向代理一直不成功

  •  
  •   daimaosix · 2023-03-13 00:27:48 +08:00 · 1263 次点击
    这是一个创建于 404 天前的主题,其中的信息可能已经有所发展或是发生改变。
    ZeroSSL ACME 在大陆访问速度还算可以,但是 Google 的 ACME 被墙了,大陆访问不了,于是想着对常用的 ACME 服务器做一个 Nginx 反向代理,发现代理 ZeroSSL 和 Google 都不行,测试发现,都是卡在了 JWS url header 上面,因为使用 sub_filter 替换了域名,所以肯定是域名校验没通过,但是又不知道具体需要验证的请求头是啥,没办法把官方的 ACME 域名传过去,搜索了半天,ChatGPT 也问了,都不行,甚至连个案例也没....所以测试下来失败告终,有大佬研究过吗?从哪里入手呀。
    15 条回复    2023-09-05 21:25:02 +08:00
    j8sec
        1
    j8sec  
       2023-03-13 00:38:30 +08:00   ❤️ 1
    proxy_pass 没有用的;

    因为 ACME 协议中,ACME 客户端会对每个请求的 url 进行签名( `payload` 的 `signature` 的 factors 包含 `url`;);
    如果对请求 URL 进行反代,ACME 客户端会对签名 url 也保持反代后的 url ,但是 ACME 服务器(例如 `let's encrypt` 或者 `sectigo`(ZeroSSL 的 ACME 方案提供商) 对这个 URL 是不认可的,他们还按照你反代前的 URL 进行算签,结果 CA 算出来的签名和客户端签名不符,就报错了。
    daimaosix
        2
    daimaosix  
    OP
       2023-03-13 00:48:54 +08:00
    @j8sec 所以说这个没有办法解决嘛?
    j8sec
        3
    j8sec  
       2023-03-13 01:45:00 +08:00
    @daimaosix 对,除非自己当 CA 。或者...
    daimaosix
        4
    daimaosix  
    OP
       2023-03-13 01:50:34 +08:00 via Android
    @j8sec 好嘞老哥,还想着搞了开放给大家用呢,宣布凉凉
    AoEiuV020CN
        5
    AoEiuV020CN  
       2023-03-13 03:16:36 +08:00 via Android
    我是直接用 github 的 actions 自动申请了证书再发回国内服务器上的,
    不过我用的是 certbot ,验证用 dns 脚本设置 txt 记录验证,不使用网站所在服务器申请,
    loginv2
        6
    loginv2  
       2023-03-13 08:41:38 +08:00
    我也在境外的 vps 上使用 dns 验证申请完,再发回国内的机器上使用。
    yasi
        7
    yasi  
       2023-03-13 10:13:25 +08:00
    @j8sec 透明代理可以吗
    msg7086
        8
    msg7086  
       2023-03-13 10:15:10 +08:00
    为什么不用 DNS 认证呢。
    daimaosix
        9
    daimaosix  
    OP
       2023-03-13 11:21:02 +08:00
    @AoEiuV020CN
    @loginv2
    @msg7086
    我这边是有套管理系统,单域名用的 HTTP ,泛域名用的 DNS ,但是请求是从管理系统发出的,所以系统在国内,如果不能反向代理的话....那只能考虑把系统部署到 HK 了
    msg7086
        10
    msg7086  
       2023-03-14 02:11:10 +08:00
    那你这个需求就比较小众了。正常情况下 HTTP 认证有问题的场景,切到 DNS 认证就行了。我不知道你的系统是什么毛病,单域名只能做 HTTP 。不知道做成 SAN 域名(一单+一泛)能不能强制让它用 DNS ?
    daimaosix
        11
    daimaosix  
    OP
       2023-03-14 02:41:27 +08:00 via Android
    @msg7086 买的负载均衡器商业产品,有一个管理系统,可视化配置会分发给各个节点,管理系统功能可以签发和续订,然后把证书推到各个节点,单域名签发系统会自动给节点配置 HTTP-01 规则,这个可以签发,泛域名签发,这个系统有 DNS 功能,签发时也会自动配置 DNS-01 的验证,所以不是说无法验证,是管理系统访问 ACME 域的时候,因为做了反代,导致 ACME 域无法验证来源
    j8sec
        12
    j8sec  
       2023-03-14 18:42:14 +08:00
    @yasi 应用层的域名和 URL 未发生变更即可
    aru
        13
    aru  
       360 天前
    tcp 代理+ dns 劫持就好了吧
    caomingjun
        14
    caomingjun  
       288 天前
    @j8sec 如果不改变 URL ,用自签证书来进行反代,然后让系统信任自签证书可以吗?或者说,ACME 协议会有类似 SSL pinning 的操作吗?
    j8sec
        15
    j8sec  
       227 天前
    这个你可以试下。或者使用 Tunnel 来给 GTS 开启 VPN ,然后你 ACME 客户端机器加个 hosts
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1761 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:32 · PVG 00:32 · LAX 09:32 · JFK 12:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.