SSLSocket不执行主机名验证

时间:2018-09-05 09:49:30

标签: java android sockets ssl

我为我的Android应用程序使用SSLSocket 并且根据这篇文章SSLSocket不执行主机名验证 here

,使用IP代替域时我没有看到任何异常,一切正常 我可以使用IP或任何其他域进行连接吗?

我已经从letsencrypt获得了一个域的证书,我想知道我是否可以通过SSLSocket将其用于任何域或IP!

SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, nulls, null);
SocketFactory sslsocketfactory = sc.getSocketFactory();
SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket(host, 443);
sslsocket.setSoTimeout(5000);
sslsocket.startHandshake();

1 个答案:

答案 0 :(得分:0)

答案在您的链接上

  

您的应用需要进行自己的主机名验证,最好通过致电   带有预期主机名的getDefaultHostnameVerifier()。进一步,   当心HostnameVerifier.verify()不会引发异常   错误,但返回布尔结果,您必须明确   检查

“我想知道我可以通过SSLSocket将其用于任何域或IP!”

否,您将无法执行此操作,连接证书必须位于客户的truststore中,并且我们可以预期不同的域使用不同的证书:)

请查看此How should I do hostname validation when using JSSE?链接。