JDK中keytool常用命令

本文详细介绍了如何使用keytool生成数字证书,包括创建证书、导出证书、查看证书信息、删除证书条目和修改证书条目口令等操作。重点强调了证书创建过程中的关键信息填写和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-genkey      在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书
-alias       产生别名
-keystore    指定密钥库的名称(产生的各类信息将不在.keystore文件中
-keyalg      指定密钥的算法   
-validity    指定创建的证书有效期多少天
-keysize     指定密钥长度
-storepass   指定密钥库的密码
-keypass     指定别名条目的密码
-dname       指定证书拥有者信息 例如:  "CN=sagely,OU=atr,O=szu,L=sz,ST=gd,C=cn"
-list        显示密钥库中的证书信息      keytool -list -v -keystore sage -storepass ....
-v           显示密钥库中的证书详细信息
-export      将别名指定的证书导出到文件  keytool -export -alias caroot -file caroot.crt
-file        参数指定导出到文件的文件名
-delete      删除密钥库中某条目          keytool -delete -alias sage -keystore sage
-keypasswd   修改密钥库中指定条目口令    keytool -keypasswd -alias sage -keypass .... -new .... -storepass ... -keystore sage
-import      将已签名数字证书导入密钥库  keytool -import -alias sage -keystore sagely -file sagely.crt
             导入已签名数字证书用keytool -list -v 以后可以明显发现多了认证链长度,并且把整个CA链全部打印出来。

------------------------------------------------------------------------------------------------

keytool JAVA是个密钥和证书管理工具。它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务。它还允许用户储存他们的通信对等者的公钥(以证书形式)。通过keytool –help查看其用法,详细信息可以参考http: //java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/keytool.html

创建证书Java 中的 keytool.exe (位于 JDK/Bin 目录下)可以用来创建数字证书,所有的数字证书是以一条一条(采用别名区别)的形式存入证书库的中,证书库中的一条证书包含该条证书的私钥,公钥和对应的数字证书的信息。证书库中的一条证书可以导出数字证书文件,数字证书文件只包括主体信息和对应的公钥。
每一个证书库是一个文件组成,它有访问密码,在首次创建时,它会自动生成证书库,并要求指定访问证书库的密码。
在创建证书的的时候,需要填写证书的一些信息和证书对应的私钥密码。这些信息包括 CN=xx,OU=xx,O=xx,L=xx,ST=xx,C=xx,它们的意思是:
? CN(Common Name - 名字与姓氏):其实这个“名字与姓氏”应该是域名,比如说localhost或是blog.devep.net之类的。输成了姓名,和真正运行的时候域名不符,会出问题。浏览器访问时,弹出一个对话框,提示“安全证书上的名称无效,或者与站点名称不匹配”,用户选择继续还是可以浏览网页。但是用http client写程序访问的时候,会抛出类似于“javax.servlet.ServletException: HTTPS hostname wrong: should be ”的异常。
? OU(Organization Unit - 组织单位名称)
? O(Organization - 组织名称)
? L(Locality - 城市或区域名称)
? ST(State - 州或省份名称)
? C(Country - 国家名称)
可以采用交互式让工具提示输入以上信息,也可以采用参数,如:-dname “CN=xx,OU=xx,O=xx,L=xx,ST=xx,C=xx”来自动创建。

创建一个证书
指定证书库为 D:/keystore/test,创建别名为 Tomcat 的一条证书,它指定用 RSA 算法生成,且指定密钥长度为 1024,证书有效期为 1 年:
keytool -genkey -alias Tomcat -keyalg RSA -keysize 1024 -keystore C:/keystore/test -validity 365
显示证书库中的证书使用如下命令: keytool -list -keystore C:/keystore/test 将显示 C:/keystore/test 证书库的的所有证书列表

导出到证书文件
使用命令:keytool -export -alias Tomcat -file C:/keystore/TC.cer -keystore C:/keystore/test 将把证书库C:/keystore/test 中的别名为 Tomcat 的证书导出到 TC.cer 证书文件中,它包含证书主体的信息及证书的公钥,不包括私钥,可以公开。
导出的证书文件是以二进制编码文件,无法用文本编辑器正确显示,可以加上 -rfc参数以一种可打印的编者编码输出。 如:
keytool -export -alias Tomcat -file C:/keystore/TC.cer -keystore C:/keystore/test –rfc

查看证书的信息
通过命令: keytool -printcert -file D:/keystore/TC.cer 可以查看证书文件的信息。 也可以在 Windows 资源管理器中双击产生的证书文件直接查看。

删除密钥库中的条目
keytool -delete -alias Tomcat -keystore C:/keystore/test
这条命令将 C:/keystore/test 库中的 Tomcat 这一条证书删除了。

修改证书条目口令
keytool -keypasswd -alias Tomcat -keystore C:/keystore/test,可以以交互的方式修改 C:/keystore/test 证书库中的条目为 Tomcat 的证书。
Keytool -keypasswd -alias Tomcat -keypass oldpasswd -new newpasswd -storepass storepasswd -keystore C:/keystore/test 这一行命令以非交互式的方式修改库中别名为 Tomcat 的证书的密码为新密码 newpasswd,行中的 oldpasswd 是指该条证书的原密码, storepasswd 是指证书库的密码。






示例:

E:\Projects\cybercare.cn\trunk\android\ks2>keytool -genkey -keystore ks2.keystor
e -keyalg RSA -validity 10000 -alias ks2.keystore
输入keystore密码:
您的名字与姓氏是什么?
  [Unknown]:  www.cybercare.cn
您的组织单位名称是什么?
  [Unknown]:  Cybercare
您的组织名称是什么?
  [Unknown]:  津驰速信
您所在的城市或区域名称是什么?
  [Unknown]:  北京
您所在的州或省份名称是什么?
  [Unknown]:  北京
该单位的两字母国家代码是什么
  [Unknown]:  CN
CN=www.cybercare.cn, OU=Cybercare, O=津驰速信, L=北京, ST=北京, C=CN 正确吗?
  [否]:  y

输入<ks2.keystore>的主密码
        (如果和 keystore 密码相同,按回车):
再次输入新密码:

E:\Projects\cybercare.cn\trunk\android\ks2>

命令参数说明:

-genkey    产生证书文件
-keystore  指定密钥库的.keystore文件中

-keyalg     指定密钥的算法

-validity    为证书有效天数,这里我们写的是10000天。
-alias       产生别名

在输入密码时没有回显,只管输入就可以了,一般位数建议使用20位,切忌需要记下来后面还要用,

注意:

1、CN(Common Name - 名字与姓氏):其实这个“名字与姓氏”应该是域名,比如说localhost或是blog.devep.net之类的。输成了姓名,和真正运行的时候域名不符,会出问题。浏览器访问时,弹出一个对话框,提示“安全证书上的名称无效,或者与站点名称不匹配”,用户选择继续还是可以浏览网页。但是用http client写程序访问的时候,会抛出类似于“javax.servlet.ServletException: HTTPS hostname wrong: should be ”的异常。

2、在用keytool生成数字证书时必须保证:-keystore androidapp.keystore -alias androidapp.keystore 两者名称必须相同。否则下一步签名时会出现错误:jarsigner: 找不到 androidapp.keystore 的证书链。androidapp.keystore 必须引用包含专用密钥和相应的公共密钥证书链的有效密钥库密钥条目。


原文网址:

http://www.cnblogs.com/ghj1976/archive/2011/07/18/2109381.html

http://www.cnblogs.com/kungfupanda/archive/2010/09/01/1815047.html


`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、付费专栏及课程。

余额充值