从2018年1月到6月,我离开了Android Studio,现在我可以制作简单的应用程序了,它可以查询https网站,处理JSON响应并使用选定的键值信息更新UI。
当我回来时,这些应用程序都不返回查询结果,并且Logcat抛出一些有关javax ssl证书的消息,例如:
javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
(...) Caused by: java.security.cert.CertificationException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
其中一个不再起作用的应用是来自Udacity免费课程的ud843 Soonami起点。 ud851 Sunshine等较旧的应用程序也不再起作用。
即使安装了AS 3.1.3,Gradle 4.4和Gradle插件3.1.0并配置了build.gradle,安装了Java 8jdk并设置了环境变量之后,它们仍然无法执行查询。
我不使用任何代理,只是使用相同的旧家庭网络。
我承认我到目前为止还不了解很多答案,但是似乎WWW的功能或Apps连接到https站点的方式发生了某种变化。
从我所阅读的内容中,我只能推断出我们现在需要获取服务器真实性证书并更新Apps代码,以便在尝试进行查询连接时检查是否匹配。
Non-Public CA,我认为我想做的事情属于这种情况。
如今使用证书确实是一项要求吗?如果是这样,我如何获得该站点的PEM或DER格式的证书并进行查询,例如:USGS query URL?
如果我完全误解了,我会错过什么?有人可以用基本的方式解释为了使这些应用程序现在能够工作而进行了哪些更改吗?
答案 0 :(得分:0)
好吧,至少我让它们连接到了物理移动设备,不知道如何使它们在仿真器上运行,但这是我机器上的漏洞少了。
我当时所做的是: ->下载Java 8 jdk并设置JAVA_HOME和JRE_HOME环境变量; ->重新安装Android Studio,导入设置; ->从Java 8 jdk改回android Studio随附的嵌入式OpenJDK; ->删除所有仿真器并创建新的仿真器; ->在compileOptions内删除了模块gradle文件指示以使用JavaVersion.version_1_8; ->学习了如何从https://earthquake.usgs.gov下载证书并以.cer为扩展名将其保存为DER格式; ->创建一个文件夹res> raw,在其中保存了该证书; ->基本上,我遵循了Developer.android的建议,将其作为图像附加到问题中,创建了xml network-security-config并相应地更改了清单;
至少Apps可以在现实世界中的移动设备上运行,不要介意以这种方式对其进行测试。
(用尤达的声音:)大约两个星期了。