android 保障密钥的安全 keystore.properties

01/07 15:31
阅读数 262

保障密钥的安全

如果您选择自行管理和保护自己的应用签名密钥和密钥库(而不是选择加入 Google Play 应用签名计划),则保障应用签名密钥的安全对于您和用户而言都非常重要。如果您允许某人使用您的密钥,或者将您的密钥库和密码放在了不安全的地方,以致于第三方可以找到和使用相应信息,则会损害您的作者身份和用户对您的信任。

注意:如果您使用 Google Play 应用签名,则 Google 的基础架构会保障您的应用签名密钥的安全。您还应按下述方式保障上传密钥的安全。如果您的上传密钥被盗,您可以与 Google 联系以撤消此密钥,然后您将收到新的上传密钥。

如果某个第三方在您不知情或未经授权的情况下设法取得您的密钥,此人可能会为应用签名并进行分发,从而恶意替换您的原版应用或损坏它们。另外,此人还可能利用您的身份为应用签名并进行分发,从而攻击其他应用或系统本身,或者损坏或窃取用户数据。

您应用的所有将来版本都需要使用您的私钥签名。如果密钥丢失或存放不当,您将无法发布现有应用的更新。您无法重新生成以前生成的密钥。

您作为开发者实体的声誉取决于您能否每时每刻正确保护您的应用签名密钥,直至密钥过期。以下是有关如何保障密钥安全的一些提示:

  • 为密钥库和密钥选择安全系数高的密码。
  • 请勿将您的私钥赠与或借给任何人,也不要让未经授权的人员知道您的密钥库和密钥密码。
  • 将包含私钥的密钥库文件存放在安全可靠的地方。

通常情况下,只要您在生成、使用和存储密钥时遵循通用的注意事项,就可以保障密钥的安全。

从编译文件中移除签名信息

在您创建签名配置时,Android Studio 会以纯文本形式将您的签名信息添加到模块的 build.gradle 文件中。如果您通过团队协作开发项目或者要将您的代码开源,那么您应该将此敏感信息从编译文件中移出,以免被其他人轻易获取。为此,您应该创建一个单独的属性文件来存储安全信息并在您的编译文件中引用此文件,具体步骤如下所示:

  1. 创建一个签名配置,并将其分配到一个或多个编译类型。这些说明假设您已经按照上面配置编译流程以自动为应用签名部分所述,为发布版本类型配置了一个签名配置。(你的签名配置文件比如叫:testApp.jks文件放在app文件夹下)
  2. 在项目的根目录下创建一个名为 keystore.properties 的文件。此文件应该包含您的签名信息,具体代码如下所示:
    storePassword=myStorePassword
        keyPassword=mykeyPassword
        keyAlias=myKeyAlias
        storeFile=testApp.jks   //这个地方的路径如果是在app下的,那么前面就什么路径都不需要再添加了

     

  3. 在模块的 build.gradle 文件中,在 android {} 块的前面添加用于加载 keystore.properties 文件的代码。
        ...
    
        // Create a variable called keystorePropertiesFile, and initialize it to your
        // keystore.properties file, in the rootProject folder.
        def keystorePropertiesFile = rootProject.file("keystore.properties")
    
        // Initialize a new Properties() object called keystoreProperties.
        def keystoreProperties = new Properties()
    
        // Load your keystore.properties file into the keystoreProperties object.
        keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
    
        android {
            ...
        }
    
       

     

    注意:您可以选择将 keystore.properties 文件存储在其他位置(例如,存储在模块文件夹中而不是项目的根文件夹中,或者如果您使用持续集成工具,也可以存储在编译服务器上)。在这种情况下,您应该修改上面的代码,以使用实际的 keystore.properties 文件的位置正确初始化 keystorePropertiesFile

  4. 您可以使用语法 keystoreProperties['propertyName'] 引用存储在 keystoreProperties 中的属性。修改模块的 build.gradle 文件的 signingConfigs 块,以便使用此语法引用存储在 keystoreProperties 中的签名信息。
        android {
            signingConfigs {
                config {
                    keyAlias keystoreProperties['keyAlias']
                    keyPassword keystoreProperties['keyPassword']
                    storeFile file(keystoreProperties['storeFile'])
                    storePassword keystoreProperties['storePassword']
                }
            }
            ...
          }
       

     

  5. 打开 Build Variants 工具窗口,并确保已选择发布版本类型。
  6. 选择 Build > Build Bundle(s) / APK(s) 下的选项,编译您的发布版本的 APK 或 app bundle。您应该会在模块的 build/outputs/ 目录中看到相应编译输出。

由于您的编译文件不再包含敏感信息,您现在可以将其包含在源代码控制系统中或者上传到共享的代码库。请务必保障 keystore.properties 文件的安全。您可能需要将其从您的源代码控制系统中移除。

展开阅读全文
打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部