我想为我的申请阻止中间人攻击。如果第三方安装自签名证书并访问我的网络。所以我只想阻止客户端自签名证书的http调用(在Android代码中)。
任何回复都将受到高度赞赏。
答案 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