【问题标题】:Self signed certificate exception Hostname Verification failed自签名证书异常主机名验证失败
【发布时间】:2015-03-26 18:21:02
【问题描述】:

我正在尝试使用 httpsurlconnection 发送数据。我将 .pem 证书导入到 android 密钥库并创建了 ssl 上下文。现在一切正常,除了当我从 Android 通过服务器发送一些数据时,它说主机名未验证。

 HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
AssetManager assetManager = MainActivity.ctx.getAssets();
InputStream requestXML = assetManager.open("requestdump");         
String requestString = convertStreamToString(requestXML);
java.net.URL url = new URL("https://nn.nnn.nnn.nnn:xxxx");
HttpsURLConnection urlConnection = (HttpsURLConnection)url.openConnection();
urlConnection.setSSLSocketFactory(getSSLSocketFactory());
urlConnection.setReadTimeout(10000);
urlConnection.setConnectTimeout(15000);
urlConnection.setRequestMethod("POST");
urlConnection.setHostnameVerifier(hostnameVerifier );
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
byte[] outputInBytes = requestString.getBytes("UTF-8");       
OutputStream os = urlConnection.getOutputStream();
os.write( outputInBytes );
os.close();             
InputStream in = urlConnection.getInputStream();

此代码正在运行并在 ssl 启用服务器上发送数据。我试过这段代码:

HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
urlConnection.setHostnameVerifier(hostnameVerifier );

但我不想使用这种方法。

如果没有这种方法,我将无法验证主机名。任何人都可以建议如何在不使用 ALLOW_ALL_HOSTNAME_VERIFIE 的情况下使用自签名证书通过服务器发送数据。

任何帮助将不胜感激。

【问题讨论】:

    标签: android ssl httpurlconnection self-signed


    【解决方案1】:

    修复证书,使其主机名正确。这意味着使用新的密钥对重新开始。

    【讨论】:

    • 我也是这么想的,但是如果我导入 IE,问题是相同的证书,它可以工作。服务器团队坚持认为该证书应该有效并且是正确的,因为 IE(或任何其他浏览器)能够访问服务器。
    • 发生的一件更有趣的事情是,现在如果我从 Android 设备(而不是 Studio)运行我的应用程序,我不会收到主机验证失败,但会收到以下错误:SSL23_GET_SERVER_HELLO:tlsv1 警报不适当的后备不知道,为什么现在会发生这种情况。
    【解决方案2】:

    您可能在 android 和 Windows 上获得不同的证书,因为您的 Android 应用程序不支持 SNI (Server Name Indication)。您在 Android 上获得的证书适用于不同的主机。更多详情请查看Android SSL - SNI support

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-18
      • 2021-05-20
      • 2021-12-06
      • 2021-11-10
      • 2023-01-03
      相关资源
      最近更新 更多