mTLS validation and ngrok



我正在开发一种支付方式到Shopify的集成,它要求我使用mTLS验证他们(作为客户)的请求。

支付应用程序必须实现mTLS来处理所有*请求,其中它们作为服务器而Shopify作为客户端。当Shopify与支付应用程序启动会话时,情况就是如此。在这些情况下,Shopify使用自己的客户端证书。支付应用程序必须使用下面提供的自签名CA来验证该证书。在这些场景中使用mTLS允许支付应用程序验证发起请求的客户端是Shopify,并且Shopify和支付应用程序之间的流量是可信和安全的。

我在与Shopify的许多其他集成中使用了ngrok隧道,但由于它们不是支付应用程序,Shopify不需要mTLS,所以我使用隧道没有问题。

现在我在服务器中进行了客户端证书验证:

https
.createServer(
{
requestCert: true,
rejectUnauthorized: true,
ca: fs.readFileSync(path.join(__dirname, 'security', 'ca.pem')),
},
app
)
.listen(APP_PORT, () => console.log(`Server listening at: ${APP_URL}`));

其中'ca'指向Shopify在文档中给我的证书:

当我试图访问我的ngrok url时,我得到这个消息:

ngrok网关错误

服务器返回一个无效或不完整的HTTP响应。

ERR_NGROK_3004

查看ngrok文档,我发现可以使用TLS隧道。

第一个问题是:如果我使用TLS隧道,我不会再得到这个错误了吗?

另一方面,Shopify也要求:

支付应用程序还需要提供Shopify将验证的证书。对于此证书,您需要使用可信CA签名SSL证书,而不是Shopify的自签名CA。

第二个问题是:当我把应用程序在服务器与HTTPS认证的URL,我知道我将履行这一要求。但我想知道,如果我在本地开发应用程序,可以使用生成的证书,例如使用openSSL

我请求你的帮助而不尝试使用mTLS隧道的原因是你需要一个ngrok付费帐户来访问这种类型的隧道,而我没有。

非常感谢。


我使用使用Node + Express作为服务器。

Shopify文档:https://shopify.dev/apps/payments/general-transaction-requirements

最后我给ngrok技术支持发了以下邮件:

你好,我的名字是Juan,我想知道你是否可以帮助我

我正在开发一种支付方式的集成到Shopify要求我使用mTLS验证他们的请求。

我在与Shopify的许多其他集成中使用过ngrok隧道,但是不需要这种特殊的验证,我也没有问题他们。

现在我在服务器中进行了客户端证书验证,当我试图访问我的ngrok url,我得到这个消息:ngrok网关错误服务器返回了一个无效或不完整的HTTP响应。

ERR_NGROK_3004

查看ngrok文档,我发现它可以使用特殊TLS隧道。

问题是:如果我使用TLS隧道,我不会得到那个错误了吗?我写信给你是因为如果它确实解决了问题,我会问我的公司升级我的计划,这样我就可以访问TLS隧道。但我想在询问之前确定它会解决问题。

非常感谢。

他们用以下电子邮件回复:

嗨胡安,

我们在HTTP隧道的边缘支持mTLS。你会创建一个相互TLS类型的端点配置,并将其附加到域。

https://dashboard.ngrok.com/endpoints/configs

对于我们的TLS,我们也在代理或服务器上支持mTLS正如你所说的隧道,但这可能更复杂的设置。

如果坏了,我们有15天的退款保证。

因为我不可能支付帐户并访问这些功能,所以我最终在舞台服务器上开发应用程序,在那里我没有任何问题。我希望这对你有所帮助!:)