3

目前我的 api 可以通过 SSL 端点访问。我尝试将 aws api 网关配置为代理对我的端点的请求。

我已启用输入传递并将 application/json 设置为内容类型。

在任何情况下,当我在aws web interface上尝试测试请求时,使用 GET 方法访问类似于https://subdomain.domain.com/v1/resource的 SSL url ,我收到以下错误。

Execution log for request test-request
Thu Aug 06 06:55:27 UTC 2015 : Starting execution for request: test-invoke-request
Thu Aug 06 06:55:27 UTC 2015 : API Key: test-invoke-api-key
Thu Aug 06 06:55:27 UTC 2015 : Method request path: {}
Thu Aug 06 06:55:27 UTC 2015 : Method request query string: {}
Thu Aug 06 06:55:27 UTC 2015 : Method request headers: {}
Thu Aug 06 06:55:27 UTC 2015 : Method request body before transformations: null
Thu Aug 06 06:55:27 UTC 2015 : Endpoint request URI: https://xyz.domain.com/v1/resource
Thu Aug 06 06:55:27 UTC 2015 : Endpoint request headers: {Accept=application/json, User-Agent=AmazonAPIGateway_6cb3krv5t9}
Thu Aug 06 06:55:27 UTC 2015 : Endpoint request body after transformations: 
Thu Aug 06 06:55:27 UTC 2015 : Execution failed due to configuration error: handshake alert: unrecognized_name

SSL证书缺少什么?

任何帮助或线索表示赞赏。

4

2 回答 2

4

我认为这个问题的答案是您的 Web 服务器的一些微妙的错误配置,浏览器可能倾向于忽略,但 Java(在 AWS 基础设施中)不会。

这个问题并不完全是SSL 握手警报的重复:unrecognized_name error since upgrade to Java 1.7.0因为它发生在不同的(从您的角度)环境中......但我相信这个问题解释了您所看到的。

现代 TLS (SSL) 堆栈具有一个功能,可以为一个古老的问题提供解决方案:在 HTTP over SSL (HTTPS) 中,必要的 SSL 协商发生在发送请求标头(包括Host:标头)之前……和只能向客户端提供一个 SSL 证书。在引入服务器名称识别 (SNI) 扩展之前,这基本上意味着您的服务器上每个公共 IP 地址只能使用 1 个 SSL 证书,因此如果您有多个具有单独 SSL 证书的域,则必须有一个公共每个证书的 IP 地址,以便 Web 服务器为域名提供正确的证书,因为证书绑定到服务器配置中的 IP 地址。

现在,至少对于现代浏览器,SNI 允许浏览器在服务器发送证书之前向服务器提示它将请求的主机名......对于不同的域,这可能是几个之一. 这消除了每个证书一个静态 IP 的旧且浪费的做法,因为它允许在服务器正在侦听的一个 IP 地址后面配置多个证书。

客户端(在这种情况下是连接到您的 API 网关的“出站”组件)在 TLS 协商中“先对话”,并且 SNI 在第一条消息中。如果服务器理解消息构造,但不希望看到该特定主机名,则应该返回致命错误,但它也只能发送警告消息。

该消息可能是警告,看起来很像您在日志中看到的内容。如果 Java TLS 实现很严格,并且您的服务器以这种方式配置错误(无法识别 SNI 上下文中的主机名,并发送警告而不是错误),那么我会期望这种行为,即使其他客户端(用户代理库和浏览器)可能会继续 SSL 协商而不会出现明显错误,如果服务器默认提供的证书确实有效并且与域匹配,则“原谅”警告级别的警报。

如果我正确地拼凑了这个难题,您应该能够使用类似的数据包嗅探器确认此行为tshark,并相应地纠正您的 Web 服务器的行为。

于 2015-08-20T00:59:58.763 回答
0

API Gateway对于团队中的某个人来说,这似乎是一个非常具体的问题。这里的社区无法真正帮助您。尝试通过AWS 论坛上的API Gateway 部分联系 AWS。

于 2015-08-19T22:11:05.310 回答