发布于2021-05-21 17:51 阅读(1146) 评论(0) 点赞(10) 收藏(4)
我现在正在尝试使用KeyManager和TrustManager进行SSL配置,除了HostNameVerifier部分之外,其他一切对我来说似乎都很清楚。
我已阅读以下内容:
https : //docs.oracle.com/javase/7/docs/api/javax/net/ssl/HostnameVerifier.html
https://lightbend.github.io/ssl-config/HostnameVerification.html
因此,基本上,当请求的URL与证书中的URL不匹配时,它才生效。
处理此问题的最佳做法是什么?
new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
// some code
}
};
从安全性(就像中间攻击的人)的角度来看,我认为它必须一直返回false,但是在这种情况下,这件事的目的是什么?
无论如何,大多数时候我在互联网上冲浪时都会遇到返回原始“ true”的解决方案(对参数不做任何工作)。
所以它使我感到困惑,何时,为什么以及如何使用它。
您能详细说明一下吗?
从安全性(就像处于中间攻击中的人)的角度来看,我认为它必须始终返回false。
几乎正确。仅当默认验证检测到问题时才调用此方法。在几乎所有情况下,此类问题都意味着应中止连接以确保其安全。
无论如何,大多数时候我在互联网上冲浪时都会遇到返回原始“ true”的解决方案(对参数不做任何工作)。
这几乎是错误的。此类代码的作者通常不理解其含义(如您正确所说的可能是MITM),而只是希望他们的代码以某种方式工作。是的,它可以工作,但在不安全的时候也可以工作,即它是不安全的。
默认验证失败的典型原因是服务器配置错误的证书不正确或使用错误的主机名(即不是证书中的主机名)访问服务器。
所以它使我感到困惑,何时,为什么以及如何使用它。
仅当您知道主机返回的主题错误时,才应使用该证书,但您也知道究竟是什么错误,并将在实现过程中正确验证这一期望。
当然,最好不要在所有访问服务器的应用程序中都解决,而要解决实际问题。根据问题的真正原因,这通常意味着在服务器上固定证书或固定用于访问服务器的主机名。
作者:黑洞官方问答小能手
链接:http://www.javaheidong.com/blog/article/198434/bf998164e7378f916a89/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!