Android emulator 努力让SSLCertificateSocketFactory强制执行;socket.relaxssl检查“是”;android仿真器研究
我使用自签名证书进行开发和测试。我研究了各种让android emulator接受自签名证书的方法。到目前为止,我发现了以下方法的变化:Android emulator 努力让SSLCertificateSocketFactory强制执行;socket.relaxssl检查“是”;android仿真器研究,android-emulator,Android Emulator,我使用自签名证书进行开发和测试。我研究了各种让android emulator接受自签名证书的方法。到目前为止,我发现了以下方法的变化: 提供您自己的将接受任何证书的安全类 为应用程序创建包含自签名公钥的密钥库 将属性socket.relaxslcheck设置为yes 前两个选项非常复杂,并在代码中引入了对环境的依赖,例如dev、test或prod 我喜欢选项3,因为环境配置驱动行为,与web容器不同,web容器将为容器中运行的应用程序提供配置的数据源。一个开发环境将指向一个开发数据源等。不幸的
- 使用adb设置属性
adb shell setprop socket.relaxslcheck yes
- 使用System.setProperty
System.setProperty(“socket.relaxslcheck”、“yes”)
- 试图更改/system/build.prop和default.prop
System.setProperty(…)
方法似乎太晚了,因为工厂已经创建。出于上述考虑(代码中的特定于开发环境的代码),我不想走这条路,除非没有其他选择
最后一个选项应该在emulator重新启动后仍然有效,但即使在运行adb root
之后,我也无法写入这些文件
我是Android dev新手,希望您能给我一些指导,告诉我什么是最好的方法,以及如何让它发挥作用。好吧,您必须准确地指定该选项为“是”,即:
-prop socket.relaxsslcheck=yes
源代码只是将属性值与“yes”进行比较(并且不需要费心也与“true”或“1”等等效值进行测试……)
使用ADT包,我通过
Run -> Debug Configurations... -> Android Application -> ProjectName -> Target
-> Additional Emulator Command Line Options
重新启动emulator后,SSLSocketCertificateFactory
在播发状态下工作,即它接受所有证书。可以通过查看日志来验证:
12-08 18:10:52.382: W/SSLCertificateSocketFactory(763):
*** BYPASSING SSL SECURITY CHECKS (socket.relaxsslcheck=yes) ***
我用一个自行创建的证书对其进行了测试-如果没有该属性集,连接将失败,并出现证书验证错误,使用该属性集(或使用SSLCertificateSocketFactory.getunsecure()
),TLS套接字连接正常
顺便说一句,
SSLSocketCertificateFactory
有时似乎很难使用,例如,人们发布的解决方案基本上是:忽略该工厂。在谷歌上搜索,有些人甚至建议使用该工厂,但没有给出太多理由。好吧,你必须准确地在该选项中指定“是”,即:
-prop socket.relaxsslcheck=yes
源代码只是将属性值与“yes”进行比较(并且不需要费心也与“true”或“1”等等效值进行测试……)
使用ADT包,我通过
Run -> Debug Configurations... -> Android Application -> ProjectName -> Target
-> Additional Emulator Command Line Options
重新启动emulator后,SSLSocketCertificateFactory
在播发状态下工作,即它接受所有证书。可以通过查看日志来验证:
12-08 18:10:52.382: W/SSLCertificateSocketFactory(763):
*** BYPASSING SSL SECURITY CHECKS (socket.relaxsslcheck=yes) ***
我用一个自行创建的证书对其进行了测试-如果没有该属性集,连接将失败,并出现证书验证错误,使用该属性集(或使用SSLCertificateSocketFactory.getunsecure()
),TLS套接字连接正常
顺便说一句,
SSLSocketCertificateFactory
有时似乎很难使用,例如,人们发布的解决方案基本上是:忽略该工厂。在谷歌上搜索,有些人甚至建议使用该工厂,但没有给出太多理由。我已经成功地在emulator启动时使用“/emulator-avd-prop socket.relaxslcheck=true”设置了该属性但是它仍然被SSLSocketCertificateFactory忽略。我已经在模拟器启动时使用“/emulator-avd-prop socket.relaxsslcheck=true”成功地设置了属性,但是它仍然被SSLSocketCertificateFactory忽略