如何创建密钥库?

Posted

技术标签:

【中文标题】如何创建密钥库?【英文标题】:How can I create a keystore? 【发布时间】:2011-04-29 04:55:23 【问题描述】:

android 创建密钥库的步骤是什么?

我需要在我的应用程序中使用谷歌地图,但我不知道我错过了哪些步骤。 请提供具体的详细步骤(我没有从指南中理解)。

【问题讨论】:

您是否已经做过任何事情,或者您正在寻找建议以开始使用? 这些是我完成的以下步骤:1-安装 eclipse 2- 安装 jdk 3- 安装 sdk 4- 安装 android 插件。我没有设法在win cmd中执行命令,命令:$ keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000(生成私钥)。谢谢 @user482762:CommonsWare 的回答对你有用吗?为什么你没有设法执行 win cmd? CommonsWare 的回答对我不起作用,当我尝试在 cmd 中执行命令时,我收到错误消息:“$ 未被识别为内部或外部命令、可运行程序或批处理文件”。感谢您的帮助 啊!您不想实际键入 $。在 Windows 上,当您使用命令行(cmd 应用程序)时,输入提示通常看起来像 DRIVE:/DIRECTORY>,像 "c:\" 。在 unix 上,提示通常看起来像“$”或只是“>”。命令中的“$”表示输入提示,而不是命令的一部分。尝试使用所有参数运行 keytool,不带 $。 【参考方案1】:

要回答标题中的问题,您需要使用任何标准 JDK 发行版附带的 Java Keytool 实用程序创建一个密钥库,该实用程序位于 %JAVA_HOME%\bin。在 Windows 上,这通常是 C:\Program Files\Java\jre7\bin

所以在 Windows 上,打开一个命令窗口并切换到该目录并输入这样的命令

keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000

Keytool 提示您提供密钥库的密码,提供专有名称字段,然后提供您的密钥的密码。然后它会在您所在的目录中将密钥库生成为一个名为my-release-key.keystore 的文件。密钥库和密钥受您输入的密码的保护。密钥库包含一个密钥,有效期为 10000 天。 alias_name 是您稍后将使用的名称,用于在签署您的应用程序时引用此密钥库。

有关 Keytool 的更多信息,请参阅文档:http://docs.oracle.com/javase/6/docs/technotes/tools/windows/keytool.html

有关签署 Android 应用程序的更多信息,请访问此处:http://developer.android.com/tools/publishing/app-signing.html

【讨论】:

很好地定义 -keysize 2048 而不是默认的 1024 我现在正在使用 4096 有关信息,在我的情况下,我需要使用 管理员权限 打开命令窗口 这给了我:E/TokenRequestor: 你有错误的 OAuth2 相关配置,请检查。详细错误:UNREGISTERED_ON_API_CONSOLE 我已经通过在 API 控制台中输入我的 SHA1 创建了一个凭据。 手动生成密钥库文档的直接链接:developer.android.com/studio/publish/… 我使用了这个命令来设置两个密码,这样你就可以跳过一些提示:keytool -genkey -v -keystore debug.keystore -storepass android -alias android -keypass android -keyalg RSA -keysize 2048 -validity 10000。然后生成需要放入 Firebase 的 SHA-1:keytool -list -v -keystore debug.keystore -alias android -storepass android -keypass android【参考方案2】:

在 Android Studio 中为您的应用签名

要在 Android Studio 中以发布模式签署您的应用,请按以下步骤操作:

1- 在菜单栏上,点击 Build > Generate Signed APK。


2-在“生成签名的 APK 向导”窗口中,单击“新建”以创建新的密钥库。 如果您已有密钥库,请转到第 4 步。


3- 在 New Key Store 窗口中,提供所需的信息,如图所示 您的密钥的有效期应至少为 25 年,因此您可以在应用的整个生命周期内使用相同的密钥签署应用更新。

4- 在“生成签名的 APK 向导”窗口中,选择一个密钥库、一个私钥,然后输入两者的密码。然后点击下一步。

5- 在下一个窗口中,选择已签名 APK 的目标位置,然后单击完成。

参考

http://developer.android.com/tools/publishing/app-signing.html

【讨论】:

虽然这个答案是正确的,但只有在你已经安装了 android studio 的情况下才方便。 虽然这个答案是正确的,但你甚至可以没有Build > Generate Signed Bundle/APK...!因为如果你克隆一个项目并尝试编译它,它将需要keystore.jks,但要创建keystore.jks,你必须构建gradle文件才能启用菜单!要克服这个障碍,您应该编辑build.gradle 和注释signingConfig signingConfigs.release,然后注释设置密钥库属性的行。之后同步 build.gradle 并尝试再次编译 (Ctrl+F9)。【参考方案3】:

我很想知道如何在 shell 中使用 单行命令 生成 .keystore,这样我就可以从另一个应用程序运行它。方法是这样的:

echo y | keytool -genkeypair -dname "cn=Mark Jones, ou=JavaSoft, o=Sun, c=US" -alias business -keypass kpi135 -keystore /working/android.keystore -storepass ab987c -validity 20000

dname 是 .keystore 中应用程序的唯一标识符

cn 生成 .keystore 的个人或组织的全名 ou 创建项目的组织单位,它是创建项目的组织的一个细分。前任。 android.google.com o 整个项目的组织所有者。它的范围比ou高。例如:google.com c 国家短代码。例如:对于美国是“美国”

alias 应用程序的标识符作为 .keystore 中的单个实体(可以有多个)

keypass 用于保护特定别名的密码。 keystore 创建.keystore文件的路径(标准扩展名其实是.ksstorepass 用于保护整个 .keystore 内容的密码。 有效期.keystore应用将在多少天内有效

它对我来说非常好用,它不会在控制台中要求任何其他内容,只是创建文件。如需更多信息,请参阅keytool - Key and Certificate Management Tool。

【讨论】:

我从来没有遇到过这种错误,但尝试触摸 /path/file.keystore 并使用 storepass 参数指出它。 效果很好!我唯一的改变是我使用了 Android 的扩展名 .jks jks 是一般的official keystore extension for java,但keystore 是推荐用于android apps 的一种。 @eliasbagley 这是因为上面写的命令 -storepass 在另一行开始。将所有内容写在一行上就可以了。 使用像./file.keystore 这样的相对路径可能更容易,因为在您的用户希望拥有权限的当前目录中创建它,而使用/path/file.keystore 要求您的用户具有从/ 并且 /path/ 文件夹存在。【参考方案4】:

从命令行创建密钥库文件:

    打开命令行:

    Microsoft Windows [Version 6.1.7601]
    Copyright (c) 2009 Microsoft Corporation.  All rights reserved
    
    // (if you want to store keystore file at C:/ open command line with RUN AS ADMINISTRATOR)
    
    C:\Windows\system32> keytool -genkey -v -keystore [your keystore file path]C:/index.keystore -alias [your_alias_name]index -keyalg RSA -keysize 2048 -validity 10000[in days]
    

    Enter > 会提示你输入密码 > 输入密码(不可见)

    Enter keystore password:
    Re-enter new password:
    

    Enter > 它会询问您的详细信息。

    What is your first and last name?
     [Unknown]:  AB // [Your Name / Name of Signer] 
    What is the name of your organizational unit?
     [Unknown]:  Self // [Your Unit Name] 
    What is the name of your organization?
     [Unknown]:  Self // [Your Organization Name] 
    What is the name of your City or Locality?
     [Unknown]:  INDORE // [Your City Name] 
    What is the name of your State or Province?
     [Unknown]:  MP //[Your State] 
    What is the two-letter country code for this unit?
     [Unknown]:  91
    

    输入 > 输入 Y

    Is CN=AB, OU=Self, O=Self, L=INDORE, ST=MP, C=91 correct?
    [no]:  Y
    

    Enter > 再次输入密码。

    Generating 2,048 bit RSA key pair and self-signed certificate    (SHA256withRSA) with a validity of 10,000 days
        for: CN=AB, OU=Self, O=Self, L=INDORE, ST=MP, C=91
    Enter key password for <index> (RETURN if same as keystore password):
    Re-enter new password:
    

[存储 C:/index.keystore]

    你已经完成了!!!

在 Eclipse 中导出:

使用您创建的密钥库文件将您的 android 包导出到 .apk

    右键单击要导出的包并选择导出

    选择导出 Android 应用程序 > 下一步

    下一个

    选择使用现有密钥库 > 浏览 .keystore 文件 > 输入密码 > 下一步

    选择别名 > 输入密码 > 下一步

    浏览 APK 目标 > 完成

在 Android Studio 中:

在工作室中创建密钥库[.keystore/.jks]...

    单击构建 (ALT+B) > 生成签名的 APK...

    点击新建..(ALT+C)

    浏览密钥存储路径 (SHIFT+ENTER) > 选择路径 > 输入名称 > 确定

    填写您的.jks/keystore 文件的详细信息

    下一个

    您的文件

    输入工作室主密码(不知道的可以RESET) > 确定

    选择 *目标文件夹 * > 构建类型

    release : for publish on app store
    debug : for debugging your application
    

    点击完成

完成!!!

【讨论】:

【参考方案5】:

本教程:

http://techdroid.kbeanie.com/2010/02/sign-your-android-applications-for.html

在我第一次创建密钥库时对我很有帮助。很简单,但是 developer.android.com 上的说明有点太简短了。

我不确定的部分是保存位置以及为 keystore 文件命名的名称。

我似乎把它放在哪里并不重要,只要确保它安全并保留一些备份。 我只是把它放在我的应用程序目录中

将文件命名为“something.keystore”,其中的内容可以是您想要的任何内容。我使用了 app_name.keystore,其中 app_name 是我的应用程序的名称。

下一部分是如何命名别名。再次,这似乎并不重要,所以我再次使用了 app_name。保持密码与您之前使用的相同。填写其余字段即可。

【讨论】:

这就是链接答案的问题.. :(过期【参考方案6】:

我关注this guide 创建调试密钥库。

命令是:

keytool -genkeypair -alias androiddebugkey -keypass android -keystore debug.keystore -storepass android -dname "CN=Android Debug,O=Android,C=US" -validity 9999

【讨论】:

【参考方案7】:

使用此命令创建 debug.keystore

keytool -genkey -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android -keyalg RSA -keysize 2048 -validity 10000 -dname "CN=Android Debug,O=Android,C=US"

【讨论】:

【参考方案8】:

首先要知道您是处于调试模式还是发布模式。来自开发者网站“有两种构建模式:调试模式和发布模式。您在开发和测试应用程序时使用调试模式。当您想要构建可以直接分发的应用程序的发布版本时,您可以使用发布模式向用户发布或在 Google Play 等应用市场上发布。”

如果您处于调试模式,请执行以下操作... A. 打开终端并输入:

keytool -exportcert -alias androiddebugkey -keystore path_to_debug_or_production_keystore -list -v

注意:对于 Eclipse,调试密钥库通常位于 ~/.android/debug.keystore...

B.当提示输入密码时,只需输入“android”...

C.如果您处于发布模式,请按照...上的说明进行操作

http://developer.android.com/tools/publishing/app-signing.html

【讨论】:

【参考方案9】:

您可以通过导出已签名的 APK 来创建您的密钥库。当您尝试导出/构建签名的 APK 时,它会要求提供密钥库。

您可以选择现有的密钥库,也可以通过单击创建新密钥库轻松创建一个新密钥库

这里有一个非常有用的链接,并且很好地解释了如何创建您的密钥库并生成一个签名的 APK

此链接解释了如何使用 Android Studio 进行操作,但如果我记得,它在 Eclipse 上非常相似

注意

生成密钥库后,请将其保存在安全的地方,因为您将需要它来重新生成新的签名 APK。

How do I export a project in the Android studio?

【讨论】:

【参考方案10】:

我想建议使用 gradle only

的自动方式

** 在最后一个命令中为密钥库定义至少一个附加参数,例如国家'-dname', 'c=RU' **

apply plugin: 'com.android.application'

// define here sign properties
def sPassword = 'storePassword_here'
def kAlias = 'keyAlias_here'
def kPassword = 'keyPassword_here'

android 
    ...
    signingConfigs 
        release 
            storeFile file("keystore/release.jks")
            storePassword sPassword
            keyAlias kAlias
            keyPassword kPassword
        
    
    buildTypes 
        debug 
            signingConfig signingConfigs.release
        
        release 
            shrinkResources true
            minifyEnabled true
            useProguard true
            signingConfig signingConfigs.release
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        
    
    ...


...

task generateKeystore() 
    exec 
        workingDir projectDir
        commandLine 'mkdir', '-p', 'keystore'
    
    exec 
        workingDir projectDir
        commandLine 'rm', '-f', 'keystore/release.jks'
    
    exec 
        workingDir projectDir
        commandLine 'keytool', '-genkey', '-noprompt', '-keystore', 'keystore/release.jks',
            '-alias', kAlias, '-storepass', sPassword, '-keypass', kPassword, '-dname', 'c=RU',
            '-keyalg', 'RSA', '-keysize', '2048', '-validity', '10000'
    


project.afterEvaluate 
    preBuild.dependsOn generateKeystore

这将在项目同步和构建时生成密钥库

> Task :app:generateKeystore UP-TO-DATE
> Task :app:preBuild UP-TO-DATE

【讨论】:

这些 jks 文件来自哪里,为什么每个人都表现得好像这是一个秘密 @nikoss /app/keystore/release.jks @nikoss jks 包含用于签署应用程序的私钥。所以从技术上讲,jks 不是秘密,但它确实包含秘密,所以你不希望它落入恶意之手。【参考方案11】:

基于@EliuX 的回答,与应用程序包兼容的最新工具

echo y | keytool -genkey -keystore ./android.jks -dname "n=Mark Jones, ou=JavaSoft, o=Sun, c=US" -alias android -keypass android  -storepass android -keyalg RSA -keysize 2048 -validity 2000

为你的 build.gradle

    signingConfigs 
        debug 
            storeFile file('android.jks')
            keyAlias 'android'
            keyPassword 'android'
            storePassword 'android'
        
    

【讨论】:

【参考方案12】:

如果不想或不能使用 Android Studio,可以使用 create-android-keystore NPM 工具:

$ create-android-keystore quick

这会在当前目录中生成一个新生成的密钥库。

更多信息:https://www.npmjs.com/package/create-android-keystore

【讨论】:

以上是关于如何创建密钥库?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建密钥库?

如何创建密钥库?

如何使用自签名证书创建密钥库和信任库?

如何使用keytool将证书创建到PKCS12密钥库?

如何使用 Python 创建 JKS 或 P12 密钥库

如何使用 AES 加密创建 Java 密钥库 (.jks) 文件