请所有SSL专家回答以下问题:
我们有一个嵌入式设备,上面运行着一个小型的Web服务器,我们可以在其上安装自己的SSL自签名证书。客户端是用.NET编写的(但这并不太重要)。
我如何在.NET中验证设备?只需要将证书的指纹与数据库中已知条目进行比较吗?
据我所知,指纹是整个证书(包括公钥)的哈希值。伪装成我的设备的设备当然可以发送相同的公共证书,但它不可能知道私钥,对吧?
还是说,我必须建立自己的信任链,创建自己的CA根证书,签署Web服务器证书,然后在客户端上安装它?
请所有SSL专家回答以下问题:
我们有一个嵌入式设备,上面运行着一个小型的Web服务器,我们可以在其上安装自己的SSL自签名证书。客户端是用.NET编写的(但这并不太重要)。
我如何在.NET中验证设备?只需要将证书的指纹与数据库中已知条目进行比较吗?
据我所知,指纹是整个证书(包括公钥)的哈希值。伪装成我的设备的设备当然可以发送相同的公共证书,但它不可能知道私钥,对吧?
还是说,我必须建立自己的信任链,创建自己的CA根证书,签署Web服务器证书,然后在客户端上安装它?
简短版:
理论上来说,你只需要做一个证书颁发机构为你所做的事情。所以应该没问题。
详细版:
当证书颁发机构签署您的公钥/证书/证书请求时,它并不会签署整个证书数据,而是仅签署整个证书数据的计算哈希值。这可以使签名更小。
如果您不想建立自己的CA或使用商业/免费的CA,则通过将指纹与您信任的指纹进行比较,您将获得第二可靠的配置。最可靠的解决方案是通过比较整个证书,因为这也可以保护您免受哈希碰撞攻击。
正如其他人在此处所述,您应确保使用安全的哈希算法。SHA-1已不再安全。
有关此主题的更详细信息: