我有一个用PHP编写的网站,我想确保我的访问者使用我的SSL证书,我的意思是我想确保中间没有人。我该怎么做?
编辑:从POST或GET发送证书名称的任何技巧?
编辑:或者我将哈希发送到用户计算机,用户计算机将使用javascript对证书名称进行哈希,并比较它们是否为马赫。不是最好的解决方案,但总比没有好。
答案 0 :(得分:2)
您无法做到这一点:MitM攻击的基础是服务器和有效客户端之间的人已经拥有所有有效证书。因此,对于您的服务器,他的行为与任何其他有效客户端一样。
答案 1 :(得分:2)
假设是中间的人,“你的访问者”提供的所有信息(你可能以某种方式用来识别他们正在使用的证书)实际上都是中间人提供。这意味着你不能相信它(即使没有MITM,这是一个很好的经验法则。)
换句话说,这是不可能的。
你能得出这个结论的另一种方法是:如果这个 某种可能的话,“中间的人”将不是我们今天所知的一个词。
答案 2 :(得分:1)
正如@Jon和@zerkms已经说过的那样,客户有责任检查服务器证书。
作为服务器,您可以确保客户端使用已提供服务器证书的连接的一种方法是请求客户端证书身份验证。实际上,在与客户端证书握手期间,CertificateVerify
TLS消息包含到目前为止已交换的所有handhsake消息的摘要的签名,包括服务器证书。如果TLS handhsake成功,客户端将发送正确的签名,可以根据其证书进行验证。
当然,从服务器的角度来看,这只有在您信任客户端证书时才有效。
这不能完全解决问题,特别是因为不建议客户端接受使用其证书对其无法验证的服务器进行身份验证(即使私钥不会泄露,也不会泄露证书将被发送给流氓党。)
同样,在一天结束时,用户仍有责任决定是否信任服务器的身份。