0

我正在开发一种付款方式与 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 网址时,我收到以下消息:

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

4

1 回答 1

0

我最终向 ngrok 支持发送了以下电子邮件:

您好,我的名字是 Juan,我想知道您是否可以帮助我解决以下问题:

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

我在与 Shopify 的许多其他集成中使用了 ngrok 隧道,但不需要此特定验证,我对它们没有任何问题。

现在我在服务器中进行了客户端证书验证,当我尝试访问我的 ngrok url 时,我收到以下消息:ngrok gateway error 服务器返回了无效或不完整的 HTTP 响应。

ERR_NGROK_3004

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

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

非常感谢你。

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

嗨,胡安,

对于 HTTP 隧道,我们确实在我们的边缘支持 mTLS。您将创建双向 TLS 类型的端点配置并将其附加到您的域。

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

正如您所说,我们还在代理或您的服务器上为我们的 TLS 隧道支持 mTLS,但这可能设置起来更复杂。

如果它不起作用,我们有 15 天退款保证。

由于我无法支付帐户费用并访问这些功能,因此我最终在舞台服务器上开发了该应用程序,我没有遇到任何问题。我希望这对你有帮助!:)

于 2021-12-10T01:02:00.287 回答