如何防止使用自签名证书?

时间:2018-01-30 10:40:00

标签: android

我想为我的申请阻止中间人攻击。如果第三方安装自签名证书并访问我的网络。所以我只想阻止客户端自签名证书的http调用(在Android代码中)。

任何回复都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

如果您定位SDK 24或更高版本,由于此https://android-developers.googleblog.com/2016/07/changes-to-trusted-certificate.html

,嗅探SSL流量会更加困难
  

用户添加的CA

     

保护所有应用程序数据是Android的关键目标   应用程序沙箱。 Android Nougat改变了应用程序的交互方式   使用用户和管理员提供的CA.默认情况下,以API为目标的应用   等级24将按设计 - 不尊重此类CA,除非该应用明确   选择此选项。此默认安全设置可减少应用程序攻击   表面并鼓励对网络和基于文件的一致处理   申请数据。

如果您的APK的targetSdkVersion为24或更高,则无法使用自签名证书嗅探HTTPS流量,因为Android操作系统安全规则确实不再信任自签名证书。< / p>

因此,例如,如果您的目标是API 24或更高版本,则无法在此处描述http://www.versionestabile.it/blog/ios-simulator-and-android-emulator-http-proxy/

最好的方法是使用&#34;固定&#34;。但这会给你更多的维护工作。

  

通常,应用信任所有预安装的CA.如果这些CA中的任何一个   如果要发出欺诈性证书,该应用程序将面临风险   中间人攻击。有些应用会选择限制设置   他们通过限制他们信任的CA集合接受的证书   或通过证书固定。

https://developer.android.com/training/articles/security-config.html#CertificatePinning

使用证书固定功能,您可以告诉您的Android APK只信任您将公钥SHA放入res/xml/network_security_config.xml的女巫证书:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config>
        <domain includeSubdomains="true">example.com</domain>
        <pin-set expiration="2018-01-01">
            <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
            <!-- backup pin -->
            <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
        </pin-set>
    </domain-config>
</network-security-config>

因此,您只能放置您的服务器证书和任何其他仍然存在的证书。

注意:您必须在清单文件中添加它才能使用网络配置文件:

<application android:networkSecurityConfig="@xml/network_security_config"

无论如何还有一些&#34;逆向工程&#34;人们可以使用的技术来嗅探您的流量。看看这个:https://techblog.mediaservice.net/wp-content/uploads/2017/10/HackInBo-2017-Winter-Edition-Federico-Dotta-Advanced-mobile-penetration-testing-with-Brida-141017.pdf