c# - 将 "Service Account"证书存储与 .NET 2.0 HttpWebRequest 一起使用

标签 c# ssl httpwebrequest certificate

我有一个用 C# 编写的 .net 2.0 Windows 服务应用程序,它使用 HttpWebRequest 通过 SSL 访问非 soap Web 服务。我的 Windows 服务在 NETWORK SERVICE 帐户下运行。

我可以通过向我的 Windows 服务从 CA 与之通信的 Web 服务器颁发证书,然后将 CA 的证书安装到本地计算机\受信任的根存储来使 SSL 工作。

我希望能够做的是将 CA 的证书安装到“服务帐户”受信任的根证书存储而不是“本地机器”存储,并让它“正常工作”。

换句话说,似乎 .net 框架使用的 SSL 身份验证是硬编码的,以检查当前用户存储,并在验证 SSL 证书时检查本地机器存储的受信任根,但是有什么干净的方法可以让它检查“服务帐户”商店而不是(或除了)其他商店?

我能想出的唯一解决方案是重写 ServicePointManager.ServerCertificateValidationCallback,然后 P/Invoke 到 Crypto API 以在 Win32 中打开“服务帐户”证书存储,并在其中手动搜索根。我宁愿不这样做,因为这似乎是一个相当大的性能损失,不得不等待 2 个我无论如何都不打算使用的证书商店的失败。

可能,我在这里采用了完全错误的方法,但看起来我确实缺少解决问题的简单方法。

最佳答案

如果您的代码控制与之通信的服务器,那么您为什么不直接从 CertValidationCallback 返回“true”?是不是服务器证书每次请求都会改变?

除非您确实需要系统也验证与证书相关的其他内容,例如 CRL、过期等,否则您可以通过实现自定义证书验证回调使其正常工作。

如果您真的想将证书安装到 NETWORK_SERVICE a/c 上下文中,那么 Microsoft 提供的工具可以帮助您完成此操作。

http://support.microsoft.com/kb/901183 http://web.asu.edu/community/installing-client-certificate-windows-machine http://www.derkeiler.com/Newsgroups/microsoft.public.dotnet.security/2008-03/msg00011.html

祝你好运!

关于c# - 将 "Service Account"证书存储与 .NET 2.0 HttpWebRequest 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1556891/

相关文章:

c# - 加载 .html,带有 css 引用,文件嵌入在资源中

c# - 清除没有子元素的 xdt 元素

ssl - 如何为nginx配置pem文件?

java - 具有 Java 应用程序和 SSL 的 Web 服务客户端

c# - 如果内容是 XML 格式,我如何在 .NET Core 2.2 中执行 POST?

c# - 无法将值从 datagridview 获取到文本框

c# - 正则表达式 *this close*,但仍然缺少一种符号

email - 命令顺序错误。服务器响应是 : This mail server requires authentication when attempting to send to a non-local e-mail

C# HttpWebRequest.GetResponse 编码URL

c# - 为什么我的 HTTP Web 请求代码不发送请求?