Traefik在完成tls-alpn-01挑战后使用了证书链

时间:2019-05-30 21:17:24

标签: docker certificate lets-encrypt traefik hsts

我决定从jwilder / nginx-proxy切换到traefik,因为我想基于URI-path路由到容器,而jwilder / nginx-proxy不可能,但是应该与traefik兼容。

要做到这一点,我首先要转换已经使用let-encrypt的当前设置(在路由到一个容器的单个域上)。

我的问题是:如何获得traefik给我正确的由let-encrypt签名的证书,而不是自签名的东西?

所以我在使用acme设置的docker容器中有traefik。 我首先尝试使用HTTP-01挑战没有成功,但后来还是决定使用TLS-ALPN-01。

在容器启动后(等待一会儿),日志最终读取(敏感信息替换为Xs):

time="2019-05-30T20:01:25Z" level=info msg="legolog: [INFO] acme: Registering account for XXXXXXXX@XXXXXXXX.XXXXXXXX"
time="2019-05-30T20:01:25Z" level=info msg="legolog: [INFO] [XXXXXXXX.ddns.net] acme: Obtaining bundled SAN certificate"
time="2019-05-30T20:01:26Z" level=info msg="legolog: [INFO] [XXXXXXXX.ddns.net] AuthURL: https://acme-staging-v02.api.letsencrypt.org/acme/authz/XXXXXXXX"
time="2019-05-30T20:01:26Z" level=info msg="legolog: [INFO] [XXXXXXXX.ddns.net] acme: use tls-alpn-01 solver"
time="2019-05-30T20:01:26Z" level=info msg="legolog: [INFO] [XXXXXXXX.ddns.net] acme: Trying to solve TLS-ALPN-01"
time="2019-05-30T20:01:33Z" level=info msg="legolog: [INFO] [XXXXXXXX.ddns.net] The server validated our request"
time="2019-05-30T20:01:33Z" level=info msg="legolog: [INFO] [XXXXXXXX.ddns.net] acme: Validations succeeded; requesting certificates"
time="2019-05-30T20:02:17Z" level=info msg="legolog: [INFO] [XXXXXXXX.ddns.net] Server responded with a certificate."

导航到“ AuthURL时,它将读取(敏感信息再次替换为Xs):

{
"identifier": {
"type": "dns",
"value": "XXXXXXXX.ddns.net"
},
"status": "valid",
"expires": "2019-06-29T20:01:29Z",
"challenges": [
{
"type": "dns-01",
"status": "pending",
"url": "https://acme-staging-v02.api.letsencrypt.org/acme/challenge/XXXXXXXX/XXXXXXXX",
"token": "XXXXXXXX"
},
{
"type": "http-01",
"status": "pending",
"url": "https://acme-staging-v02.api.letsencrypt.org/acme/challenge/XXXXXXXX/XXXXXXXX",
"token": "XXXXXXXX"
},
{
"type": "tls-alpn-01",
"status": "valid",
"url": "https://acme-staging-v02.api.letsencrypt.org/acme/challenge/XXXXXXXX/XXXXXXXX",
"token": "XXXXXXXX",
"validationRecord": [
{
  "hostname": "XXXXXXXX.ddns.net",
  "port": "443",
  "addressesResolved": [
  "XXXXXXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX"
  ],
  "addressUsed": "XXXXXXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX"
}
]
}
]
}

所以我必须错误地假设一切都很好。

导航到traefik前端时,为Firefox颁发的证书显示了没有链的证书(如我想的自签名),该证书自然被拒绝(HTTP严格传输安全性(HSTS),SEC_ERROR_UNKNOWN_ISSUER)。

证书的域显示正确的域,我为前端指定了traefik,但是颁发者读取的“ Fake LE Intermediate X1”看起来不像让加密的东西。 保存的acme.json(是使用文件存储配置的traefik)具有一个证书条目(base64),在解码时会显示两个证书。

我使用https://www.sslshopper.com/certificate-decoder.html发现,第一个与我的浏览器拒绝使用的证书相同,第二个也具有“ Fake LE Intermediate X1”。两者看起来都不像您尝试通过IP(而非URL /域)到达服务器时获得的“ TRAEFIK DEFAULT CERT”,但这似乎无关紧要。

我仍然拥有以前设置中的证书/密钥,发行者在其中读取“ Let's Encrypt Authority X3,让我们对Let's Encrypt进行写审查”。我当然可以将它们粘贴到acme.json中,知道那是否可以工作。但是不久以后证书将过期,我认为我将面临与现在相同的问题。

我的traefik.toml如下:

logLevel = "INFO"
defaultEntryPoints = ["http", "https"]


################################################################
# API and dashboard configuration
################################################################
[api]
################################################################
# Docker configuration backend
dashboard = true
################################################################

#[web]
#address = ":8080"
#  [web.auth.basic]
#    users = ["admin:traefikW0rd"]

[docker]
domain = "XXXXXXXX.ddns.net"
watch = true
endpoint = "unix:///var/run/docker.sock"
exposedByDefault = false

[entryPoints]
  [entryPoints.http]
    address = ":80"
    [entryPoints.http.redirect]
      entryPoint = "https"
  [entryPoints.https]
    address = ":443"
      [entryPoints.https.tls]

[acme]
email = "XXXXXXXX@XXXXXXXX.XXXXXXXX"
storage = "/etc/traefik/ACME/acme.json"
keyType = "RSA4096"
caServer = "https://acme-staging-v02.api.letsencrypt.org/directory"
acmeLogging = true
entryPoint = "https"
#OnHostRule = true
  [acme.tlsChallenge]
  entryPoint = "https"

[[acme.domains]]
  main = "XXXXXXXX.ddns.net"

1 个答案:

答案 0 :(得分:0)

我从traefik.toml获得的样本指向登台目录https://acme-staging-v02.api.letsencrypt.org/directory

在其他应用程序中也称为“空运行”。

我通过谷歌搜索“ Fake LE Intermediate X1”发现了这一点。

将变量更改为https://acme-v02.api.letsencrypt.org/directory并擦除acme.json后,我得到了可用的证书。 \ O /

相关问题