我让Traefik和一家领事KV商店合作。如何从领事的acme证书存储中删除记录,或仅强制续订一个域/前端?
问题:不知何故,其中一个前端域名保存时使用了错误的证书。它引用了来自不同域的证书(这也是Traefik中的前端)。
我能够通过获取traefik/acme/account/object密钥的consul值来检查acme json,解码并解压缩它,这是来自Certs数组的记录:
{
"Domains":{
"Main":"my.domain1.com",
"SANs":null
},
"Certificate":{
"Domain":"my.domain2.com",
"CertURL":"https://acme-v02.api.letsencrypt.org/acme/cert/idfordomain2",
"CertStableURL":"https://acme-v02.api.letsencrypt.org/acme/cert/idfordomain2",
"PrivateKey":"...",
"Certificate":"..."
}
}正如您所看到的,不知何故,my.domain2.com的证书已针对my.domain1.com的记录进行了保存,因此这会导致浏览器中出现一个无效证书警告。我想清空所有的记录,这样Traefik才能得到新的证书。我使用的是Consul,它是以二进制格式保存的,所以我不能只编辑json。
发布于 2020-03-17 05:23:31
下面是我是如何解决这个问题的:
您的traefik网络应标记为attachable: true
在主机上运行:
docker run -it --rm --name consul-client --network traefik_traefik consul sh然后在创建的容器中运行:
export CONSUL_HTTP_ADDR=consul:8500
# get value from consul and store it to acme.json
consul kv get traefik/acme/account/object | gzip -dc > acme.json
# remove invalid domain and store it to acme-fixed.json
cat acme.json | jq -r 'del (.DomainsCertificate.Certs[] | select(.Domains.Main=="'yourdomain.com'"))' > acme-fixed.json
# gzip it
cat acme-fixed.json | gzip -c > acme-fixed.json.gz
# upload fixed and gzipped json back to consul
consul kv put traefik/acme/account/object @acme-fixed.json.gz发布于 2019-04-12 15:02:24
最简单的方法是使用consul CLI实用程序。该实用程序还用于运行服务器,理想情况下,您应该使用与服务器相同的版本。确保导出环境变量:CONSUL_HTTP_ADDR - points to consul server,默认值为http://127.0.0.1:8500和CONSUL_HTTP_TOKEN - is ACL token,如果您在服务器上启用了ACL,则应该在生产环境中启用ACL。
然后,您只需运行以下命令
consul kv put traefik/acme/account/object @traefik.json其中trafik.json是您希望在Consul KV store中更改的具有更新值的json文件。
或者您可以使用HTTP API:Consul Create/Update Key
curl -X PUT --data @traefik.json http://<your-server-url>:<port>/v1/kv/traefik/acme/account/object如果您的服务器启用了ACL,则需要向curl请求添加以下标头,并向您发出<your-acl-token>:-H "X-Consul-Token: <your-acl-token>"
https://stackoverflow.com/questions/55645551
复制相似问题