Android emulator 努力让SSLCertificateSocketFactory强制执行;socket.relaxssl检查“是”;android仿真器研究

Android emulator 努力让SSLCertificateSocketFactory强制执行;socket.relaxssl检查“是”;android仿真器研究,android-emulator,Android Emulator,我使用自签名证书进行开发和测试。我研究了各种让android emulator接受自签名证书的方法。到目前为止,我发现了以下方法的变化: 提供您自己的将接受任何证书的安全类 为应用程序创建包含自签名公钥的密钥库 将属性socket.relaxslcheck设置为yes 前两个选项非常复杂,并在代码中引入了对环境的依赖,例如dev、test或prod 我喜欢选项3,因为环境配置驱动行为,与web容器不同,web容器将为容器中运行的应用程序提供配置的数据源。一个开发环境将指向一个开发数据源等。不幸的

我使用自签名证书进行开发和测试。我研究了各种让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忽略