【问题标题】:WCF can't access local machine certificate store certificates without elevationWCF 无法在没有提升的情况下访问本地计算机证书存储证书
【发布时间】:2020-06-10 01:45:11
【问题描述】:

我遇到了奇怪的问题。 我的服务证书存储在 localMachine/Personal 中。

并且被引用为,

          <serviceCredentials>
            <serviceCertificate findValue="TestCertificate56" storeLocation="LocalMachine" storeName="My" x509FindType="FindByIssuerName" />
          </serviceCredentials>

安装证书后,运行时不需要提升权限,一切似乎都可以正常工作。重新启动机器后,客户端突然无法再连接,因为服务终止了连接上的套接字

System.ServiceModel.CommunicationException: The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '00:10:00'. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
   at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
   at System.ServiceModel.Channels.SocketConnection.ReadCore(Byte[] buffer, Int32 offset, Int32 size, TimeSpan timeout, Boolean closing)
   --- End of inner exception stack trace ---

在服务端没有指示错误的消息。如果我以提升模式运行服务,则没有问题。此外,如果我重新安装证书,它会一直工作到下次重新启动。此外,如果使用 CurrentUser 存储,则没有问题。

为什么这是一个问题?我的服务将作为 NetworkService 用户部署和运行,所以我相信它需要它在 LocalMachine 存储中的证书,而不是 CurrentUser 存储。我的服务没有管理员权限,所以问题会重新出现在生产环境中

编辑:我在运行 VS 2017 和 2019 的两台不同计算机上复制了该问题

【问题讨论】:

  • 本地商店需要管理员权限。
  • @MrgGek 你的意思是本地机器商店?那么为什么可以获取已安装在此用户会话中的证书呢?还查看文档,我找不到任何直接的说明。

标签: c# sockets wcf ssl certificate


【解决方案1】:

我还建议您使用本地计算机存储而不是当前用户存储。因为当运行程序的用户发生变化时,可能会导致证书不可搜索。另外,最好通过Thumbprint配置证书。

    <serviceCertificate storeLocation="LocalMachine" 
storeName="My" x509FindType="FindByThumbprint"
 findValue="974ad39ff0b86210f5e7d661e56945ad5c2d3770"/>

              </serviceCredentials>

最后,我认为问题的根源可能是访问证书的公钥或私钥需要权限,我建议您将Everyone帐户添加到证书管理私钥组中。

如果问题仍然存在,请随时告诉我。

【讨论】:

    猜你喜欢
    • 2011-04-06
    • 2015-01-15
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 2013-03-06
    相关资源
    最近更新 更多