Caddy自动签发任意域名证书

公司用到了Amazon Elastic Container Service,完全托管的容器服务

公司的SAAS平台,本来多租户的证书管理模式预计是这样的:

给每个租户单独设立一个 xyz.alibaba.com 的子域名,然后用cert-manager管理证书,只要annouce一个 xyz.alibaba.com 的ingress出来,就会自动签发证书。

然而研发觉得这样也是很不爽,连annouce ingress也不愿意,就想客户的域名直接解析一个 xyz.客户.com 的 cname 过来,然后就自动签发证书。

这个需求真的是很有意思,也只有caddy能很轻松的这么实现,方法如下:

一、做好一个caddy的deploy和service,前面直接顶一个Loadbalance

二、配置caddy的配置

/etc/caddy/Caddyfile 的内容

 1{
 2    debug
 3    on_demand_tls {
 4        ask http://localhost:5555/
 5    }
 6}
 7
 8https:// {
 9    tls {
10        on_demand
11    }
12    handle {
13        reverse_proxy https://alibaba.com {
14            header_up Host alibaba.com
15        }
16    }
17
18    respond "Welcome to dynamic certificate signing!" 200
19
20}
21
22http://localhost:5555 {
23        respond 200
24}

注意上面,Caddy对这种随便的域名,是要求去问一下后端的服务是否对这个域名进行签发的,这是为了防止滥用。

我们直接做个虚拟服务,回应200即可

这样的做法比较直接了当,当然只适用于国外,国内就麻烦了,未知的域名解析到你的ip上,没备案直接就会被封站。


AWS的ECS使用Fargate服务器如何开启shell进入容器调试
comments powered by Disqus