具有自签名证书的 AWS ALB/NLB HTTPS 目标

具有自签名证书的 AWS ALB/NLB HTTPS 目标

我正在使用 AWS 构建一项服务。对于这项服务,我想使用 ACM 证书。后端运行在 EC2 实例上,并使用自签名证书启用了 TLS。由于无法导出 ACM 证书,我想在后端前面放置一个负载均衡器来提供有效证书。

我的假设:

即使这样,我仍然遇到错误。

我目前的状态:

EC2 实例可通过端口 443 访问,并报告自签名证书(符合预期)。EC2 实例可通过端口 80 访问,以进行健康检查。

我构建了一个带有 https 目标组的 ALB,以我的实例为目标。可以通过浏览器访问 ALB,并显示我的有效证书,但响应为 502。

如果我使用 http 目标组并请求健康检查端点,我将得到 200 的返回。出于测试目的,我还为实例以及 ALB 使用了一个非常宽松的安全组。安全组

这就是我在 ALB 日志中看到的内容(除了时间之外,每一行几乎都相同):

https 2020-06-05T09:39:26.715673Z app/testTLSAlb/660e809a22b5d7d2 10.95.21.6:65521 10.95.16.197:443 -1 -1 -1 502 - 240 293 "GET https://my.domain.com:443/adfs/.well-known/openid-configuration HTTP/1.1" "PostmanRuntime/7.25.0" ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 arn:aws:elasticloadbalancing:eu-central-1:accountid:targetgroup/testhttpsTargetGroup/f1e8ce633e9ab069 "Root=1-5eda12ce-aabdb29ae55998867511a310" "my.domain.com" "arn:aws:acm:eu-central-1:accountid:certificate/d9a964b0-6d96-4eeb-b126-2b87f1350942" 0 2020-06-05T09:39:26.714000Z "forward" "-" "-" "10.95.16.197:443" "-"

如果我直接连接到目标,则可以访问该 URL。如您所见,这是一个 ADFS 服务器,似乎不支持实际日志记录。

我用 wireshark 捕获了一个直接请求和一个来自 ALB 的请求。直接请求产生了响应,来自 ALB 的请求在 TLS Client Hello 之后获得 TCP 重置: 从 ADFS 服务器重置 TCP

据我所知,密码应该是兼容的(成功的请求使用密码,ALB 也提供该密码)。唯一的主要区别是发送的 TLS 扩展(左边是 ALB,右边是 Postman)。TLS 扩展

缺少 SNI 字段似乎是问题所在,因为这是 ADFS 的要求(https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/overview/ad-fs-requirements

答案1

在这种情况下,问题是 ADFS(我想在负载均衡器后面运行的应用程序)仅响应使用 SNI 的 TLS 连接。由于 ALB 不这样做,ADFS 服务器以 TCP 重置进行回复。对于 ADFS,解决方案是通过执行以下操作添加默认证书绑定:

netsh http add sslcert ipport=0.0.0.0:443 certhash=certthumprint appid="{applicationguid}"

即使请求中没有 SNI,这也允许服务器做出响应。

相关内容