7

我正在将我的应用程序与需要两个证书的 Xero 集成。我在本文的帮助下将它们上传到 Azure ,但我仍然无法连接到Xero API。我希望有人有将 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();
        }
    }

这在本地运行良好,但在我的天蓝色网站上我收到 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.

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

我还没有尝试过的:

  • 将我的网络应用程序转换为云服务;试图避免这样做,但是我不确定涉及哪些步骤。
  • 使用虚拟机;我还没有找到有关如何执行此操作的任何详细步骤,但似乎是比上面更好的选择。

错误截图: 错误

4

3 回答 3

3

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

基本上,它在您的本地 IIS 实例上运行,因为它是一个“单租户”机器,您的应用程序不需要与其他人隔离。

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

总之,您必须执行以下操作才能使您的证书在 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

我希望它解决了你的问题。

于 2015-12-29T21:25:57.993 回答
1

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

Xero 合作伙伴应用程序不适用于 Azure 应用服务(网站)。您必须上传两个额外的证书以及您的自签名证书和 Xero 合作伙伴证书。这些可以在您的本地计算机上找到,并且可以以 cer 格式导出(这些证书的详细信息如下)。无法为 Azure 应用服务上传这些证书确实是关键。它们还必须上传到特定的商店(根/CA),这是您无法通过应用服务完成的。这些是我与 Xero 建立联系所采取的步骤。

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

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

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

在此处输入图像描述

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

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

在此处输入图像描述

于 2016-01-14T04:20:06.433 回答
0

确保您从参考文章的第 2 步中添加了应用程序设置。

添加一个名为WEBSITE_LOAD_CERTIFICATES的应用程序设置,并将其值设置为证书的指纹,这将使您的 Web 应用程序可以访问它。您可以有多个以逗号分隔的指纹值,或者可以将此值设置为“ *”(不带引号),在这种情况下,您的所有证书都将加载到您的 Web 应用程序个人证书存储中。

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

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

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

于 2016-01-12T22:45:15.397 回答