【问题标题】:I have several questions about the SslStream Class and about certificates我有几个关于 SslStream 类和证书的问题
【发布时间】:2017-06-01 14:43:28
【问题描述】:

我查看了大约 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) 获得服务器和客户端的证书后,我可以将它们放在目录中还是需要将它们放在商店中?

谢谢。

【问题讨论】:

    标签: c# ssl visual-studio-2015 x509certificate2 rsa-sha256


    【解决方案1】:

    您可以找到大部分问题的答案here

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

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

    3. 它将创建证书并使用私钥,您需要提供密码才能从存储中获取它
    4. 基本用法是将其放入商店。但您也可以从 .pfx 文件中获取它。你可以阅读there关于从文件中获取密钥

    【讨论】:

    • 因此,如果服务器有一个有效的证书,假设有人删除它并放入一个新的有效证书,那么一切仍然可以工作吗?根据您的说法,客户唯一关心的是认证是否还没有过期。
    • 是的。但是,如果服务器证书根 CA 不在您的受信任机构中,那么在您在客户端验证期间它将失败。并且客户端还检查服务器证书属性是否满足要求(例如域是否正确)
    • 只是好奇如何确保证书在受信任的机构中? (我们在这里不处理网络浏览器。)
    • 在建立 SSL 连接时,会验证证书链、证书到期日期等。验证证书链需要在您的受信任的根存储中存在根 CA 证书。此过程与您是否使用 Web 浏览器无关。但是您可以在开发应用程序时根据需要覆盖此默认行为。
    【解决方案2】:

    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 密码的问题……但这仅取决于您的部署需求。

    【讨论】:

      猜你喜欢
      • 2011-04-09
      • 1970-01-01
      • 2013-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-20
      • 1970-01-01
      相关资源
      最近更新 更多