keytool 使用说明

本文内容只是一个简单的笔记,内容主要来自于 man keytool 命令

Android 开发中,需要对应用进行签名,一般签名信息存储在一个 keystore 文件中,这个文件可以用 keytool 进行读写。以下介绍 keystore 的常见用法。
keytool 用于管理 keystore 文件,keystore 文件可以理解为是一个加密的用于存储证书的数据库,里面用于存储各类证书,每个证书由 alias 区分,并且有自己单独的密码。

  • keystore 生成
  • keystore 查看
  • keystore 密码修改
  • alias 修改
  • keystore 格式转换
  • alias 密码修改
  • key 归集
  • 删除 key
  • CA 认证
  • CA 生成证书
  • 查看 cer
  • cer 存入 keystore

使用 keytool 命令过程中,有一些可选参数,参数默认值如下:

参数默认值描述
-keystore${USER_HOME}/.keystorekeystore 文件路径
-storepass-keystore 文件密码,默认从终端读取
-keypass-alias 密码
-validity90证书有效期,天

key 生成

# 生成名为 tmp.keystore 的 keystore 文件
keytool -genkeypair -keystore tmp.keystore -alias tmp \
-dname "CN=tmp.com,O=tmp" -keyalg RSA \
-keysize 2048 -storepass changeme -keypass changeme

key 查看

# 查看 tmp.keystore 中所有证书
keytool -list -keystore tmp.keystore -v
# 查看 tmp.keystore 中别名为 tmp 的证书
keytool -list -keystore tmp.keystore -v -alias tmp
# 查看 tmp.keystore 中别名为 tmp 的证书,密码为 changeme
keytool -list -keystore tmp.keystore -v -alias tmp -storepass changeme

keystore 密码修改

# 修改密码,需要在终端输入一次旧密码,两次新密码
keytool -storepasswd -keystore tmp.keystore
# 修改密码,changme -> changeme1
keytool -storepasswd -new changemex -keystore tmp.keystore -storepass changeme

alias 修改

keytool -changealias -keystore tmp.keystore -alias tmp -destalias tmp2 -storepass changemex

keystore 格式转换

# 将 tmp.keystore 的证书导入到新的类型为 jks 的 new.keystore 中
keytool -importkeystore -srckeystore tmp.keystore -destkeystore new.keystore -deststoretype jks

alias 密码修改

# 不支持 PKCS12 类型的修改,如果需要修改 PKCS12 类型,请参考前面的导入部分修改 keystore 类型
keytool -keypasswd -keystore new.keystore -alias tmp2 -storepass changemex -keypass changeme -new newkeypw

key 归集

# 将 tmp.keystore 中的 tmp2 导入到 new.keystore 中
keytool -importkeystore \
-srckeystore tmp.keystore -srcstoretype PKCS12 -srcstorepass changemex \
-keystore new.keystore -storepass changeme -deststoretype JKS \
 -srcalias tmp2 -destalias key1

删除 key

# 删除 tmp.keystore 中名为 tmp2 的证书
keytool -delete -alias tmp2 -keystore tmp.keystore

申请 CA 认证

keytool -certreq -alias key1 -keystore new.keystore -storepass changeme | tee key.certreq

CA 生成证书

# cer
keytool -gencert -keystore new.keystore -alias key1 -infile key.certreq -outfile key.cer -validity 3650 -storepass changeme
# pem
keytool -gencert -keystore new.keystore -alias key1 -infile key.certreq -outfile key.pem -rfc -validity 3650 -storepass changeme

查看 cer

keytool -printcert -v -file key.cer

cer 加入 keystore

keytool -importcert -alias key_cer -file key.cer
`keytool` 是 Java 自带的一个命令行工具,通常用于生成密钥对、证书请求和管理 keystore(密钥库)。在 Android 开发中,我们常用它来生成签名密钥文件(`.jks` 或 `.keystore`),以便对 APK 或 AAB 文件进行签名。 --- ### 使用 `keytool` 命令的环境 #### 1. **在命令行或终端中使用** `keytool` 是 JDK 的一部分,因此你需要确保系统已经安装了 JDK,并且 `keytool` 命令可以在命令行中访问。 - **Windows 用户**: 打开命令提示符(Command Prompt)或 PowerShell。 - **macOS/Linux 用户**: 打开终端(Terminal)。 你可以通过以下命令检查是否已正确安装 `keytool`: ```bash keytool -version ``` 如果显示类似以下内容,则说明 `keytool` 已经安装成功: ``` Keytool version "1.8.0_281" ``` --- ### 如何使用 `keytool` 命令生成密钥? 以下是生成密钥的完整命令: ```bash keytool -genkeypair -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-key-alias ``` **参数详解:** - `-genkeypair`: 生成一个密钥对(公钥和私钥)。 - `-v`: 显示详细信息。 - `-keystore my-release-key.jks`: 指定生成的密钥库文件名(例如 `my-release-key.jks`)。 - `-keyalg RSA`: 指定密钥算法为 RSA。 - `-keysize 2048`: 指定密钥长度为 2048 位(推荐值)。 - `-validity 10000`: 指定密钥的有效期为 10000 天。 - `-alias my-key-alias`: 指定密钥的别名。 运行上述命令后,系统会提示你输入相关信息,例如: 1. **Keystore 密码 (`storePassword`)**: 设置密钥库的密码。 2. **个人信息**: - 你的姓名或组织名称。 - 组织单位名称。 - 城市或地区。 - 国家/地区代码(如 CN 表示中国)。 3. **密钥密码 (`keyPassword`)**: 设置密钥的密码(可以与密钥库密码相同)。 完成后,你会在当前目录下看到一个名为 `my-release-key.jks` 的文件。 --- ### 示例代码解释 上述命令的作用是生成一个 `.jks` 格式的密钥文件。这个文件包含了用于签署 APK 或 AAB 的私钥和证书链。生成的密钥文件需要妥善保管,因为如果你丢失了它,将无法更新已发布的应用。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值