android - android工作室模拟器中的SSL问题,在手机上运行良好

时间:2015-08-20 19:19:42

标签: java android apache ssl android-studio

我有一个应用程序通过https调用Web服务。当我在手机上运行apk时,效果很好。但是,在模拟器中,超过POST的所有SSL请求都会失败:

  

读取错误:ssl = 0xb402be00:SSL库失败,通常是协议   错误       错误:100c50bf:SSL例程:ssl3_read_bytes:NO_RENEGOTIATION(external / boringssl / 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网络服务对话?

使用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'

2 个答案:

答案 0 :(得分:1)

我相信这是因为模拟器会在每次运行时重置您的CA证书。

Setting up a persistent trusted CA in an Android emulator

上查看此信息

请注意,在Cehmallow中,CA Certs的位置已发生变化,我会尽快更新一些其他信息

答案 1 :(得分:1)

我建议您在运行时信任来自受SSL保护的服务器的证书。

此方法独立于设备配置,也适用于手机和模拟器。

我写了小library来做这件事。

在我的博文中了解有关此主题的更多信息:

https://mklimek.github.io/trust-specific-certificate-on-jvm/