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

Connect Azure Website to Xero Partner Application

我正在将我的应用程序与需要两个证书的 Xero 集成。我在 this article, but I'm still unable to connect to the Xero API 的帮助下将它们上传到 Azure。我希望有人有将 Xero 合作伙伴应用程序与 Azure Web 应用程序集成的经验。

我上传了两个 pfx 文件;一个是自签名证书,一个是Xero颁发的合作伙伴证书。后一个 pfx 文件包含两个证书; Entrust Commercial Private Sub 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();
        }
    }

这在本地运行良好,但在我的 Azure 网站上出现 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.

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

我还没有尝试过的:

错误截图:

403 错误意味着我们在连接中没有看到 Xero Entrust 证书。 此处有更多详细信息 - http://blog.xero.com/developer/api-overview/http-response-codes/#403

基本上,它在您的本地 IIS 实例上运行,因为它是一台 "single tenant" 机器,您的应用程序不需要与其他机器隔离。

当您的应用程序被用于隔离网站的安全模型阻止时。

总而言之,您必须执行以下操作才能让您的证书在 Azure 上运行:

1) 将证书、私钥和所有中间证书导出到一个 PFX 文件中。

2) 使用 Azure 门户将证书上传到您 运行 的云服务(它应该显示为多个条目)。

3) 在代码中通过机器存储访问证书。

基于以下数据: https://community.xero.com/developer/discussion/626401

https://social.msdn.microsoft.com/Forums/azure/en-US/29b30f25-eea9-4e8e-8292-5ac8085fd42e/access-to-certificates-in-azure-web-sites

希望它能解决您的问题。

确保您添加了 referenced article 的第 2 步中的应用程序设置。

Adding an app setting named WEBSITE_LOAD_CERTIFICATES with its value set to the thumbprint of the certificate will make it accessible to your web application. You can have multiple comma-separated thumbprint values or can set this value to “ * “ (without quotes) in which case all your certificates will be loaded to your web applications personal certificate store.

我还会更具体地指定证书存储,即使用:

var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);

这就是我们在所有 Azure Web 应用程序中加载证书的方式。

终于成功了,我将 post 我的解决方案,希望它能为开发人员节省大量时间,并在与 Xero 连接时减少挫败感。

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

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

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

    • 您的 self-signed 证书(您创建的证书 here
    • Xero颁发的合作伙伴证书(你应该已经拿到了here
    • Intermediate Entrust 证书(该证书应包含在您上面下载的 .p12 文件中)
    • Entrust Root 证书(这应该在您的 Trusted Root Store**)
  3. 将证书添加到我在 Cloud 项目中的 Web 角色。您必须右键单击 Web 角色的属性并转到证书选项卡。使用指纹将所有 4 个证书添加到您的 Web 角色,上传它们后将在门户中显示。 记下两个委托证书的商店名称:

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

**这是正确的 Entrust Root 证书,您可以使用 certmgr.msc: