带有 HTTPS 的 KSOAP 2 Android
我正在使用 KSOAP2 来管理 Android 中的 SOAP,但它使用 https 作为 SOAP url,并且收到此错误:javax.net.ssl.SSLException:不受信任的服务器证书
这是一个正常错误,因为证书不受信任,但有人知道如何解决此错误吗? 我无法管理该证书,因为该证书来自其他公司,并且我无权更改它。
谢谢
I am using KSOAP2 to manage SOAP in Android but it use https for the SOAP url and I am getting this error: javax.net.ssl.SSLException: Not trusted server certificate
A normal error because the certificate is untrusted, but anyone knows how to workaround with this error?
I can not manage the certificate because is from a other company and I don't have access to change it.
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
再次检查这个问题,我发现了一个更干净的解决方案。无需修改 KSOAP2 文件。
在您的项目中,链接
ksoap2-android-assemble-3.0.0-jar
,无需任何修改。接下来,使用以下代码创建一个名为
SSLConnection.java
的文件:在通过 KSOAP2 调用服务器方法之前,只需调用
SSLConection.allowAllSSL();
即可。这一切,对我有用。所有 SSL 证书都被接受,我可以使用带有 https 协议的 KSOAP2。Checking again this problem, I've discovered a more clean solution for me. No KSOAP2 files modification needed.
In your project, link the
ksoap2-android-assembly-3.0.0-jar
, with no modifications.Next, create a file named
SSLConnection.java
with this code:And just call to
SSLConection.allowAllSSL();
before calling a server method via KSOAP2. It's all, works for me. All SSL certificates are accepted and I can use KSOAP2 with https protocol.我还不能发表评论,所以我将我的评论发布到这里的 rallat 答案。他的解决方案有效,但需要进一步解释。要使用 ssl 运行 ksoap2:
ksoap2-android-assemble-2.5.2-jar-with-dependency.jar
放入项目中HttpTransportSE.java
,ServiceConnectionSE.java
(我还需要复制Transport.java
、ServiceConnection.java
和HeaderProperty.java
)。删除这些文件中的导入并确保它们使用您的文件(不是从ksoap2.jar
导入)使用 rallat 答案(我复制粘贴它):
ServiceConnectionSE.java
添加此内容以接受不受信任的证书:然后使用这个构造函数
允许不受信任的证书,并且不允许
已验证的主机名:
第二个构造函数
在您的代码中只需使用:
教程中的其他内容
I can't comment yet so i post my comments to rallat answer here. His solution works but it needs further explanations. To run ksoap2 with ssl:
ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar
in a projectHttpTransportSE.java
,ServiceConnectionSE.java
(I also needed to copyTransport.java
,ServiceConnection.java
andHeaderProperty.java
). Delete imports from those files and make sure that they use your files (not imports fromksoap2.jar
)Use rallat answer ( I copy-pasted it):
ServiceConnectionSE.java
add this for accept untrusted certificate:then use this constructors to
allow untrusted certificates and not
verified hostnames:
Second contructor
In your code just use:
Other things as in tutorials
我自己找到答案
在 ServiceConnectionSE.java 上添加此内容以接受不受信任的证书:
然后在构造函数中添加此内容以允许不受信任的证书和未经验证的主机名:
<前><代码>尝试{
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (异常 e) {
e.getMessage();
}
连接 = (HttpsURLConnection) 新 URL(url).openConnection();
((HttpsURLConnection) 连接).setHostnameVerifier(new AllowAllHostnameVerifier());
I find the answer by myself
on ServiceConnectionSE.java add this for accept untrusted certificate:
then in the constructor add this to allow untrusted certificates and not verified hostnames:
创建一个新类FakeX509TrustManager来处理证书问题,
新创建的类如下:
Create a new class FakeX509TrustManager to handle the certificate problem,
The new created class is as the following: