【问题标题】:Getting certificate details from an apk从 apk 获取证书详细信息
【发布时间】:2012-07-06 20:50:13
【问题描述】:

如何获取签署 apk 的证书的详细信息。我有一堆用不同证书签名的 apk,我正在尝试根据他们的证书对它们进行分组。

我可以使用 jarsigner 获取证书到期详细信息并完成我的任务,但我很好奇是否可以获取更多详细信息或提取公钥(我相信它存储在 META-INF/cert.RSA 但它不可读)

【问题讨论】:

标签: android certificate signing


【解决方案1】:

尝试以下方法:

openssl pkcs7 -inform DER -in CERT.RSA -noout -print_certs -text

【讨论】:

  • 你也可以通过java的keytool获得一些信息:keytool -printcert -file CERT.RSA,但是openssl更冗长,这就是我更喜欢它的原因。
  • 谢谢。出于好奇,输出的哪一部分是指纹?我通过提取 META-INF/CERTIFIC.RSA 对 Signal APK (signal.org/android/apk) 进行了尝试,但在输出中找不到与其网站上列出的 Signal 指纹匹配的值。
  • @iangetz 看到这个问题:stackoverflow.com/questions/54782328/…
【解决方案2】:

unzip -p Name-of-apk.apk META-INF/CERT.RSA | keytool -printcert是我用的。

它产生诸如所有者发行者序列号有效通过等信息证书指纹签名算法版本

【讨论】:

    【解决方案3】:

    最简单的:

    keytool -printcert -jarfile file.apk
    

    这也适用于 Android App Bundle (.aab)

    【讨论】:

    • 我已经使用这个命令很久了。最近我注意到keytool 已停止在输出中显示 MD5。任何猜测为什么会这样?尝试了很多搜索但没有成功。
    • 加 -v 也可以得到 MD5。
    • 相同的输出。没有 MD5 可见。 :(这太奇怪了。早些时候我也曾经获得过MD5。我现在完全不知道为什么会这样。
    • 我也试过问这个问题,但还是没有成功。 stackoverflow.com/questions/55336382/…
    【解决方案4】:

    根据现有答案,这里是即时使用openssl 的命令行(解压缩证书并通过管道传输而不是定义-infile 选项)

    unzip -p App.apk META-INF/CERT.RSA |openssl pkcs7 -inform DER -noout -print_certs -text
    

    【讨论】:

    • 没有 SHA1
    【解决方案5】:

    无需解压即可使用 Android SDK 中的 ApkSigner 及以下内容:

    apksigner.jar verify --print-certs myApplication.apk
    

    【讨论】:

    • 很好的答案。请注意,从 Android 7 开始,引入了一种新的签名方案 (V2),它将生成没有 CERT.RSA 的 APK 文件。所以旧方法(使用 openssl / keytool)将不起作用。 (见:source.android.com/security/apksigning/v2
    • 另外请注意,您必须从您的工具库目录中运行它:java -jar ~/android-sdk/build-tools/28.0.0-rc1/lib/apksigner.jar
    • @DavidLev 所以,这个命令给了我们可以比较的值,对吧?但我觉得我有点迷失了。我应该如何处理来自“msgDigest.digest(sigs[0].toByteArray())”的结果 byte[] 值?。
    猜你喜欢
    • 2011-03-24
    • 2011-12-13
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多