所谓"公钥指纹",是指公钥长度较长(这里采用RSA算法,长达1024位),很难比对,所以对其进行MD5计算,将它变成一个128位的指纹。上 例中是98:2e:d7:e0🇩🇪9f:ac:67:28:c2:42:2d:37:16:58:4d,再进行比较,就容易多了。很自然的一个问题就是,用户怎么知道远程主机的公钥指纹应该是多少?回答是没有好办法,远程主机必须在自己的网站上贴出公钥指纹,以便用户自行核对。假定经过风险衡量以后,用户决定接受这个远程主机的公钥。
公钥指纹和公钥都是公开的,“中间人”会不会盗用公钥指纹来获取用户信任呢?
不太明白你的意思,既然是公开的,何来“盗用”一说?
中间人可以把正确的公钥换成是自己的公钥,用户如果误认为公钥是正确的,那么用户用此公钥加密后的信息就会被中间人用自己的密钥破解。你是想说这个意思吗?
嗯嗯,就是这个意思。
突然明白了!“中间人”可以用已有的公钥进行MD5加密得到相同的公钥指纹发给用户来取得用户的信任,但是用户信息通过公钥加密后就算发到“中间人”那里,“中间人”因为没有私钥也不能解密,所以只要核对公钥指纹和官网上的公钥指纹一致基本可以保证安全了
这么说感觉公钥指纹和公钥的作用差不多,只不过公钥指纹更短,方便核对,是这个意思吧
@刘小虾~: “核对公钥指纹和官网上的公钥指纹一致基本可以保证安全了”,差不多吧,但是“核对”说起来简单做起来难,不可能人工核对吧。
通常是把公钥交给CA,CA会生成一个证书,那个证书里包括了公钥和公钥所属人的基本信息,然后使用公钥的人拿到这个证书,先判断这个证书的颁发者是不是可信的CA,如果是,那么就提取里面的公钥。判断是否是可信的CA是这样的:CA本身也有一对密钥对,其私钥严格保存,其公钥公布于众,利用这一对密钥可以做数字签名,用来让客户识别证书的颁发者是否是某个CA。至于为什么要相信CA,这涉及到了伦理问题,就像公民信任政府一样。
@会长: 懂了,万分感谢
如不存在盗用,是直接他(中间人)用了,然后他再开(证书)加密服务,然后和客户端建立另一套密钥对。
证书不光有加密的作用还有认证的作用,在此刻就体现出来了——他和客户端建立证书加密服务,客户端可以发现这个证书是否是真正的服务提供者,需要客户端信任该证书,那么这个过程才能建立起来。
—— Fiddler就是典型这种模式,你在使用Fiddler是就会发现你需要信任Fiddler的证书。