质疑所有的SSL专家那里:
我们有一点就可以了Web服务器的嵌入式设备,我们可以在其上安装自己的SSL自签名的证书。 客户端是写在.NET(但也不那么重要了)。
我如何可以验证在.NET中的设备? 是否足以证书的指纹进行比较 与数据库中的已知项 ?
我的理解是,指纹是整个证书的哈希,包括公共密钥。 一种装置伪装成我的设备当然可以发送相同的公证书,但它可能不知道的私有密钥,对不对?
还是我建立我自己的信任链,创建自己的CA根证书,签署Web服务器证书并安装在客户端上?
质疑所有的SSL专家那里:
我们有一点就可以了Web服务器的嵌入式设备,我们可以在其上安装自己的SSL自签名的证书。 客户端是写在.NET(但也不那么重要了)。
我如何可以验证在.NET中的设备? 是否足以证书的指纹进行比较 与数据库中的已知项 ?
我的理解是,指纹是整个证书的哈希,包括公共密钥。 一种装置伪装成我的设备当然可以发送相同的公证书,但它可能不知道的私有密钥,对不对?
还是我建立我自己的信任链,创建自己的CA根证书,签署Web服务器证书并安装在客户端上?
你提出什么原则确定。 这是例如在使用密钥签名方 。 在这里,学员通常只是交换他们的名字和他们的公共密钥的指纹,并确保在党的人确实是他/她声称谁。 只是验证指纹要容易得多,而不是验证长期公钥。
另一个例子是所谓的自证明的文件系统 。 这里又只有公钥的散列获得通过安全通道交换。 (即这些散列被嵌入的URL)。在这个方案中的公共密钥不必被安全地发送。 接收器只需要检查公钥的哈希matche嵌入的URL的哈希值。 当然,接收器还具有以确保这些URL来自可信来源。
该方案和你建议是比使用简单的CA. 但是有一个缺点。 你必须确保与哈希数据库是真实的。 如果你的数据库很大,那么这将likeley是困难的。 如果您使用的CA,那么你只需要确保的根密钥地道。 这通常显著简化密钥管理和当然是一个原因,为什么基于CA的方案是不是如上面提到的自证明文件系统更受欢迎。
以同样的方式,你会也不应该考虑两个对象是相等的,只是因为它们的散列码匹配,你不应该考虑一个证书,只是因为它的指纹出现在“知证书指纹”的名单是真实的。
碰撞与的哈希算法,即使是好的生活中的事实,你应该警惕的可能性,一个积极的攻击者可以精心具有匹配指纹散列流氓证书。 要警惕的是,唯一的办法是检查证书本身的有效性,即查信任链,你是在为你最后一句暗示。
短:
那么在理论上,你那么做的正是一个证书颁发机构为你做。 因此,它应该被罚款。
更长:
当一个证书颁发机构签署您的公钥/证书/证书请求时,它不签字整个证书数据。 整个证书数据,而只是计算的哈希值。 这使签名小。
当你不想建立自己的CA,或使用商业/免费的 - 通过指纹与一个比较信任的,你将获得第二个最值得信赖的配置。 最值得信赖的解决方案将是整个证书比较,因为还可以保护你从哈希冲突的攻击。
至于其他人说在这里你应该确保使用安全/安全散列算法。 SHA-1是不再安全。
更详细的信息到这个话题: