【问题标题】:Android rest client with SSL to specific certificate带有 SSL 到特定证书的 Android REST 客户端
【发布时间】:2013-01-06 21:01:18
【问题描述】:

我正在尝试从 Android 连接到 SSL 休息服务。服务器使用的 SSL 证书并非来自通用 CA(Thawte、Verisign...)

我已使用此示例继续:http://blog.antoine.li/2010/10/22/android-trusting-ssl-certificates/

但是,虽然我已经完成了所有提到的步骤(创建 BKS 提供程序,创建自定义 SchemeRegistry),但我仍然遇到错误:“没有对等证书”。

调用服务的代码(来自 AsyncTask):

DefaultHttpClient client = new MyHttpClient(mainActivity[0].getApplicationContext());
HttpGet get = new HttpGet("<url of the service>");
get.addHeader("Autorization","Basic YW5kcm9pZDo=");
// Execute the GET call and obtain the response
HttpResponse getResponse;
try {
  getResponse = client.execute(get);
  ....

MyHttpClient 的代码与博客示例相同。执行 client.execute(get) 会导致 execption 崩溃:

01-06 21:47:03.615: W/System.err(19289): javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
01-06 21:47:03.625: W/System.err(19289):    at org.apache.harmony.xnet.provider.jsse.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:137)
01-06 21:47:03.630: W/System.err(19289):    at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:93)
01-06 21:47:03.635: W/System.err(19289):    at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:381)
01-06 21:47:03.640: W/System.err(19289):    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:165)
01-06 21:47:03.645: W/System.err(19289):    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
01-06 21:47:03.645: W/System.err(19289):    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
01-06 21:47:03.645: W/System.err(19289):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
01-06 21:47:03.650: W/System.err(19289):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
01-06 21:47:03.650: W/System.err(19289):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
01-06 21:47:03.650: W/System.err(19289):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
01-06 21:47:03.650: W/System.err(19289):    at validatedid.helloworldandroid.DownloadDevicePendingDocsTask.doInBackground(DownloadDevicePendingDocsTask.java:41)
01-06 21:47:03.650: W/System.err(19289):    at validatedid.helloworldandroid.DownloadDevicePendingDocsTask.doInBackground(DownloadDevicePendingDocsTask.java:1)
01-06 21:47:03.655: W/System.err(19289):    at android.os.AsyncTask$2.call(AsyncTask.java:264)
01-06 21:47:03.655: W/System.err(19289):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
01-06 21:47:03.655: W/System.err(19289):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
01-06 21:47:03.655: W/System.err(19289):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
01-06 21:47:03.660: W/System.err(19289):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
01-06 21:47:03.660: W/System.err(19289):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
01-06 21:47:03.660: W/System.err(19289):    at java.lang.Thread.run(Thread.java:856)

在某些地方说这可能是服务器错误,但我不知道如何检查。任何帮助都会非常感激。

提前致谢。

【问题讨论】:

    标签: android ssl httpclient ssl-certificate


    【解决方案1】:

    深入了解stackoverflow,我找到了问题的解决方案。

    看起来使用来自http://blog.antoine.li/2010/10/22/android-trusting-ssl-certificates/ 的代码是不够的(至少对我来说)。

    SSLSocketFactory 需要子类化。完整解释在:Trusting all certificates using HttpClient over HTTPS

    我把答案留在这里,以防有人到达这里。

    我希望在 Android 的下一个版本中,使用 https 访问 rest 服务将是一种更简单的方法,因为这是一项常见任务,目前并不容易。

    【讨论】:

      【解决方案2】:

      我使用 ->this

      在简历中,需要在您的应用上创建一个自定义密钥库,以便您可以根据应用密钥库验证您的服务器 HTTP。

      令人失望的是,太多人认为禁用 SSL 验证是此类问题的正确答案,而事实上,SSL 的全部意义在于安全性和验证。如果您打算避免任何验证,请坚持使用纯 HTTP

      请参考this我最近对另一个问题的回答

      【讨论】:

        猜你喜欢
        • 2012-03-21
        • 2022-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-13
        相关资源
        最近更新 更多