我正在开发一种支付方式到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天的退款保证。
本
因为我不可能支付帐户并访问这些功能,所以我最终在舞台服务器上开发应用程序,在那里我没有任何问题。我希望这对你有所帮助!:)