【问题标题】:javax.net.ssl.SSLException: hostname in certificate didn't match androidjavax.net.ssl.SSLException:证书中的主机名与 android 不匹配
【发布时间】:2014-08-18 05:17:04
【问题描述】:

我正在创建一个 android 应用程序,我在其中向 Web 服务发送数据,但我收到 javax.net.ssl.SSLException 错误:证书中的主机名与 android 不匹配这是我的代码

 AsyncHttpClient clien= new AsyncHttpClient();


              Log.i("URL", String.valueOf(base_url+"Race.svc/json/Race/Scanners/Add/"+series_event_raceid+"/"+qrCode));
              clien.put(base_url+"Race.svc/json/Race/Scanners/Add/"+series_event_raceid+"/"+qrCode, new AsyncHttpResponseHandler() {}

其中 series_event_raceid=103 和 qrcode=R12g***

请大家帮帮我

这是我的日志

08-18 10:06:24.272: W/System.err(5297): javax.net.ssl.SSLException: hostname in certificate didn't match: <development.racerunner.com> != <racerunner.com> OR <racerunner.com>
08-18 10:06:24.272: W/System.err(5297):     at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:185)
08-18 10:06:24.272: W/System.err(5297):     at org.apache.http.conn.ssl.BrowserCompatHostnameVerifier.verify(BrowserCompatHostnameVerifier.java:54)
08-18 10:06:24.272: W/System.err(5297):     at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:114)
08-18 10:06:24.272: W/System.err(5297):     at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:95)
08-18 10:06:24.272: W/System.err(5297):     at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:388)
08-18 10:06:24.272: W/System.err(5297):     at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:165)
08-18 10:06:24.272: W/System.err(5297):     at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
08-18 10:06:24.272: W/System.err(5297):     at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
08-18 10:06:24.272: W/System.err(5297):     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
08-18 10:06:24.272: W/System.err(5297):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
08-18 10:06:24.272: W/System.err(5297):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
08-18 10:06:24.272: W/System.err(5297):     at com.loopj.android.http.AsyncHttpRequest.makeRequest(AsyncHttpRequest.java:98)
08-18 10:06:24.272: W/System.err(5297):     at com.loopj.android.http.AsyncHttpRequest.makeRequestWithRetries(AsyncHttpRequest.java:112)
08-18 10:06:24.272: W/System.err(5297):     at com.loopj.android.http.AsyncHttpRequest.run(AsyncHttpRequest.java:68)
08-18 10:06:24.272: W/System.err(5297):     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
08-18 10:06:24.272: W/System.err(5297):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
08-18 10:06:24.272: W/System.err(5297):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
08-18 10:06:24.272: W/System.err(5297):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
08-18 10:06:24.272: W/System.err(5297):     at java.lang.Thread.run(Thread.java:811)
08-18 10:06:24.272: I/Fail camera arg1(5297): null
08-18 10:06:24.272: I/Fail camera arg2(5297): null
08-18 10:06:24.272: I/Fail camera arg3(5297): javax.net.ssl.SSLException: hostname in certificate didn't match: <development.racerunner.com> != <racerunner.com> OR <racerunner.com>

【问题讨论】:

    标签: android http android-asynctask qr-code


    【解决方案1】:

    你可以使用SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER

    SSLSocketFactory sf = new SSLSocketFactory(
    SSLContext.getInstance("TLS"),
    SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
    Scheme sch = new Scheme("https", 443, sf);
    httpclient.getConnectionManager().getSchemeRegistry().register(sch);
    
    HttpGet httpget = new HttpGet("https://host/");
    

    您尝试连接的位置。

    【讨论】:

    • 这个答案似乎假设 OP 正在使用 Apache HttpClient library,但他似乎正在使用 AsyncHttpClient... HTTP-client 对象似乎没有 getConnectionManager 方法.
    • SSLContext.getInstance("TLS") 必须替换为 SSLContext.getDefault() 才能使此代码对我正常工作而不会在运行时出错。
    猜你喜欢
    • 2016-08-09
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    相关资源
    最近更新 更多