如何使用通过网络服务帐户从Windows服务程序调用的证书?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用通过网络服务帐户从Windows服务程序调用的证书?相关的知识,希望对你有一定的参考价值。

我正在使用Trans Union New Access系统来运行信用报告。我在我的Windows 7 64位开发机器上这样做。

我有一个使用该系统的Web应用程序(Web表单)项目。在一个按钮中,我有以下代码:

            CreditReportRequestXML requestXMLSupplier = new CreditReportRequestXML();
            requestXMLSupplier.RunPendingRequests();

这段代码调用了我自己编写的另一个项目中的方法。该代码构造发布到Transunion的XML。我得到了非常好的回应。

我有另一个项目是Windows服务项目。该项目的相关代码是:

            CreditReportRequestXML requestXMLSupplier = new CreditReportRequestXML();
            requestXMLSupplier.RunPendingRequests();

当运行该服务的帐户是我的帐户时,这很好用。该服务作为服务安装,可以使用“服务”控制台启动和停止。

到现在为止还挺好。

这是坏事。当我将服务配置为在网络服务帐户下运行时,我收到以下错误:

无法创建SSL / TLS安全通道。

我一直在尝试使用winhttpcertcfg来解决问题。我试过了 -

winhttpcertcfg -g -c LOCAL_MACHINE My -s ******** -a“网络服务”

(其中********是证书的主题名称。当我使用?clientCertificate.SubjectName.Name调试我的服务时,我可以看到这个名字)

我也试过了

winhttpcertcfg -i certfile.p12 -c LOCAL_MACHINE My -a“网络服务”-p pwforcert

(其中certfile是文件名 - 请注意我所拥有的文件是p12文件,而不是PFX文件; pwforcert是我用于在Trans Union站点上创建系统客户端的密码。)

尝试这两个命令后,服务失败并显示上述消息。当我列出应该有权访问私钥的帐户时

winhttpcertcfg -l -c LOCAL_MACHINE My -s MyCertificate

输出显示正确的匹配证书,并说“可以访问私钥的其他帐户和组包括:”,并将NT AUTHORITY NETWORK SERVICE列为其中一个帐户。

我想使用网络服务运行服务的原因是我的老板要我这样做。我今天和我们的网络人员谈过,他们在我们的服务器上没有拥有管理权限的帐户。

我错过了什么?或者,还有其他方法解决这个问题吗?

答案

我将其中一个证书导出到PFX文件,包括私钥和所有相关证书。这只能通过我机器上的一个或两个证书来完成。然后我删除了所有TU证书。使用winhttpcertcfg -i filename.pfx -c LOCAL_MACHINE My -a“NETWORK SERVICE”-p ****。那很有效。

以上是关于如何使用通过网络服务帐户从Windows服务程序调用的证书?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 WinAPI 和 C++ 从 Windows 系统上的服务通知客户端应用程序?

如何使用域 Windows 用户帐户作为应用程序池标识

如何从 Windows 服务启动进程到当前登录的用户会话

获取/设置托管 WCF 服务的帐户

我如何从客户端知道一个帐户是不是存在于 XMPP 服务器中?

如何在 Windows 服务中启动 GUI 程序?