/*问题描述:*/ googleplay已上架的应用收到安全警示或版本更新时遭拒绝更新,但是不会因此强制下架应用,此漏洞其违反了google开发者协议第4.4的相关规定。
/*问题难易度*/ * * *
/*导致问题的原因*/
自定义接口X509TrustManager中
public void checkServerTrusted(X509Certificate[] chain,String authType) throws java.security.cert.CertificateException {}方法中默认允许了所有的证书。
/*问题解决方法*/
1.有很多实际项目中会运用到多个第三方SDK,而遇到这个问题大多自己的代码中全局搜索并不会搜索到自定义 X509TrustManager 接口的 checkServerTrusted方法。问题就在于第三方的jar中,我不能确定问题到底存在于哪个SDK中所以我用了最笨的方法逐个排查删除jar包和逐个替换更新,每排除一个就上传一次就这样我被拒绝更新了三次。
2.本人遇到中Mob的ShareSDK 版本V2.7.4以下版本 而ShareSDK 官方更新文档中也明确注明了修复了此问题这个版本的发布日期:2016-07-11
http://wiki.mob.com/sharesdk-android-%E6%9B%B4%E6%96%B0%E5%8E%86%E5%8F%B2/
3.图灵机器人涉及的包为 tulingSDK1.x.jar tulinghttp1.0.jar而早些版本为tulingmanager.jar
4.百度语音合成(TTS)com.baidu.speechsynthesizer_1.0.0.jar
5.举例更新ShareSDK
(1)下载最新版本的ShareSDK ShareSDK-Android-2.7.x
(2)进入ShareSDK解压目录,打开“Share SDK for Android”目录,找到“QuickIntegrater.jar” 重新输入包名生成项目的替换文件。
(3)从生成好的项目包中的四个文件夹assets,libs,res,src到自己项目中对应的文件逐个Remove并替换。
6.问题代码段
SSLContext sslContext = SSLContext.getInstance("TLS");
public SSLSocketFactoryEx(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
super(truststore);
TrustManager tm = new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws java.security.cert.CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain,String authType) throws java.security.cert.CertificateException {
//chain[0].checkValidity();这里需要检验证书并抛异常throw new CertificateException
}
};
sslContext.init(null, new TrustManager[] { tm }, null);
}