传递客户端证书仅适用于我的计算机

问题描述 投票:1回答:3

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

有任何想法吗?

注意:我已经让IIS进程访问相关的〜/ crypto目录。

这是C#和.NET 3.5

c# web-services security client-certificates
3个回答
2
投票

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

不过,我会继续关注这个问题,因为我知道模仿并不是一个神奇的解决方案,并且在这种情况下会出现问题。


0
投票

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

临时解决方案:将app-domain作为Local System运行。安全性不好,但它可以启动并运行应用程序(尽管是带式辅助),直到我能够找到更永久的解决方案。


-1
投票

你可以在你的程序上打一下这个贴纸,并称它为一天:

© www.soinside.com 2019 - 2024. All rights reserved.