SmallStep step-ca 和 Traefik - 无法连接到验证目标

SmallStep step-ca 和 Traefik - 无法连接到验证目标

我正在尝试使用 Smallstep step-ca 和 traefik 在私有网络中设置 Let's Encrypt 类型的服务。但我陷入困境,因为 step-ca 无法验证来自 traefik 的证书请求。

以下是我目前所做的事情。

我在 docker 容器中启动了一个 step-ca 服务,如中所述本文档 在 IP 为“172.16.4.5”的服务器上。我还关注了此文档用于添加 acme 入口点

在另一台服务器“172.16.4.4”上,我启动了一个带有 Traefik 2.4 和“whoami”服务的 docker-compose 配置(像这里官方示例)。

所有内部域名均由私有 DNS 服务器提供服务。并且每台服务器都可以顺利解析域名。

服务器和 step-ca 容器可以通过端口 80 和 443 访问服务器 172.16.4.4。服务器 172.16.4.4 和 traefik 容器可以访问 172.16.4.5。我在 traefik 容器初始化期间安装了使用 step-ca 制作的根证书。

我已经设置 traefik 使用 TSL 挑战。Traefik 初始化挑战,但我不知道为什么 step-ca 会引发错误 {"type":"urn:ietf:params:acme:error:connection","detail":"服务器无法连接到验证目标"}}

以下是 step-ca 引发的完整错误:

INFO[0126]     duration=63.427116ms duration-ns=63427116 fields.time="2021-07-13T09:55:33Z" method=POST name=ca nonce=XX path=/acme/company.int/authz/XX protocol=HTTP/1.1 referer= remote-address=172.16.4.4 request-id=xx response="{\"identifier\":{\"type\":\"dns\",\"value\":\"whoami.company.int\"},\"status\":\"pending\",\"challenges\":[{\"type\":\"dns-01\",\"status\":\"pending\",\"token\":\"XX\",\"url\":\"https://acme.company.int:9000/acme/company.int/challenge/XX/XX\"},{\"type\":\"http-01\",\"status\":\"pending\",\"token\":\"XX\",\"url\":\"https://acme.company.int:9000/acme/company.int/challenge/XX/XX\"},{\"type\":\"tls-alpn-01\",\"status\":\"pending\",\"token\":\"XX\",\"url\":\"https://acme.company.int:9000/acme/company.int/challenge/XX/XX\",\"error\":{\"type\":\"urn:ietf:params:acme:error:connection\",\"detail\":\"The server could not validation target\"}}],\"wildcard\":false,\"expires\":\"2021-07-14T09:54:24Z\"}" size=872 status=200 user-agent="containous-traefik/2.4.8 xenolf-acme/4.3.1 (release; linux; amd64)" user-id=

这是 Traefik config.toml

[api]
  insecure = true
  dashboard = true
  debug = true

[certificatesResolvers]
  [certificatesResolvers.myresolver]
    [certificatesResolvers.myresolver.acme]
      caServer = "https://acme.compagny.int:9000/acme/company.int/directory"
      email = "[email protected]"
      storage = "/etc/traefik/acme/acme.json"
      [certificatesResolvers.myresolver.acme.tlsChallenge]

[providers]
  [providers.docker]
    watch = true
    network = "traefik_webgateway"
    swarmmode = false
    exposedbydefault = false
  [providers.file]
    filename = "traefik.toml"
    directory = "/etc/traefik"

以下是 step-ca 服务的 /home/step/config/ca.json:

{
    "root": "/home/step/certs/root_ca.crt",
    "federatedRoots": [],
    "crt": "/home/step/certs/intermediate_ca.crt",
    "key": "/home/step/secrets/intermediate_ca_key",
    "address": ":9000",
    "insecureAddress": "",
    "dnsNames": [
        "acme.company.int"
    ],
    "authority": {
        "provisioners": [
            {
                "type": "JWK",
                // [...]
                },
                "encryptedKey": "xxx"
            },
            {
                "type": "ACME",
                "name": "company.int",
                "forceCN": true,
                "claims": {
                    "maxTLSCertDuration": "2160h0m0s",
                    "defaultTLSCertDuration": "2160h0m0s"
                }
            },
            {
                "type": "ACME",
                "name": "acme"
            }
        ],
        "template": {},
        "backdate": "1m0s"
    },
    "tls": {
        "cipherSuites": [
            "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305",
            "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"
        ],
        "minVersion": 1.2,
        "maxVersion": 1.3,
        "renegotiation": false
    }
}

答案1

只是一个参数问题。

我以前启动 step-ca 服务时,参数--resolver是 DNS 服务器的 IP,但需要添加 DNS 服务器的端口,否则 setp-ca 会无法查找域名。

:53所以我的问题的答案就是在 IP 末尾添加,就像这样

step-ca --resolver="10.14.2.2:53"

相关内容