java - 从签名的 APK 或 JAR 中提取原始 X.509 证书

标签 java android keystore jar-signing jarsigner

我有一个用于对各种 jar 进行签名的公钥 MD5 哈希库,以及一个映射到我们用来对不同 APK 进行签名的各自 keystore 的映射。我想要做的是确定哪个 keystore 用于签署 APK,但不使用反复试验。 (此外,遗憾的是,我们的许多 key 共享相似或相同的 DN。)

我的解决方案是从 APK 的 RSA 文件中提取证书并直接计算 MD5 哈希值,因为我知道 META-INF/FOO.RSA(或 FOO.DSA)包含证书。 (我知道证书在那里,因为正在运行的 android 应用程序可以访问它,并且 jarsigner 文档告诉我它在那里。)

但我找不到任何工具可以提供证书的实际字节数。当我使用 jarsigner -verbose -verify -certs my.apk 时,我可以获得 DN 和证书元数据,但这并没有给我字节数。

最佳答案

提取 JAR 然后使用“openssl”输出证书:

因此假设“foo.jar”在您的当前目录中,执行如下操作:

mkdir temp
cd temp
jar -xvf ../foo.jar
cd META-INF
openssl pkcs7 -in FOO.RSA -print_certs -inform DER -out foo.cer

关于java - 从签名的 APK 或 JAR 中提取原始 X.509 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13692917/

相关文章:

java - 在android中将int转换为字符串?

android - Webview 闪烁 Android 10 : "tile memory limits exceeded, some content may not draw" Multiple WebViews inside my app

android - 如何从 txt 文件中获取某些值?

java - 错误记录器和验证身份验证java

java - WSDL 操作中的soapAction 属性为空

java - 将 PEM 导入 Java keystore

certificate - 创建证书 keystore 文件 AES 128

安卓证书过期

java - java中mysql的Spring数据和hibernate错误

android - Kotlin - 等效于 Swift 的 "if let + cast"组合