我已经查看了大约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)一旦我获得了服务器和客户端的证书,我可以将它们放在一个目录中,还是需要将它们放在商店中?
感谢。
答案 0 :(得分:1)
您可以找到问题的大多数答案here
答案 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密码的问题......但这只取决于您的部署需求。