如何创建密钥库?
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文件的路径(标准扩展名其实是.ks
)
storepass 用于保护整个 .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
【讨论】:
以上是关于如何创建密钥库?的主要内容,如果未能解决你的问题,请参考以下文章