我有几个关于SslStream类和证书

时间:2017-06-01 14:43:28

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

我已经查看了大约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代码?上面的Microsoft帮助页面上的代码根本没有解决这个问题?

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

感谢。

2 个答案:

答案 0 :(得分:1)

您可以找到问题的大多数答案here

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

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

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

答案 1 :(得分:1)

  

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

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

  

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

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

如果您只提供一个客户端auth cert,那是正确的,因为您提供了它。

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

  

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

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

  

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

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