我有一个可以通过https调用网络服务的应用程序。当我在手机上运行apk时,效果很好。但是,在模拟器中,所有通过POST
的SSL
请求均失败,并显示以下信息:
读取错误:ssl = 0xb402be00:SSL库失败,通常是一个协议
错误
错误:100c50bf:SSL例程:ssl3_read_bytes:NO_RENEGOTIATION(外部/无聊的sl / src / ssl / s3_pkt.c:852 0xabf7fcd7:0x00000000)
在我们服务器的访问日志中,无论何时模拟器尝试访问Web服务,它都会报告403(禁止访问),这显然是因为模拟器未
与我们的服务器正确握手。 apache的错误日志中有一堆这样的行
[2015年8月20日星期四12:21:21] [错误] [客户端xxx.xxx.xxx.xxx]
重新协商握手失败:客户端不接受!?
Apache实际上添加了“!?”因此它看起来像是一个严重的意外错误。
在我的IDE中,我已选中“自动接受不受信任的证书”选项,但这没有什么区别。
我已经在网上看到用于解决android中各种SSL问题的解决方案,但是,它们似乎都是手机本身存在的问题,需要修改代码。由于它可以在手机上正常工作,因此这似乎是Android Studio的问题,我应该可以通过配置设置来解决此问题。或者,也许我必须在apache中做点什么?
底线:如何在Android Studio的模拟器中让我的应用程序与SSL Web服务对话?
使用Studio 1.3.1,Java 1.7.0_65,
compileSdkVersion 21
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "com.bla.bla"
minSdkVersion 14
targetSdkVersion 19
multiDexEnabled true
versionCode 12
versionName '1.2.0.8'
最佳答案
我建议您在运行时信任来自受SSL保护的服务器的证书。
这种方法与设备配置无关,并且对于电话和仿真器也适用。
我为此写了小library。
在我的博客文章中阅读有关此主题的更多信息:
https://mklimek.github.io/trust-specific-certificate-on-jvm/