1

我已经查看了大约 10 到 15 个关于 SSlStream 类和证书的不同页面,但我还没有找到一个可以完全向我解释一切的页面。所以我有一堆问题。

我目前正在处理一些 SslStream 代码,并且我对证书有疑问。根据我的研究,如果我们使用 TSL12,服务器似乎需要证书。客户端需要证书似乎是可选的。

1)现在如果我们设计一个客户端需要证书的系统,我们是否为客户端和服务器使用相同的证书?还是他们都使用不同的?

2) 还查看 Microsoft SslStream 帮助页面: https ://msdn.microsoft.com/en-us/library/system.net.security.sslstream(v=vs.110).aspx 代码如何知道这些是预期的证书吗?

3)在签名下项目的属性页面中,您可以创建测试证书。当您单击该按钮时,它会要求输入密码。如果使用密码,这将如何影响 SslStream 代码?上面微软帮助页面上的代码根本没有处理这个问题?

4)一旦我有服务器和客户端的证书,我可以将它们放在目录中还是需要将它们放在商店中?

谢谢。

4

2 回答 2

1

您可以在这里找到问题的大部分答案

  1. 这些是不同的证书。用于检查客户端身份的客户端证书。用于加密密钥材料和验证自身的服务器证书。

  2. 预期是什么意思?你的意思是客户端证书是否正确?您可以编写自己的登录名来检查客户端和证书。默认情况下,会检查到期日期,它是否被撤销等等。阅读那里澄清。

  3. 它将创建证书并使用私钥,您需要提供密码才能从存储中获取它
  4. 基本用法是将其放入商店。但您也可以从 .pfx 文件中获取它。您可以在那里阅读有关从文件中获取密钥的信息
于 2017-06-01T15:01:31.160 回答
1

1)现在如果我们设计一个客户端需要证书的系统,我们是否为客户端和服务器使用相同的证书?还是他们都使用不同的?

最佳实践是“每个目的一个证书”。将服务器身份验证证书想象为当您拉到警卫棚时悬挂在建筑物上的“华纳兄弟工作室”标志,将客户端身份验证证书视为员工 ID 徽章。他们都告诉对方发生了什么事,但是沿着街走到环球影业并出示你的大华纳兄弟标志作为身份证明感觉有点不合适。

2) 还查看 Microsoft SslStream 帮助页面:https ://msdn.microsoft.com/en-us/library/system.net.security.sslstream(v=vs.110).aspx代码如何知道那些是预期的证书吗?

您提供的服务器身份验证证书是正确的,因为您提供了它。

如果您只给一个客户身份验证证书,那是正确的,因为您提供了它。

如果您提供多个客户端身份验证证书,那么它将使用服务器 TLS 握手提供的可接受的 CA 列表来减少列表,然后它会采用第一个可接受的 CA。

3)在签名下项目的属性页面中,您可以创建测试证书。当您单击该按钮时,它会要求输入密码。如果使用密码,这将如何影响 SslStream 代码?上面微软帮助页面上的代码根本没有处理这个问题?

证书没有密码,但 PFX/PKCS#12 文件有。您需要该密码才能将文件加载到 X509Certificate2 实例中(例如new X509Certificate2("servercert.pfx", "1Potato2Potato3Potato4"))。由于 SslStream 不会为您加载,因此它不涉及密码。

4)一旦我有服务器和客户端的证书,我可以将它们放在目录中还是需要将它们放在商店中?

从 PFX 加载时它们应该可以正常工作(您需要私钥,所以它不能只是一个 .cer)。如果证书可以一次性加载到证书存储中,则可以避免加载或硬编码 PFX 密码的问题……但这仅取决于您的部署需求。

于 2017-06-01T15:05:41.967 回答