如何在Android中签署AAR工件?

Far*_*ihi 6 java android gradle aar android-signing

我正在开发一个.AAR安卓库,我想用自己的密钥签署已发布的工件,以便我可以确定是否已经发布了具有相同名称和功能的假aar.

通知1:

我希望能够以编程方式检查我的库的真实性,即使是伪造的库,也只是伪造我的aar文件的一部分功能.

通知2:

打算将这个aar发布到maven,sonatype或任何其他公共存储库中.因此,我将签署一个典型的发布流程,如签署apk文件.

nan*_*ito 15

您可以使用jarsigner对您的aar库进行签名,并可以使用它keytool来生成签名密钥.这两个工具都位于Android Studio附带的嵌入式JDK中.执行以下操作以对您的库进行签名.

签名

使用密钥对生成密钥库.您需要提供证书字段:

keytool -genkeypair -alias aarsign -keypass mypassword -keystore aarsign.keystore -storepass mypassword -v
Run Code Online (Sandbox Code Playgroud)

将生成的证书导出到PEM文件中:

keytool -exportcert -rfc -alias aarsign -file aarsign-public.pem -keystore aarsign.keystore -storepass mypassword -v
Run Code Online (Sandbox Code Playgroud)

创建包含证书的密钥库:

keytool -importcert -alias aarsign -file aarsign-public.pem -keystore aarsign-public.keystore -storepass mypassword -v
Run Code Online (Sandbox Code Playgroud)

签署图书馆:

jarsigner -keystore aarsign.keystore -storepass mypassword -keypass mypassword -signedjar lib-signed.aar -verbose lib.aar aarsign
Run Code Online (Sandbox Code Playgroud)

验证

任何希望证明库的真实性的人都需要以可靠的方式获取您的证书(或带有它的密钥库),并输入以下命令:

jarsigner -keystore aarsign-public.keystore -storepass mypassword -verify -verbose -certs lib-signed.aar aarsign
Run Code Online (Sandbox Code Playgroud)

它会传达信息

jar verified.
Run Code Online (Sandbox Code Playgroud)

有关证书过期和签名时间戳的一些警告.您可以通过创建更严格的证书来消除这些警告.请参阅keytooljarsigner文档.

有两种方法可以确定您的库是否被篡改:不匹配的摘要或不匹配的证书.如果某人aar使用不同的源代码或使用不同的资源生成,则摘要将不匹配jarsigner并将发出警告,例如:

jarsigner: java.lang.SecurityException: invalid SHA-256 signature file digest for <file>
Run Code Online (Sandbox Code Playgroud)

并且,如果某人提供的证书与您自己的证书不同,jarsigner则会发出警告:

Warning: 
This jar contains entries whose certificate chain is not validated.
This jar contains signed entries which are not signed by the specified alias(es).
This jar contains signed entries that are not signed by alias in this keystore.
Run Code Online (Sandbox Code Playgroud)

  • 将签名的AAR文件集成到父App后,如何在运行时检查AAR的签名?我设法获取父应用程序的 SHA-256,但我需要检查 AAR 文件的 SHA-256。 (3认同)