Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 允许Stripe webhook访问AWS EC2实例_Amazon Web Services_Amazon Ec2_Stripe Payments - Fatal编程技术网

Amazon web services 允许Stripe webhook访问AWS EC2实例

Amazon web services 允许Stripe webhook访问AWS EC2实例,amazon-web-services,amazon-ec2,stripe-payments,Amazon Web Services,Amazon Ec2,Stripe Payments,我有一个条带webhook,它在http本地主机服务器上以条带的测试模式成功捕获和处理 但是,当切换到Stripe的实时模式数据时,webhook返回状态代码500,而EC2实例未被触及,不会生成任何日志 签名机密或条带密钥没有问题,事件永远不会到达使用负载平衡器创建的EC2的HTTPS端点 Stripe的支持并不能表明这一点,所以任何关于为什么会发生这种情况或如何处理这种情况的建议都是非常受欢迎的 条带上显示的错误为: HTTP status code 500 (Internal Server

我有一个条带webhook,它在http本地主机服务器上以条带的测试模式成功捕获和处理

但是,当切换到Stripe的实时模式数据时,webhook返回状态代码500,而EC2实例未被触及,不会生成任何日志

签名机密或条带密钥没有问题,事件永远不会到达使用负载平衡器创建的EC2的HTTPS端点

Stripe的支持并不能表明这一点,所以任何关于为什么会发生这种情况或如何处理这种情况的建议都是非常受欢迎的

条带上显示的错误为:

HTTP status code 500 (Internal Server Error)
Response Failed to connect to remote host
我已向运行在EC2上的express服务器添加了一个白名单中间件:

app.use((req, res, next) => {
  console.log('Always inside ', req.originalUrl);
  next();
});
在处理条带webhook URL之前

app.use('/afterpayment', bodyParser.raw({ type: 'application/json' }), afterPaymentRoutes);
以查看条带事件是否到达服务器,而这并没有发生


但是,如果我在浏览器中手动输入条带Webhook URL,域/后付款,结果与预期一样:白名单中间件打印消息,Webhook处理程序接管。

我遇到了类似的问题,正在观察此线程。就我而言,问题是一些不同的事情。我正在强制我的站点使用https(elb将所有流量从80重定向到443)。我的ec2上的应用程序正在通过端口80接受连接。进入现场的通道正在工作。我想可能是因为重定向,将webhook数据发送到elb的stripe被破坏了。事实并非如此。然而,我有一个安全组,只允许从我的IP地址访问(用于测试)。从internet(实际生产访问)将其更改为0.0.0.0/0并不能完全解决问题,但我希望将设置尽可能接近真实世界。在stripe dashboard中,我创建了一个新的webhook,指向为测试而公开的应用程序端点。在Stripe仪表板上,我点击了“发送测试webhook”按钮。这一次,错误不是超时,而是签名无效。因此,我知道将网站暴露于互联网是问题的一部分。,(是的,我本可以创建一个只允许从webhook数据来源的IP地址访问的安全组,但再一次-我想让它尽可能接近生产,感谢@justin michael朝着正确的方向推动)。我的应用程序仍在使用我为开发而设置的测试webhook。当我创建新的webhook时,它也创建了一个新的签名秘密。我将这个新的webhook签名秘密拉到我的应用程序中,然后再次运行“发送测试webhook”,结果成功了。因此,允许从Stripe进行正确的访问并确保签名密码正确,解决了我的问题。

问题是该域没有正确地暴露在internet上

因此,我拥有运行node.js服务器应用程序的Elastic Beanstalk环境,我在该应用程序上设置了负载平衡器,并通过HTTPS公开服务器

在尝试捕获由第三方应用程序(如Stripe)发送的
webhook
时,
服务器上没有任何内容
,即使我可以成功模拟对域端点的POST请求。该域也可以通过浏览器访问(或者看起来是这样)

问题是链接到负载平衡器的域名不能在internet上公开解析。以下是两个有用的链接:

在它们上运行测试揭示了与我的域的DNSSEC配置相关的问题,该配置在我的域上未启用

在遵循这一点时,我做到了:

  • 在托管区域上,在“DNSSEC签名”下启用DNSSEC签名
  • 创建了KSK客户管理的CMK
  • 在DNSSEC签名下,从查看信息中复制信息以创建DS记录
  • 路由53上,在注册域上,在域上,在DNSSEC状态下,使用上一步中的信息创建了一个新密钥

在此之后,所有测试都通过,webhook成功处理。

您能提供更多详细信息吗?你试过什么?500的条带仪表板中显示的完整错误详细信息是什么?你100%确定URL是正确的吗?谢谢你的回复,我详细地回答了我的问题。这就是问题所在,不管URL是否正确,都应该触发带有“Always inside”打印的中间件,不管它是什么,它都不是。Stripe专门使用POST请求。当您测试自己时,您是在发出POST请求还是GET请求?在浏览器中加载URL将执行GET请求,而不是POST。通过邮递员精确发送POST是有效的。可能是防火墙阻止了IPs条带的使用,或者是类似的情况?你能确认没有被阻止吗?你能指定你是如何通过HTTPS公开你的EC2的吗?我添加了一个负载平衡器,并创建了一个从Route 53到Elastic Beanstalk的别名。此外,我在负载平衡器上将所有流量从HTTP重定向到HTTPS。在安全组上,我还添加了0.0.0.0/0,但这仍然不能解决问题。但是,如果我使用生成的Elastic Beanstalk的URL进行测试,就会收到WEBHOOK!但是当添加https时,会出现一些问题。我不能专门针对beanstalk配置,因为我只使用了一个原始EC2。但是,我假设配置是相似的?也就是说,我在ec2上运行的应用程序前面是NGINX。因此,流量到达LB并发送到包含EC2的目标组。此ec2暴露了端口80,仅允许来自LB的流量通过所述端口。Nginx被配置为向应用程序传递请求。请详细说明您是如何公开端口80的?有几种方法可以做到这一点。这将是一个t