2

我有一个 Web 服务,它通过要求消费的第三方应用程序通过客户端证书来保护。我已经在生产环境和客户端上安装了证书。此过程目前适用于具有类似设置的其他客户端。当前版本是用 .NET 3.5 编写的,可以在我的 cassini 下的开发机器上完美运行(并且独立运行),但拒绝在我的生产机器上使用相同的代码和证书设置。我已确认提供者 Web 服务通过浏览器接受安装在客户端上的证书,但是当以编程方式将证书添加到 Web 服务调用时,我得到 403,访问被拒绝。在向受保护的 Web 服务发出请求之前,我输出添加到调用中的证书的指纹,它确实是附加的正确证书。我的想法是,在某个地方,它无法访问证书的私钥部分。

有任何想法吗?

注意:我已授予 IIS 进程对相关 ~/crypto 目录的访问权限。

这是 C# 和 .NET 3.5

4

3 回答 3

2

几周前我遇到了这种问题。就我而言,解决方案是使用模拟来获得对证书存储的适当访问权限。默认情况下,IIS 工作线程以系统用户身份运行,因此无法访问相应的存储。将证书添加到特定用户存储,并模拟该用户解决了所有问题。

不过,我将继续关注这个问题,因为我知道冒充不是灵丹妙药,并且在这种情况下会出现问题。

于 2008-10-27T14:06:43.923 回答
0

它在我的机器上不起作用是有一个明显的原因。在 Visual Studio 中运行时,它使用我用于安装证书的凭据运行。因此自动拥有访问机器上私钥存储的权限。 但是,在 cassini 之外(在 IDE 中)运行时,IIS 进程没有访问私钥存储的权限。

临时解决方案:将 app-domain 作为Local System运行。不利于安全,但它可以让应用程序启动并运行(尽管是创可贴的),直到我能找到一个更持久的解决方案。

于 2008-10-29T00:28:20.953 回答
-1

你可以在你的程序上贴上这个标签然后收工:

替代文字

于 2008-10-27T14:43:59.557 回答