Traefik использует сертификат без цепочки после выполнения задачи tls-alpn-01

Я решил переключиться с jwilder / nginx-proxy на traefik, поскольку я хочу маршрутизировать контейнеры на основе URI-пути, что невозможно с jwilder / nginx-proxy, но должно быть с traefik.

Для этого я сначала хотел преобразовать мою текущую настройку (в одном домене, перенаправленном в один контейнер), в которой уже использовалось let-encrypt.

Мой вопрос: как заставить traefik выдать мне правильный сертификат, подписанный Let-encrypt, вместо самоподписанного?

Итак, у меня есть traefik в контейнере докеров, настроенном с помощью acme. Сначала я безуспешно пытался использовать HTTP-01-challenge, но потом все равно решил использовать TLS-ALPN-01.

После запуска контейнера (и некоторого ожидания) журнал, наконец, читается (конфиденциальная информация заменяется знаком X):

time="2019-05-30T20:01:25Z" level=info msg="legolog: [INFO] acme: Registering account for [email protected]"
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 он читает (конфиденциальная информация снова заменяется знаком X):

{
"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-frontend сертификат был выпущен для firefox, чтобы показать сертификат без цепочки (например, самоподписанный, я полагаю), который, естественно, отклоняется (HTTP Strict Transport Security (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». Оба НЕ похожи на «СЕРТИФИКАТ ПО УМОЛЧАНИЮ TRAEFIK», который вы получаете, когда пытаетесь получить доступ к серверу через IP (не URL / домен), но это кажется несущественным.

У меня все еще есть сертификаты / ключи из моей предыдущей настройки, где эмитент читает «Let's Encrypt Authority X3, Let's Encrypt Написать обзор 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 = "[email protected]"
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"

person rominator007    schedule 30.05.2019    source источник


Ответы (1)


Образцы, которые я получил для своего traefik.toml, указывали на промежуточный каталог https://acme-staging-v02.api.letsencrypt.org/directory

В других приложениях это также называется «пробным запуском».

Я нашел это в Google по запросу "Fake LE Intermediate X1".

После изменения переменной на https://acme-v02.api.letsencrypt.org/directory и протерев acme.json, я получил пригодные для использования сертификаты. \ O /

person rominator007    schedule 30.05.2019