【问题标题】:Access Denied on X509Store.OpenX509Store.Open 上的访问被拒绝
【发布时间】:2021-07-15 14:16:16
【问题描述】:

在证书和 API 方面,我完全是“新手”,所以我(自然)陷入困境。
我有一个 WCF 服务,我在其中创建了一个像这样的 HttpClient 实例(用于与第三方 API 通信的方法)。

private HttpClient CreateClient(String ClientCertificate)
{
    string aAuth = Base64Encode(username + ":" + password);
    
    X509Store myX509Store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
    myX509Store.Open(OpenFlags.ReadWrite);
    X509Certificate2 myCertificate = myX509Store.Certificates.OfType<X509Certificate2>().FirstOrDefault(cert => cert.GetNameInfo(X509NameType.SimpleName, false) == *the name*);
    
    HttpClientHandler handler = new HttpClientHandler();
    handler.ClientCertificates.Add(myCertificate);

    HttpClient RetVal = new HttpClient(handler);
    RetVal.DefaultRequestHeaders.Add("Authorization", "Basic " + aAuth);
    return RetVal;
}

当我使用 WCF 测试客户端运行方法时,它按预期工作。 但是,如果我尝试从另一个应用程序运行它,我会在尝试打开商店时收到“拒绝访问”。 (我用 [ServiceBehavior(IncludeExceptionDetailInFaults = true)] 修饰了 API 类以获取 API 中的行号)

    the_API.theAPIClient g = new the_API.theAPIClient();
    the_API.int_APIReturnObject i = g.DoCaseStatus("some parameters");

两个应用程序都驻留在同一台服务器上。
这两个应用程序都是使用 VS2017 创建的(以管理员身份运行)。
证书在“证书-当前用户->个人->证书”中
由于我的“测试工具”中的异常显示了错误的行号,我假设 API 和工具正在成功通信。
知道我做错了什么吗?
提前致谢
罗杰

【问题讨论】:

标签: c# api wcf


【解决方案1】:

我终于想通了(可能不是最好的解决方案,但它确实有效)
我将 API 的应用程序池标识更改为管理员

【讨论】:

  • 您在开店时是否尝试使用“ReadOnly”?你没有修改它。
猜你喜欢
  • 2019-02-07
  • 1970-01-01
  • 2012-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
相关资源
最近更新 更多