【发布时间】:2021-12-07 16:42:41
【问题描述】:
我正在开发一种付款方式与 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 documentation,我发现可以使用 TLS 隧道。
第一个问题是:如果我使用 TLS 隧道,就不会再出现这个错误了吗?
另一方面,Shopify 还要求:
支付应用还需要提供 Shopify 将验证的证书。对于此证书,您需要使用受信任的 CA 签名 SSL 证书,而不是 Shopify 的自签名 CA。
第二个问题是:当我将应用程序放在具有 HTTPS 证书 URL 的服务器中时,我明白我会满足这个要求。但我想知道我在本地开发应用程序时是否可以使用生成的证书,例如openSSL
我请求您的帮助并且不尝试使用 mTLS 隧道的原因是您需要一个 ngrok 付费帐户才能访问我没有的那种类型的隧道。
非常感谢。
我正在使用 Node + Express 作为服务器。
Shopify 文档:https://shopify.dev/apps/payments/general-transaction-requirements
【问题讨论】:
-
您能否使 mTLS 与 ngrok 一起工作?如果没有,您是否找到了本地开发的解决方法?
-
我也很想知道你是否设法解决了这个问题
-
你能成功吗?
标签: javascript express ssl mtls