【问题标题】:Android Google Play old OpenSSL warning [duplicate]Android Google Play 旧 OpenSSL 警告 [重复]
【发布时间】:2016-07-23 15:59:47
【问题描述】:

我刚刚发现一条安全警报,上面写着“您的应用正在使用包含安全漏洞的 OpenSSL 版本。”以及本文的链接:

https://support.google.com/faqs/answer/6376725

我执行了一个 grep 命令来查找 apk 中使用的 OpenSSL 版本
unzip -p YourApp.apk | strings | grep "OpenSSL"
我发现该应用正在使用OpenSSL 1.0.1k 8 Jan 2015

问题是,我没有明确使用任何 OpenSSL 类,并且我没有它在依赖项中。所以可能其他一些依赖项正在使用旧的 OpenSSL 版本,但我不知道如何找到使用 OpenSSL 依赖项的库。 我试图通过此命令./../gradlew -q dependencies 查找哪个库正在使用 OpenSSL 但根本没有任何 OpenSSL..

【问题讨论】:

  • 您是否尝试绕过 SSL 认证
  • 你这是什么意思?我该怎么做?
  • 您也可以禁用 SSLCertificateChecking,这样您在访问服务器的 url 时不需要任何类型的认证
  • 但是 Google 说的是 Beginning July 11, 2016, Google Play will block publishing of any new apps or updates that use older versions of OpenSSL. 这意味着我必须更新 OpenSSL 或具有较旧 OpenSSL 版本的依赖项。
  • 我也在寻找解决方案

标签: java android ssl openssl google-play


【解决方案1】:

对于使用整个依赖项列表的应用程序,我遇到了这个问题。经过大量寻找答案后,这对我有用:

我创建了一个名为 findopenssl.sh 的脚本(我在某个地方的另一个 SO 答案中找到了这个,但没有引用作者的功劳 - 另外,将 myhomedirectory 更改为您想要工作的目录,我使用了我的家文件夹,因为它只是让终端的生活更轻松)。此脚本将识别您的 apk 中引用 OpenSSL 的文件,以及那些实现被视为安全风险的 Heartbeat 功能的文件):

#!/bin/bash
sslworkdir=“myhomedirectory”
if [ ! -d $sslworkdir ]; then
mkdir $sslworkdir
fi
unzip -q "$1" -d $sslworkdir
#Set delimiter to ignore spaces
IFS=$'\r\n'
#Create an array of OpenSSL version strings
opensslarr=($(egrep --binary-files=text -o -R -e "OpenSSL\s\d+\.\d+\.\d+\w+\s\d+\s\w+\s\d+" $sslworkdir/*))
#Stackoverflow syntax highlight fix closing 'block comment' */
if [ ${#opensslarr[@]} -gt 0 ]; then
echo "Found OpenSSL versions"
printf "%s\n" "${opensslarr[@]}"
heartbeatarr=($(grep -R -E "(tls1_process_heartbeat|dtls1_process_heartbeat|dtls1_heartbeat|tls1_hearbeat)" $sslworkdir/*))
#Stackoverflow syntax highlight fix closing 'block comment' */
if [ ${#heartbeatarr[@]} -gt 0 ]; then
echo "Files that contains heartbeat methods:"
printf "%s\n" "${heartbeatarr[@]}"
else
echo "No libraries contain heartbeat methods"
fi
else
echo "Did not find OpenSSL"
fi
rm -rf $sslworkdir

我将我的 apk 复制到我的主目录并在终端窗口中运行脚本:

sh findopenssl.sh myappname.apk

在我的例子中,这将一个名为 libportsip_core.so 的库文件识别为引用了旧版本的 openssl。

我找到了两个版本的 libportsip_core.so(armv7 和 x86)并删除了它们。然后我再次清理、重建和构建我的 apk 并再次运行脚本。然后就好了,我成功提交到Play商店。

【讨论】:

    猜你喜欢
    • 2014-08-03
    • 2016-10-18
    • 1970-01-01
    • 2016-11-06
    • 2015-12-22
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多