bea*_*ice 4 java security ssl handshake
我现在正在尝试使用 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
}
};
Run Code Online (Sandbox Code Playgroud)
从安全性(如中间人攻击)的角度来看,我认为它必须一直返回 false。但在这种情况下,这整个事情的目的是什么?
然而,大部分时间在互联网上冲浪时,我都会遇到返回原始“真实”的解决方案(没有对参数进行任何工作)。
所以我什么时候、为什么以及如何使用它让我感到困惑。
你能详细说明一下吗?
从安全性(如中间人攻击)的角度来看,我认为它必须始终返回 false。
几乎正确。仅当默认验证检测到问题时才会调用此方法。在几乎所有情况下,此类问题都意味着应该中止连接以确保其安全。
然而,大部分时间在互联网上冲浪时,我都会遇到返回原始“真实”的解决方案(没有对参数进行任何工作)。
这几乎每次都是错误的。此类代码的作者通常不理解其含义(如您所言,可能是中间人),只是希望他们的代码以某种方式工作。是的,它会起作用,但它在不应该起作用的时候也会起作用,即它是不安全的。
默认验证失败的典型原因是服务器未正确配置错误的证书或使用错误的主机名(即不是证书中的主机名)访问服务器。
所以我什么时候、为什么以及如何使用它让我感到困惑。
仅当您知道主机返回带有错误主题的证书时才应该使用它,但您也知道究竟会出现什么错误,并且会在您的实现中正确验证此期望。
当然,最好不要在访问服务器的所有应用程序中解决问题,而是解决真正的问题。根据问题的真正原因,这通常意味着修复服务器上的证书或修复用于访问服务器的主机名。
归档时间: |
|
查看次数: |
6103 次 |
最近记录: |