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

时间:2015-08-19 03:24:01

标签: rest ssl amazon-web-services aws-api-gateway

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

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

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

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证书缺少什么?

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

2 个答案:

答案 0 :(得分:4)

我认为对此的答案是对您的Web服务器有些微妙的错误配置,浏览器可能会忽略,但Java(在AWS基础架构中)却没有。

问题并不完全是SSL handshake alert: 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协商而没有明显的错误,并且#34;原谅"如果服务器默认提供的证书确实有效且与域匹配,则为警告级别警报。

如果我已正确拼接此拼图,您应该能够使用tshark等数据包嗅探器确认此行为,并相应地更正您的网络服务器行为。

答案 1 :(得分:0)

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