【问题标题】:How to fix the Google Play Warning: SSL Error Handler Vulnerability如何修复 Google Play 警告:SSL 错误处理程序漏洞
【发布时间】:2021-04-21 07:46:05
【问题描述】:

我最近在 google play 上发布了一个正式版应用,收到了来自 Google 的邮件:

我将我的代码更新为Google Support 建议:

class SslErrorHelper {

companion object {
    private val DIGITS_LOWER = charArrayOf('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f')
    fun onSslError(context: Context, sslErrorHandler: SslErrorHandler, error: SslError) {
        // https://support.google.com/faqs/answer/7071387
        LogUtil.log("onSslError --> ${error.primaryError}")
        if (checkCertificate(error.certificate)) {
            sslErrorHandler.proceed()
        } else {
            ToastUtils.getInstance().showToast(context.getString(R.string.ssl_certificate_error))
            sslErrorHandler.cancel()
        }
    }

    /**
     * check the certificate
     */
    private fun checkCertificate(cert: SslCertificate): Boolean {
        val myCertSHA256Str = "SHA256 fingerprint of my server https certificate "
        val bundle = SslCertificate.saveState(cert)
        val bytes = bundle.getByteArray("x509-certificate")
        if (bytes != null) {
            try {
                val factory = CertificateFactory.getInstance("X.509")
                val ca = factory.generateCertificate(ByteArrayInputStream(bytes))
                val sha256 = MessageDigest.getInstance("SHA-256")
                val key = sha256.digest((ca as X509Certificate).encoded)
                val errorCertSHA256 = String(encodeHex(key))
                if (errorCertSHA256 == myCertSHA256Str) {
                    return true
                }

            } catch (e: Exception) {
                e.printStackTrace()
            }
        }
        return false
    }

    private fun encodeHex(data: ByteArray): CharArray {
        return encodeHex(data, DIGITS_LOWER)
    }

    private fun encodeHex(data: ByteArray, toDigits: CharArray): CharArray {
        val l = data.size
        val out = CharArray(l shl 1)
        var i = 0
        var j = 0
        while (i < l) {
            out[j++] = toDigits[0xF0 and data[i].toInt() ushr 4]
            out[j++] = toDigits[0x0F and data[i].toInt()]
            i++
        }
        return out
    }
}

}

我在WebClient#onReceivedSslError 中调用onSslError 方法。

当我将我的应用重新发布到 Google Play 时,它仍然报告 SSL 错误处理程序的漏洞。 我也试试这个答案android Google Play Warning: SSL Error Handler Vulnerability,可惜还是不行!!

之后,我尝试通过执行命令find . -name '*.jar' -exec zipgrep -i onreceivedsslerror {} \;来查找哪个类或lib实现了onReceivedSslError,发现Facebook-login sdk和ShareSdk已经实现了它,所以我尝试将它们从我的项目中删除。

经过以上所有操作,它仍然报告了漏洞。

现在我的想法已经不多了。有人知道如何解决这个漏洞吗,或者你可以在这里分享你的经验。

谢谢,祝你有美好的一天!

【问题讨论】:

    标签: google-play android-security sslerrorhandler


    【解决方案1】:

    我更改了包名称,然后重新发布它。 它没有任何警告就通过了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-18
      • 2016-05-15
      • 1970-01-01
      相关资源
      最近更新 更多