【问题标题】:How do I use a certificate called from a Windows Service program with the Network Service account?如何通过网络服务帐户使用从 Windows 服务程序调用的证书?
【发布时间】:2018-02-27 22:18:51
【问题描述】:

我正在使用 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 列为帐户之一。

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

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

【问题讨论】:

    标签: windows-services x509certificate network-service winhttpcertcfg


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2018-02-21
      • 1970-01-01
      • 2016-04-14
      • 1970-01-01
      • 2017-11-04
      • 1970-01-01
      • 2013-01-20
      • 1970-01-01
      相关资源
      最近更新 更多