如何在Android中签名AAR Artifact ?

2020年4月18日 17点热度 0条评论

我当前正在开发.AAR android库,我想用自己的密钥对发布的 Artifact 进行签名,以便确定我是否发布了具有相同名称和功能的假aar。

通知1:

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

通知2:

我是,而不是,打算将此AAR发布到Maven,Sonatype或任何其他公共(public)存储库中。因此,我将对它进行签名,以进行典型的发布流程,例如对apk文件进行签名。

解决方案如下:

您可以使用jarsigneraar库进行签名,也可以使用keytool生成签名密钥。这两个工具都位于Android Studio随附的嵌入式JDK中。执行以下操作以签署您的媒体库。

签收

生成具有密钥对的密钥库。您需要提供证书字段:

keytool -genkeypair -alias aarsign -keypass mypassword -keystore aarsign.keystore -storepass mypassword -v

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

keytool -exportcert -rfc -alias aarsign -file aarsign-public.pem -keystore aarsign.keystore -storepass mypassword -v

创建包含证书的密钥库:

keytool -importcert -alias aarsign -file aarsign-public.pem -keystore aarsign-public.keystore -storepass mypassword -v

在库上签名:

jarsigner -keystore aarsign.keystore -storepass mypassword -keypass mypassword -signedjar lib-signed.aar -verbose lib.aar aarsign

验证中

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

jarsigner -keystore aarsign-public.keystore -storepass mypassword -verify -verbose -certs lib-signed.aar aarsign

它将给出消息

jar verified.

有关证书过期和签名时间戳的一些警告。您可以通过创建更严格的证书来摆脱这些警告。请参阅
keytool
jarsigner文档。

您可以通过两种方法查明您的库是否已被篡改:摘要不匹配或证书不匹配。如果有人从不同的源代码或使用不同的资源生成了
aar,则摘要将不匹配,并且
jarsigner将发出警告,例如:

jarsigner: java.lang.SecurityException: invalid SHA-256 signature file digest for <file>

而且,如果某人提供的证书与您的证书不同,
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.