0

我已经为我的 API 网关设置了双向 TLS 身份验证。然后我将我的客户端证书放在信任库中。该文件包含客户端证书、中间证书和根证书(私有 CA)。

使用浏览器(Windows 上的 Chrome)访问 API 网关时,浏览器要求我提供客户端证书。我选择了与我放在信任库中相同的证书。

API Gateway 在浏览器中报告以下内容:

{"message":"无效的客户端证书链。通过了多个客户端证书"}

更新:我还尝试在信任库中仅放置中间证书和根证书。同样的错误。

更新 2:使用 C# 代码 (WebClient) 从 Windows 证书存储区或磁盘(pfx 文件)加载证书时,也会报告相同的错误。

4

1 回答 1

1

如果您的信任库不包含所有中间 CA 证书,则客户端必须发送多证书链。TLS 握手可以正常工作,但在某处有一个明确的检查不允许多证书链。状态码是 400,而不是 403(!),并且您会收到“多个客户端证书通过”错误。

但是,如果您愿意将所有中间 CA 放在 API 网关信任库中,那么服务器不应要求客户端发送中间证书。在这种情况下,客户端应该只发送一个证书,API 网关应该可以工作。

因此,当 API 网关将初始客户端证书与信任存储进行匹配时,出现了问题,并且它没有找到中间证书。我会检查这些事情:

  1. 确保使用特定版本 ID 和信任存储的 S3 链接。否则很难判断它实际使用的是哪个版本,因为 API 网关不会在您将一个新版本添加到 S3 后立即自动选择一个新版本。也许您没有使用您认为的信任库。

  2. 您的信任库应该只包括 CA 证书——根证书和中间证书。你说你把客户证书放在那里,所以也许这会导致问题。试着把它拿出来。

于 2020-10-04T13:55:17.580 回答