【发布时间】:2019-12-25 08:55:20
【问题描述】:
我正在尝试从 Android Studio 运行 Android Virtual Device。一切正常,直到我尝试从虚拟设备内部访问任何 Google 的服务。我们的网络正在使用公司代理,我们必须安装公司证书才能使应用程序正常工作。我通过keytool -importcert -trustcacerts ... 将证书安装到Java(jdk),然后以同样的方式将其安装到Android\Android Studio\jre\bin。然后使用adb push C:\certs\cert1.cer /sdcard/cert1.cer将证书上传到虚拟机中,并在Android的设置中应用。但我仍然收到错误
Caused by: javax.net.ssl.SSLHandshakeException: Unacceptable certificate: CN=CompanyName Root CA, OU=IT Department, O='CompanyName Professional' LLC, L=NY, ST=NY, C=EN
无论如何绕过是真的吗?如果我已经导入了证书,为什么它仍然要求提供证书。在浏览器中,如果在虚拟机中打开它,所有网站都可以正常工作。谢谢。
【问题讨论】:
-
将其安装到模拟器中对于现代 Android 设备来说是错误的方式。您必须编辑应用程序的Network Security Configuration 以接受您的公司根 CA 证书。例如,请参阅this 问题。
-
谢谢,但是如果我刚刚在虚拟android设备上打开
Google Maps时出现错误怎么办? -
在这种情况下,你必须root模拟器,安装XPosed和模块“相信我”和“SSL Unpinning”(我上次使用这些模块时我必须使用最新的自我从他们的 Github 存储库编译的版本, XPosed 中的预编译模块太旧了. 请注意, 这完全禁用 SSL/TLS 安全检查. 从长远来看, 最好要求位于网络中的 PC 不通通过该代理(因为越来越多的应用程序使用与 SSL 代理概念完全不兼容的证书固定)。
-
非常感谢。即使我在安全选项中添加了
user defined证书,您知道为什么会出现错误吗?并且仅适用于 Google 服务。 -
添加 CA 证书作为用户定义的证书仅适用于较旧的 Android 版本(AFAIR Android 6 及更早版本)。此外,大多数 Google 应用都使用证书固定,因此它们永远不会接受您公司的根 CA 证书。
标签: java android android-studio ssl