首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在保存到consul KV时从Traefik acme存储中删除证书

如何在保存到consul KV时从Traefik acme存储中删除证书
EN

Stack Overflow用户
提问于 2019-04-12 14:16:29
回答 2查看 2.2K关注 0票数 2

我让Traefik和一家领事KV商店合作。如何从领事的acme证书存储中删除记录,或仅强制续订一个域/前端?

问题:不知何故,其中一个前端域名保存时使用了错误的证书。它引用了来自不同域的证书(这也是Traefik中的前端)。

我能够通过获取traefik/acme/account/object密钥的consul值来检查acme json,解码并解压缩它,这是来自Certs数组的记录:

代码语言:javascript
复制
{
    "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。

EN

回答 2

Stack Overflow用户

发布于 2020-03-17 05:23:31

下面是我是如何解决这个问题的:

您的traefik网络应标记为attachable: true

在主机上运行:

代码语言:javascript
复制
docker run -it --rm --name consul-client --network traefik_traefik consul sh

然后在创建的容器中运行:

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2019-04-12 15:02:24

最简单的方法是使用consul CLI实用程序。该实用程序还用于运行服务器,理想情况下,您应该使用与服务器相同的版本。确保导出环境变量:CONSUL_HTTP_ADDR - points to consul server,默认值为http://127.0.0.1:8500CONSUL_HTTP_TOKEN - is ACL token,如果您在服务器上启用了ACL,则应该在生产环境中启用ACL。

然后,您只需运行以下命令

代码语言:javascript
复制
consul kv put traefik/acme/account/object @traefik.json

其中trafik.json是您希望在Consul KV store中更改的具有更新值的json文件。

或者您可以使用HTTP API:Consul Create/Update Key

代码语言:javascript
复制
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>"

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55645551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档