You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Nim语言Jester REST API动态提供acme-challenge文件?

用Nim Jester动态提供ACME挑战文件解决Certbot验证失败问题

你的代码在浏览器正常但Certbot验证不通过,核心是当前逻辑存在几个不符合ACME验证要求的问题,直接修正即可:

问题分析

  1. 冗余的文件操作:没必要先把挑战字符串写入磁盘再读取发送,这步不仅多余,还可能因进程权限不足导致文件生成失败——浏览器可能因缓存显示正常,但Certbot验证时会拿不到正确内容。
  2. 响应格式不匹配:Certbot的HTTP-01验证要求响应的Content-Type必须是text/plain,直接用sendFile可能会附带错误的Content-Type头,导致验证失败。

修正后的代码

get "/.well-known/acme-challenge/@challenge":
  resp @"challenge", "text/plain"

代码说明

  • 直接用resp返回挑战字符串,同时指定text/plain的Content-Type,完全符合ACME验证的格式要求。
  • 去掉了文件读写操作,避免权限、IO异常等问题,同时提升响应效率。

额外排查步骤

  • 用curl模拟Certbot请求,验证响应是否正确:
    curl -v http://你的域名/.well-known/acme-challenge/测试用的挑战字符串
    
    检查返回的内容是否与挑战字符串完全一致,且Content-Type为text/plain。
  • 确保Jester服务监听80端口(ACME HTTP-01验证强制要求),或已配置端口转发将80端口流量导向Jester的监听端口。
  • 检查服务器防火墙/安全组是否开放80端口,保证Certbot的验证请求能正常到达Jester服务。

内容的提问来源于stack exchange,提问作者Muhit Raihan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 06:42:08