慕勒3428872
正如您正确指出的那样,存在两个问题:a)证书不受信任,并且b)证书上的名称与主机名不匹配。警告:对于其他任何人都无法获得此答案,这是一个肮脏,可怕的骇客,您不得将其用于任何重要的事情。没有身份验证的SSL / TLS比根本没有加密更糟糕- 对于攻击者而言,读取和修改“加密的”数据是微不足道的,您甚至不知道它正在发生。还在我这儿?我很害怕a)通过创建一个自定义SSLContext来解决,该SSLContext的TrustManager可以接受任何内容:SSLContext ctx = SSLContext.getInstance("TLS");ctx.init(null, new TrustManager[] { new X509TrustManager() { public void checkClientTrusted(X509Certificate[] chain, String authType) {} public void checkServerTrusted(X509Certificate[] chain, String authType) {} public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[]{}; } }}, null);HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory());b)通过创建HostnameVerifier,即使证书与主机名不匹配,该主机名也可以继续进行连接:HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { public boolean verify(String hostname, SSLSession session) { return true; }});在开始弄乱HttpsURLConnections等之前,两者都必须在代码开始时发生。这适用于Android和常规JRE。请享用。