用于 HTTP GET 和 POST 到 AWS IoT 和 AWS API 网关的 SIM 800 GPRS 调制解调器

SIM 800 GPRS modem for HTTP GET and POST to AWS IoT and AWS API gateway

我试图使用 SIM 800 模块分别 POST 和 GET 一些 JSON 数据进出 AWS 云。我最初是通过终端 UART 软件直接从我的 PC 上试用它并手动输入 AT 命令。

对于 Google 和 Quora 等网站,HTTP GET 在 SSL (AT+HTTPSSL=1) 上运行良好,因为它们 return 返回 <html> 数据。

1) 我首先研究了使用 link here 中提到的 HTTP 通过 AWS IoT 路由。但它不仅需要 HTTP SSL 的单个证书,还需要根 CA 证书和私钥,我想除了使用 SIM 800 上的 AT 命令的单个证书之外,不可能添加这些。如果有办法这样做那么任何人都可以详细说明它的流程和命令吗?

2) 然后我尝试走 API 路线。我在 AWS 中创建了一个 API 网关,它在内部 link 加入了一些云逻辑。我实际上想将 JSON 数据的 HTTP POST(从技术上讲是 https)发送到 AWS 云,但我为 HTTP GET 创建了一个测试 API 网关,它添加了写在 URL并以JSON的形式发回数据。然而,通过 SSL 的 HTTP GET 到 https://XXXX.execute-api.us-west-2.amazonaws.com/XXX/calc/4/2/+ 之类的 URL 失败并返回 606 error code。在 SIM 800 的 SSL 应用说明中,606 错误代码表示

"SSL alert message with a level of fatal result in the immediate termination of the connection"

我这里哪里做错了?

此外,我也在 https://httpbin.org/ip 上尝试通过 SSL 进行 HTTP GET,但得到了相同的 606 错误。是因为 SIM 800 需要 <html> 而不是 JSON 还是其他原因?

对于我通过终端软件从 PC 在 SIM 800 上执行的 AT 命令例程,我通常会这样做(对于 API 网关方法):

AT+SAPBR=3,1,"CONTYPE","GPRS"
AT+SAPBR=3,1,"APN","XXXX"
AT+SAPBR=1,1
AT+HTTPINIT
AT+HTTPSSL=1
AT+HTTPPARA="CID",1
AT+HTTPPARA="URL","https://XXXX.execute-api.us-west-2.amazonaws.com/XXX/calc/4/2/+"
AT+HTTPACTION=0

提前致谢。

我也有同样的问题。 AWS 要求 TLS1.2 而 Simcom 只允许 TLS1.0.

Microsoft Azure 最近升级了 TLS 要求,效果 "If a client tries to negotiate TLS 1.0 over such a scenario, the request will fail with connection reset"。这解释了为什么我的应用程序现在失败,因为 SIM800 模块仅支持 TLS 1.0。

AWS 可能也做了同样的事情。似乎正在进行弃用 TLS 1.0 的行动,并且根据 SSL and TLS, what is the Big Deal About June 30th? 2018 年 6 月 30 日是截止日期,届时如果您想声明 PCI 合规性,将不支持 TLS 1.0。

实现方法是方法 2,即 API 网关。我认为不可能通过方法 1,即 AWS IoT 来做到这一点。

@mich and @patrick-fischer 是正确的原因,我也怀疑同样但不知道解决方案。我和我的团队联系了 AWS 支持,他们告诉了我们解决方案。

显然,您是通过 AWS CloudFront 完成的。您必须使用 API 网关的 link 创建一个 CloudFront 分配(在我的例子中是 https://XXXX.execute-api.us-west-2.amazonaws.com/XXX/calc/4/2/+)。创建此分发版时,您可以提及是否接受传入的 HTTP、HTTPS 或两者。

在其中一个部分(不记得该部分的名称)中,它允许您提及允许来自哪个 TLS/SSL 版本的传入请求。对于 SIM 800,TLSv1.0 是必须在 CloudFront 分发中设置的最高支持版本。

CloudFront 所做的是允许来自具有特定参数(例如 HTTP 版本、TLS 版本等)的来源的流量

我正在尝试在 AWS Api 网关 和 select [=13= 中生成一个 自定义域 ]TLS 1.0,要激活您需要 AWS ACM 证书AWS Route S3 中的 DNS 确认(需要一些时间激活),这里有一些信息:https://vintage-kitchen.com/es/faq/faq-how-long-does-aws-certificate-manager-take/ (This option is visualized here: https://i.stack.imgur.com/RVO7y.png),你可以通过 GPRS 从 AT 命令 执行一个 HTTP POST 请求到 AWS Lambda 例如。