我已经上传了两个 pfx文件;一个是自签名证书,另一个是由Xero签发的合作伙伴证书。后者包含两个证书;一个 Entrust 商业私人子 CA1(不知道是什么)和一个为我的应用程序生成的独特的 Entrust Id 证书。
我正在使用以下代码通过其唯一的Thumbprint加载证书:
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.
我还查看了以下参考资料,试图解决这个问题:
- Xero合作伙伴在Azure中的SSL配置(使用云服务而不是Web应用程序,因此我无法按照最后的步骤进行)
- 从文件加载X509Certificate2时出现403 Forbidden(在Xero论坛上发布的线程,关于同样的问题,发现解决方案仅适用于再次使用云服务)
- Xero合作伙伴连接和Azure网站(发布的解决方案建议使用虚拟机)
我尚未尝试的方法:
- 将我的Web应用程序转换为云服务;尽管我不确定涉及哪些步骤,但我正在努力避免这样做。
- 使用虚拟机;我还没有找到任何详细的操作步骤,但这似乎比上述方法更好。