【问题标题】:SSL certification on C# service over TCP基于 TCP 的 C# 服务的 SSL 认证
【发布时间】:2015-04-21 12:20:20
【问题描述】:

我有 2 个服务器端(虚拟)程序,它们创建一个 TCP 服务器(TCPListener),然后尝试使用 X509 证书(BeginAuthenticateAsServer)对服务器进行身份验证。 客户端程序已准备就绪。

这两个服务器端程序的区别在于,一个是简单的控制台应用程序,另一个是Windows服务。

由于某种原因,客户端可以连接到控制台应用程序,但不能连接到服务。两个程序的设计相同。

我使用下面一行来描述我将使用的证书:

serverCertificate = new X509Certificate( "C:\\Users\\Tom\\workspace\\ServerSSL.cer", "12345678" );

我认为服务程序的特权有些可疑,但在过去几天我无法弄清楚。当然,我有The server mode SSL must use a certificate with the associated private key. 错误。当我尝试搜索答案作为帮助时,我得到了 IIS / webservices 主题的结果,但我使用的是简单的 Windows 7 Pro。

我可以请你帮忙吗?

【问题讨论】:

  • 服务通常在无法访问您的 (Toms) 用户目录的帐户下运行,选择全局可访问的位置,例如 SpecialFolder.CommonApplicationData
  • 我试过了,但我得到了同样的错误。但是,我会记住这些信息。谢谢。

标签: c# ssl windows-services certificate x509


【解决方案1】:

文件ServerSSL.cer 很可能只包含证书,而不包含私钥。这就是错误消息告诉您的内容。

尝试查找pfxp12 文件。或者,如果您有包含私钥的单独文件(即.key),则需要从它们(.key 和 .cer)中创建一个 pfx (p12) 文件。你可以使用opensslxca 来做到这一点。

【讨论】:

  • 是的,cer 仅包含证书,pfx 包含证书和私钥。我都有。我试图加载 pfx 文件,但我得到了同样的错误。我认为还有其他问题,因为一切都在我的控制台应用程序中运行。运行服务应用时出现问题。
  • 您需要使用 pfx。当您实例化 X509Certificate 类时,检查是否设置了 PrivateKey 属性。
  • 我必须使用X509Certificate2 来表示具有HasPrivateKey 属性的那个。结果是真的......嗯......只需阅读此属性有助于建立 SSL 连接。不管怎样,谢谢! :)
  • 感谢班级。我错过了。 X509Certificate2 是使用正确的类。恕我直言,即使不阅读HasPrivateKey,它也会起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-03
  • 2017-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多