java Android SSL https 帖子

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/12849301/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 10:27:59  来源:igfitidea点击:

Android SSL https post

javaandroidhttpsslhttps

提问by La bla bla

I've seen a lot of similar question here but couldn't find the solution. I have a webservice PHP file hosted at x10 premium. I bought an SSL certificate from them and can access my webpage via https on a browser and on the iPhone app. I'm having trouble doing the same on the Android app.

我在这里看到了很多类似的问题,但找不到解决方案。我有一个托管在 x10 溢价的网络服务 PHP 文件。我从他们那里购买了 SSL 证书,可以在浏览器和 iPhone 应用程序上通过 https 访问我的网页。我在 Android 应用程序上做同样的事情时遇到了麻烦。

I tried many solutions, but keep getting SSL errors. I tried this tutorial http://www.makeurownrules.com/secure-rest-web-service-mobile-application-android.htmlbut I'm getting

我尝试了很多解决方案,但不断收到 SSL 错误。我试过这个教程http://www.makeurownrules.com/secure-rest-web-service-mobile-application-android.html但我得到

10-04 07:21:57.081: W/System.err(6804): javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x2a1a11a8: Failure in SSL library, usually a protocol error
10-04 07:21:57.081: W/System.err(6804): error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:766 0x471f5756:0x00000000)
10-04 07:21:57.091: W/System.err(6804):     at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:436)
10-04 07:21:57.123: W/System.err(6804):     at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLInputStream.<init (OpenSSLSocketImpl.java:647)
10-04 07:21:57.123: W/System.err(6804):     at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.getInputStream(OpenSSLSocketImpl.java:618)
10-04 07:21:57.123: W/System.err(6804):     at org.apache.http.impl.io.SocketInputBuffer.<init>(SocketInputBuffer.java:70)
10-04 07:21:57.131: W/System.err(6804):     at org.apache.http.impl.SocketHttpClientConnection.createSessionInputBuffer(SocketHttpClientConnection.java:83)
10-04 07:21:57.131: W/System.err(6804):     at org.apache.http.impl.conn.DefaultClientConnection.createSessionInputBuffer(DefaultClientConnection.java:170)
10-04 07:21:57.131: W/System.err(6804):     at org.apache.http.impl.SocketHttpClientConnection.bind(SocketHttpClientConnection.java:106)
10-04 07:21:57.131: W/System.err(6804):     at org.apache.http.impl.conn.DefaultClientConnection.openCompleted(DefaultClientConnection.java:129)
10-04 07:21:57.131: W/System.err(6804):     at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:172)
10-04 07:21:57.141: W/System.err(6804):     at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
10-04 07:21:57.141: W/System.err(6804):     at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
10-04 07:21:57.141: W/System.err(6804):     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
10-04 07:21:57.141: W/System.err(6804):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
10-04 07:21:57.151: W/System.err(6804):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
10-04 07:21:57.151: W/System.err(6804):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
10-04 07:21:57.201: W/System.err(6804):     at com.lablabla.parkme.ParkMeActivity.performUpdate(ParkMeActivity.java:233)
10-04 07:21:57.211: W/System.err(6804):     at com.lablabla.parkme.ParkMeActivity.access(ParkMeActivity.java:220)
10-04 07:21:57.211: W/System.err(6804):     at com.lablabla.parkme.ParkMeActivity.onClick(ParkMeActivity.java:215)
10-04 07:21:57.211: W/System.err(6804):     at android.view.View.performClick(View.java:4084)
10-04 07:21:57.221: W/System.err(6804):     at android.view.View$PerformClick.run(View.java:16966)
10-04 07:21:57.221: W/System.err(6804):     at android.os.Handler.handleCallback(Handler.java:615)
10-04 07:21:57.221: W/System.err(6804):     at android.os.Handler.dispatchMessage(Handler.java:92)
10-04 07:21:57.241: W/System.err(6804):     at android.os.Looper.loop(Looper.java:137)
10-04 07:21:57.241: W/System.err(6804):     at android.app.ActivityThread.main(ActivityThread.java:4745)
10-04 07:21:57.251: W/System.err(6804):     at java.lang.reflect.Method.invokeNative(Native Method)
10-04 07:21:57.251: W/System.err(6804):     at java.lang.reflect.Method.invoke(Method.java:511)
10-04 07:21:57.271: W/System.err(6804):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
10-04 07:21:57.271: W/System.err(6804):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-04 07:21:57.281: W/System.err(6804):     at dalvik.system.NativeStart.main(Native Method)
10-04 07:21:57.291: W/System.err(6804): Caused by: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x2a1a11a8: Failure in SSL library, usually a protocol error
10-04 07:21:57.291: W/System.err(6804): error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:766 0x471f5756:0x00000000)
10-04 07:21:57.311: W/System.err(6804):     at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake(Native Method)
10-04 07:21:57.311: W/System.err(6804):     at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:395)

I tried other suggestions here on SO, for accepting all certificates, since I'm making a call to my own webservice and trust all certificates.

我在 SO 上尝试了其他建议,以接受所有证书,因为我正在调用我自己的网络服务并信任所有证书。

Another thing, I can access in a browser and the iPhone app to my webservice via HTTP connection. But when I try to make it in Android, I'm receiving back HTML response which contains

另一件事,我可以在浏览器和 iPhone 应用程序中通过 HTTP 连接访问我的网络服务。但是当我尝试在 Android 中制作它时,我收到了包含的 HTML 响应

10-04 07:29:47.662: D/RESULT(6900):  instead of REQUEST_URI, we could show absolute URL via:
10-04 07:29:47.662: D/RESULT(6900):  http://HTTP_HOST/REQUEST_URI
10-04 07:29:47.662: D/RESULT(6900):     but what if its https:// or other protocol?
10-04 07:29:47.662: D/RESULT(6900):     
10-04 07:29:47.662: D/RESULT(6900):     SERVER_PORT_SECURE doesn't seem to be used
10-04 07:29:47.662: D/RESULT(6900):     SERVER_PORT logic would break if they use alternate ports
10-04 07:29:47.662: D/RESULT(6900): -->
10-04 07:29:47.662: D/RESULT(6900): <h1>404 Not Found</h1>

Any ideas?

有任何想法吗?

Thanks!

谢谢!

回答by Neto Marin

There is a known problem with certificates and Android. Read this thread: Not trusted certificate using ksoap2-android

证书和 Android 存在一个已知问题。阅读此主题:使用 ksoap2-android 的不可信证书

There is a solution to use HTTPs on Android.

有一个在 Android 上使用 HTTPs 的解决方案。

[]s Neto

[]的内托