将Azure网站连接到Xero合作伙伴应用程序

tqr*_*rds 7 c# azure x509 http-status-code-403 xero-api

我正在将我的应用程序与Xero集成,后者需要两个证书.我上传他们从帮助到Azure 文章,但我仍然无法连接到Xero的API.我希望有人有将Xero合作伙伴应用程序与Azure Web App集成的经验.

我上传了两个pfx文件; 一个是自签名证书,另一个是Xero颁发的合作伙伴证书.后一个pfx文件包含两个证书; 一个Entrust商业私人子CA1(无论手段)和我的应用程序的唯一Entrust Id证书.

我使用以下代码通过其独特的指纹加载证书:

    static X509Certificate2 GetCertificateFromStore(string thumbprint)
    {
        var store = new X509Store(StoreLocation.CurrentUser);

        try
        {
            thumbprint = Regex.Replace(thumbprint, @"[^\da-zA-z]", string.Empty).ToUpper();
            store.Open(OpenFlags.ReadOnly);

            var certCollection = store.Certificates;
            var currentCerts = certCollection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
            var signingCert = currentCerts.Find(X509FindType.FindByThumbprint, thumbprint, false);

            if (signingCert.Count == 0)
            {
                throw new Exception($"Could not find Xero SSL certificate. cert_name={thumbprint}");
            }

            return signingCert[0];
        }
        finally
        {
            store.Close();
        }
    }
Run Code Online (Sandbox Code Playgroud)

这在本地工作正常,但在我的天蓝色网站上我收到403.7错误:

The page you are attempting to access requires your browser to have a Secure Sockets Layer (SSL) client certificate that the Web server recognizes.
Run Code Online (Sandbox Code Playgroud)

我还查看了以下参考资料以尝试解决问题:

我还没有尝试过:

  • 将我的Web应用程序转换为云服务; 试图避免这样做,但我不确定涉及哪些步骤.
  • 使用VM; 我没有找到关于如何做到这一点的任何详细步骤,但似乎是一个比上面更好的选择.

错误的屏幕截图: 错误

tqr*_*rds 2

终于成功了,我将发布我的解决方案,这有望在与 Xero 连接时为开发人员节省大量时间和挫败感。

Xero 合作伙伴应用程序无法与 Azure 应用服务(网站)一起使用。您必须上传两个额外的证书以及您的自签名证书和 Xero 合作伙伴证书。这些可以在您的本地计算机上找到,并且可以以 cer 格式导出(这些证书的详细信息如下)。无法为Azure应用程序服务上传这些证书确实是一个拐杖。它们还必须上传到特定的商店(根/CA),这是应用程序服务无法做到的。这些是我与 Xero 连接所采取的步骤。

  1. 将我的网站转换为 Azure 云服务:我厌倦了改变我们的环境,因为我们已经有了一个实时网站。事实证明,云服务本质上和应用服务是一样的;您仍在某处部署到虚拟机。但是,您对后端有更多控制权,并且可以远程桌面进入。在此处阅读更多信息。使用下面的链接创建我的网站并将其转换为云服务:

  2. 使用 azure 门户将 4 个证书上传到我的云项目。您需要上传以下内容:

    • 您的自签名证书(您在此处创建的证书)
    • Xero颁发的合作伙伴证书(您可能在这里得到了)
    • 中级 Entrust 证书(该证书应包含在您上面下载的 .p12 文件中)
    • Entrust 根证书(这应该位于您的受信任根存储中**)
  3. 将证书添加到云项目中的我的 Web 角色。您必须右键单击 Web 角色的属性并转到证书选项卡。使用指纹将所有 4 个证书添加到您的 Web 角色,上传后指纹将在门户中可见。记下两个委托证书的商店名称

在此输入图像描述

你可能需要非常耐心,因为我必须完成第一步。您必须弄清楚新的部署过程,如何在本地调试项目,以及可能还有很多其他令人沮丧的花絮!

**这是您可以使用 certmgr.msc 获取的正确 Entrust 根证书:

在此输入图像描述