让';s在ECS Fargate上使用traefick加密SSL

让';s在ECS Fargate上使用traefick加密SSL,ssl,amazon-ecs,lets-encrypt,traefik,aws-fargate,Ssl,Amazon Ecs,Lets Encrypt,Traefik,Aws Fargate,我已经尝试解决这个问题好几天了,但是没有任何运气: 情况: 我在AWS上有一个使用Fargate的ECS集群,这个集群包含Traefick 2.3.4和其他容器的实例。我使用Traefick作为反向代理将请求转发到其他容器。 使用HTTP一切正常,所以我决定将安全连接添加到Traefick。我已经尝试了在Internet上找到的所有方法,但没有任何效果,当我尝试使用curl连接到指定的域时,它返回: curl:(35)错误:1408F10B:SSL例程:ssl3\u get\u记录:版本号错误

我已经尝试解决这个问题好几天了,但是没有任何运气:

情况:

我在AWS上有一个使用Fargate的ECS集群,这个集群包含Traefick 2.3.4和其他容器的实例。我使用Traefick作为反向代理将请求转发到其他容器。 使用HTTP一切正常,所以我决定将安全连接添加到Traefick。我已经尝试了在Internet上找到的所有方法,但没有任何效果,当我尝试使用curl连接到指定的域时,它返回:

curl:(35)错误:1408F10B:SSL例程:ssl3\u get\u记录:版本号错误

这里有一些我做过的测试:

traefick.yml:

日志:
级别:调试
应用程序编程接口:
仪表板:正确
入口点:
网状物:
地址:80
http:
重定向:
入口点:
致:网络安全
方案:https
网络安全:
地址:“:443”
供应商:
云服务器:
集群:
-工具群
地区:欧盟-西-2
exposedByDefault:false
证书解决者:
letsencrypt:
顶点:
caServer:https://acme-staging-v02.api.letsencrypt.org/directory
电邮:#########################
存储:acme.json
httpchallenge:
入口点:网络
标签:

"dockerLabels": {
        "traefik.enable": "true",
        "traefik.http.services.traefik.loadbalancer.server.port": "8080",
        "traefik.http.routers.traefik.rule": "Host(`${host}`)",
        "traefik.http.routers.traefik.entrypoints": "websecure",
        "traefik.http.routers.traefik.tls.certresolver": "letsencrypt",
        "traefik.http.routers.traefik.service": "api@internal"
      }
此版本返回以下错误:

rror: 400 :: urn:ietf:params:acme:error:connection :: Fetching https://traefik.baaluu.com/.well-known/acme-challenge/td8IdOvJ1_GkigY-jPYaA4YsgeiS5FUiuUS-avbpsuY: Error getting validation data, url
它尝试检索该数据,但无法检索,因为它被重定向到https,无法检索,因为https不起作用,我也尝试过在没有自动重定向的情况下检索,它返回类似的错误,无法检索该数据

但遵循这一点,它应该能够正常工作

因此,我决定使用以下配置移动到dnsChallenge: Traefick.yml

日志:
级别:调试
应用程序编程接口:
仪表板:正确
入口点:
网状物:
地址:80
网络安全:
地址:“:443”
供应商:
云服务器:
集群:
-工具群
地区:欧盟-西-2
exposedByDefault:false
证书解决者:
letsencrypt:
顶点:
caServer:https://acme-staging-v02.api.letsencrypt.org/directory
电邮:######################
存储:acme.json
德斯查伦格:
提供者:路由53
检查前延迟:3
和以前一样的标签:

"dockerLabels": {
        "traefik.enable": "true",
        "traefik.http.services.traefik.loadbalancer.server.port": "8080",
        "traefik.http.routers.traefik.rule": "Host(`${host}`)",
        "traefik.http.routers.traefik.entrypoints": "websecure",
        "traefik.http.routers.traefik.tls.certresolver": "letsencrypt",
        "traefik.http.routers.traefik.service": "api@internal"
      }
仍然没有,我在日志中有这样的内容:
AuthURL:https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/170242259“
该url包含:

{
“类型”:“urn:ietf:params:acme:error:malformed”,
“详细信息”:“不允许使用方法”,
“地位”:405
}
我所做的最新测试是删除临时ca服务器:

日志:
级别:调试
应用程序编程接口:
仪表板:正确
入口点:
网状物:
地址:80
网络安全:
地址:443
供应商:
云服务器:
集群:
-工具群
地区:欧盟-西-2
exposedByDefault:false
证书解决者:
letsencrypt:
顶点:
电邮:###############
存储:acme.json
德斯查伦格:
提供者:路由53
检查前延迟:2
ssl仍然无法工作,但我在日志中没有看到任何错误消息:这是我得到的关于证书的最后一条消息:

Try to challenge certificate for domain [traefik.baaluu.com] found in HostSNI rule" providerName=letsencrypt.acme routerName=traefik@ecs rule="Host(`traefik.baaluu.com`)"
在那之后就没有什么了: (很抱歉看到这张图片,但我找不到从ECS中提取日志的方法)

其他容器仍然可以通过http协议访问

如果我尝试使用telnet连接到它,我可以访问该服务:

telnet traefik.baaluu.com 443
正在尝试3.8.30.164。。。
已连接到traefik-1547500306.eu-west-2.elb.amazonaws.com。
转义字符为“^]”。
80岁的人也是如此

在日志中看得更好我也发现了这个

retry due to: acme: error: 400 :: POST :: https://acme-v02.api.letsencrypt.org/acme/chall-v3/9205340157/1Wh0tQ :: urn:ietf:params:acme:error:badNonce :: JWS has an invalid anti-replay nonce: \"0004cbkFTGjCALFGDYOmhruMl6_F_fRSj33cOMvdpx5Xd2M\", url: "
time="2020-12-10T13:08:21Z" level=debug msg="legolog: [INFO] retry due to: acme: error: 400 :: POST :: https://acme-v02.api.letsencrypt.org/acme/chall-v3/9205340157/1Wh0tQ :: urn:ietf:params:acme:error:badNonce :: JWS has an invalid anti-replay nonce: \"0004cbkFTGjCALFGDYOmhruMl6_F_fRSj33cOMvdpx5Xd2M\", url: "
包含此url的:

{
“类型”:“dns-01”,
“状态”:“有效”,
“url”:”https://acme-v02.api.letsencrypt.org/acme/chall-v3/9205340157/1Wh0tQ",
“令牌”:“44R4GD4zMecin5RTKQJYWOCJOJ09SEGOBUVZLH6YC”,
“validationRecord”:[
{
“主机名”:“traefik.baaluu.com”
}
]
}
因此,我假设ssl已正确生成,但我不确定

有什么想法或建议吗

提前谢谢

H2K

编辑:

我已从仪表板中删除ssl,并将其放在另一个容器中,现在进入仪表板内部,我可以看到:

因此,我假设ssl正在为该域工作,但我仍然无法连接到它

编辑2:

使用telnet,如果我连接到端口443上的url并请求页面,我可以看到内容:

telnet xxxxxxxxxxxxxxxxx 443
Trying 3.10.148.201...
Connected to traefik-1547500306.eu-west-2.elb.amazonaws.com.
Escape character is '^]'.
GET /index.html HTTP/1.1
Host: xxxxxxxxxxxxxxxxx
页面的内容出现了,因此这不是负载平衡问题或路由问题,似乎我可以使用443访问容器,只是ssl不在那里。它就像有2个http端口,两者的行为方式相同。443目前就像一个80端口