java - SSLSocket 不执行主机名验证

标签 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();

最佳答案

答案在您的链接上:

Your app needs to do its own hostname verification, preferably by calling getDefaultHostnameVerifier() with the expected hostname. Further, beware that HostnameVerifier.verify() doesn't throw an exception on error but instead returns a boolean result that you must explicitly check.

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

不,你不能那样做,连接证书必须在你客户端的truststore中。 ,我们可以预期不同的域使用不同的证书:)

请看这个How should I do hostname validation when using JSSE?链接。

关于java - SSLSocket 不执行主机名验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52182109/

相关文章:

java - 不能引用内部类中的非最终变量

android - 可搜索微调器使我的应用程序在多任务处理时崩溃

java - 为什么我的 android 客户端无法从 winsock c++ 服务器接收字符串消息?

php - 非阻塞套接字 : Are messages queued?

java - 如何将所有字节发送到单个数组中,然后在字节之间进行异或?

java - HtmlUnitDriver 单击并等待重新加载元素

Android:Sqlite 数据库 getMaximumSize() 以什么单位返回大小?

java - DateUtils.parseDate 不会在无效日期上抛出 ParseException

Java UI Web 框架

android - InetAddress.getLocalHost().getHostAddress() 在 Android 中返回 127.0.0.1