通过AWS API Gateway代理调用SSL端点

3

目前我的API可以通过SSL端点访问。我尝试配置AWS API网关来代理请求到我的端点。

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

无论如何,当我在AWS Web界面上尝试使用GET方法向一个看起来像这样的SSL URL进行测试请求https://subdomain.domain.com/v1/resource时,我会收到以下错误。

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证书的哪些内容?
非常感谢您提供任何帮助或线索。

首先进行简单的故障排除:使用浏览器访问 https://xyz.domain.com/v1/resource 时是否会出现 SSL 错误? - Michael - sqlbot
那个完全没问题,事实上,它现在正在我们的生产环境中使用。谢谢你的评论。 - tven
2个回答

4
我认为这个问题是您的Web服务器存在微妙的配置错误,浏览器可能会忽略它,但Java(在AWS基础设施中)不会。虽然从您的角度来看,这个问题并不完全是SSL握手警报:自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服务器的行为。

嗨,迈克尔。我会核实这个。谢谢。 - tven

0

这似乎是一个非常具体的问题,需要向 API 网关 团队的某个人咨询。社区里的人无法真正帮助您解决这个问题。请尝试通过 AWS 论坛上的 API Gateway 部分 联系 AWS。


2
那是我的第一选择。现在这个帖子已经一个星期没有任何活动了,所以我又在这里发布了。 - tven

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接