35 条回复  ·  3759 次点击
jianglibo 楼主 初学 5 天前
@caola 我尝试了一下: 域名: _acme-challenge.www.cao.la 验证值: oX2rQVj7mBB4dXND2MglxPlGNSLlyucOsN7JlPPMpj0 说明只支持 CNAME 验证,无法申请 IP 证书, 如何自动更新也是个问题,除非有 agent 。有 agent 的话,就可以在验证开始时自动 spin up 一个监听器,结束后解除监听。可以完成所有的自动化过程,比如将证书合并,haproxy 需要将 pem 和 key 合并到一个文件。
jinliming2 小成 5 天前
DNS-01 是设置 DNS 记录来证明域名所有权。 HTTP-01 是在特定的 URL path 下返回指定的内容来证明域名所有权。 TLS-ALPN-01 是通过 TLS 握手的时候,在 ALPN 里携带 acme-tls/1 (区别于一般的请求携带的可能只有 h2 和 http/1.1 ),并且携带 SNI 表示具体域名,然后服务端拿到 Client Hello 后需要临时构造一个自签名证书来响应,证书报告特定的扩展字段(具体查文档吧,不记得了),以此来证明域名的所有权。 HTTP 只需要特定路径返回,TLS 可以在 Client Hello 阶段分流(类似于一个网站针对不同域名使用不同证书),所以都是可以基于现有的服务来扩展实现的,复用端口。 Let’s Encrypt 最新支持的 IP 地址证书也只支持 HTTP-01 和 TLS-ALPN-01
jinliming2 小成 5 天前
@jinliming2 HTTP 只需要特定路径返回,TLS 可以在 Client Hello 阶段分流(类似于一个网站针对不同域名使用不同证书),所以都是可以基于现有的服务来扩展实现的,复用端口,不停机实现证书更新的。但具体需不需要停机取决于对应软件实现。
jianglibo 楼主 初学 5 天前
@jinliming2 理解完全正确,再想象一下有一个 agent 运行在服务器上,通过 websocket 和签发服务 connect 。服务中兴发现证书过期时间临近,发起新的证书申请,在告诉 acme ( let's encrypt )验证方式之前,先通过 websocket 指挥 agent 启动监听。是不是完全的自动化?
caola 小成 5 天前
@jianglibo #20 IP 证书是你的 ACME 客户端支不支传入 profile: shortlived 参数的问题,验证 IP 证书其实和域名是一样的。 你用 nginx 之类可能要安装第三方模块,或者自己写一个 nginx lua 的模块来实现这个验证过程。 我现在是把 ACME 验证值放到 redis 中,在 TLS 握手的时候去查询 redis 的值来完成验证。
wintersun 小成 5 天前
@jianglibo 一个疑问,逻辑清晰,协议、规则可控,长期来看不存在太大的变动,为什么还要用大模型 Agent ?用扩展性较好的程序实现,成本应该更低,甚至于,稳定性更高
jianglibo 楼主 初学 5 天前
@wintersun 误会,此 Agent 是指一个运行在服务器端的小程序,好多运维系统都需要安装一个 agent 。我的 agent 是一个 c++实现,开源[cert-ctrl]( https://github.com/coderealm-atlas/cert-ctrl). 和大模型无关。
diudiuu 初学 5 天前
https://github.com/adiudiuu/tools/tree/main/go_acme 这个是我一个项目里面抽出来的用 go 改写的,根据真实业务来申请证书的。希望能帮到你,类似就是用户自己托管域名,只需要把域名解析到我服务器 ip 上,后面的证书都是我这边服务器去申请。
jianglibo 楼主 初学 5 天前
@caola 如果我自己用 acme 还要用你的 cao.la 做什么?我是指你的站点提供的服务看起来好像很难自动化这个过程(没有任何技术层面的评判),仅仅指功能的实现。
jianglibo 楼主 初学 5 天前
@diudiuu 非常感谢。有机会学习一下,我们是用 c++实现的。这是客户端的实现: https://github.com/coderealm-atlas/cert-ctrl
返回顶部