Traefik использует сертификат без цепочки после выполнения задания tls-alpn-01 - PullRequest
0 голосов
/ 31 мая 2019

Я решил переключиться с 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 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» он читает (конфиденциальная информация снова заменяется на 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 сертификат был выдан для firefox, показывая сертификат без цепочки (как я полагаю, самоподписанный), который естественным образом отклоняется (HTTP Strict Transport Security (HSTS), SEC_ERROR_UNKNOWN_ISSUER).

Домен сертификата показывает правильный домен, который я дал traefik для внешнего интерфейса, но издатель читает «Fake LE Intermediate X1», который не похож на некоторые вещи, позволяющие зашифровать. Сохраненный файл acme.json (yes traefik настроен с хранилищем файлов) имеет запись сертификата (base64), которая при декодировании открывает два сертификата.

Использование https://www.sslshopper.com/certificate-decoder.html Я обнаружил, что первый - это тот же сертификат, который отвергают мои браузеры, а второй - также "Fake LE Intermediate X1". Оба не выглядят как «TRAEFIK DEFAULT CERT», который вы получаете, когда пытаетесь получить доступ к серверу через IP (не URL / домен), но это не имеет значения.

У меня все еще есть сертификаты / ключи из моей предыдущей установки, где издатель читает «Let's Encrypt Authority X3, Let's Encrypt Write review for 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 голосов
/ 31 мая 2019

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

Это также называется «сухой»-run "в других приложениях.

Я нашел это путем поиска в Google для" Fake LE Intermediate X1 ".

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

...