X509Store.Open 拒绝访问
Access Denied on X509Store.Open
在证书和 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 class 以获得 API 中的行号)
the_API.theAPIClient g = new the_API.theAPIClient();
the_API.int_APIReturnObject i = g.DoCaseStatus("some parameters");
这两个应用程序驻留在同一台服务器上。
这两个应用程序都是使用 VS2017 创建的(运行 作为管理员)。
证书在“证书-当前用户->个人->证书”中
由于我的“测试工具”的异常显示了错误的行号,我假设 API 和工具正在成功通信。
知道我做错了什么吗?
提前致谢
罗杰
我终于想通了(可能不是最好的解决方案,但它有效)
我将 API 的应用程序池标识更改为管理员
在证书和 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 class 以获得 API 中的行号)
the_API.theAPIClient g = new the_API.theAPIClient();
the_API.int_APIReturnObject i = g.DoCaseStatus("some parameters");
这两个应用程序驻留在同一台服务器上。
这两个应用程序都是使用 VS2017 创建的(运行 作为管理员)。
证书在“证书-当前用户->个人->证书”中
由于我的“测试工具”的异常显示了错误的行号,我假设 API 和工具正在成功通信。
知道我做错了什么吗?
提前致谢
罗杰
我终于想通了(可能不是最好的解决方案,但它有效)
我将 API 的应用程序池标识更改为管理员