2017-06-01 87 views
1

我已经查看了关于SSlStream类和关于证书的大约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)在签名项目的Property页面上,您可以创建一个测试证书。当你点击该按钮时,它会要求输入密码。如果使用密码,那将如何影响SslStream代码?上面的Microsoft帮助页面上的代码根本不涉及?

4)一旦我有服务器和客户端的证书,我可以将它们放在一个目录中,或者我需要将它们放在存储中吗?

谢谢。

回答

1

你可以发现,大部分问题的答案here

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

  2. 意味着什么?你的意思是客户端证书是否正确?您可以编写自己的登录名来检查客户端和证书。默认过期日期被检查,在哪里被撤销等。阅读there澄清。

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

因此,如果服务器有一个有效的证书,并假设有人删除它,并提出一个新的有效证书,一切仍然会工作?从你所说的话,客户关心的唯一事情就是认证还没有过期。 – ashlar64

+0

是的。但是,如果服务器证书根CA没有在您的信任机构中,那么在您对客户机进行验证期间它将会失败。并且客户端还检查服务器证书属性是否符合要求(例如,域名是否正确) –

+0

只是好奇,您如何确保证书在受信任的机构中? (我们在这里不涉及网络浏览器。) – ashlar64

1

1歌厅键)现在,如果我们设计客户端需要做的,我们使用相同的证书对客户端和服务器的证书的系统?或者他们都使用不同的?

最佳实践是“每个目的一个证书”。将服务器身份验证证书视为挂在建筑物上的“华纳兄弟工作室”标志,并将客户身份验证证书作为员工标识徽章。他们都通知对方发生了什么事情,但感觉有点不合适,然后走到街道环球,并显示你的巨大的华纳兄弟标志作为标识。

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

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

如果您只提供一个客户端授权证书,这是正确的,因为您提供了它。

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

3)在签名项目的Property页面上,您可以创建一个测试证书。当你点击该按钮时,它会要求输入密码。如果使用密码,那将如何影响SslStream代码?上面的Microsoft帮助页面上的代码根本不涉及?

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

4)一旦我有服务器和客户端的证书,我可以将它们放在一个目录中,或者我需要将它们放在存储中吗?

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