【问题标题】:SSLSocket doesn't perform hostname verificationSSLSocket 不执行主机名验证
【发布时间】:2019-02-10 10:06:04
【问题描述】:

我将 SSLSocket 用于我的 android 应用程序 并且根据这篇文章 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();

【问题讨论】:

    标签: java android sockets ssl


    【解决方案1】:

    答案在您的链接上:

    您的应用需要进行自己的主机名验证,最好通过调用 getDefaultHostnameVerifier() 与预期的主机名。进一步, 请注意 HostnameVerifier.verify() 不会抛出异常 错误,而是返回一个您必须明确显示的布尔结果 检查

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

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

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

    【讨论】:

    • tnx 但我在 android studio 中!怎么做?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    • 2020-11-15
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 2011-02-01
    相关资源
    最近更新 更多