keytool使用笔记

keytool是java管理秘钥和证书的命令行工具。
配置https服务器,以及给java web start应用做数字签名时都会用到它。

keystore:
java把秘钥和证书都存储在秘钥库(keystore)里。
keystore是一个磁盘文件,默认的keystore存放在用户的home文件夹里的.keystore。
也可以通过keytool的-keystore参数来指定keystore文件。
访问keystore需要用户输入密码(以前版本的java默认密码是changeit)。
可以通过-storepass提供密码。创建keystore时会要求用户设置密码。

alias:
秘钥库中的所有条目(秘钥及证书)都有一个别名,必须通过别名来访问条目。
别名不区分大小写。通过-alias参数指定别名。
上面说过秘钥库有访问密码,而每一个别名也可以设置自己的访问密码。
当需要操作私钥(比如-certreq)时,需要提供此别名的密码。通过-keypass来指定。
(-list,-delete都不需要keypass)


在下面的示例中,会创建一个x509自签名的CA证书,
然后创建一个https服务器证书,并用这个CA证书来给服务器证书做数字签名。
只要在客户端把CA证书导入到【受信任的根证书颁发机构】中,这样一来,
访问https服务器时,浏览器就会认为服务器是可信任的了。

(各版本java中,参数可能不太一样。下面命令运行在java1.8版本上;
示例中为了方便,把密码都写在命令行上了,实际应用中应该避免。)

# 创建CA证书
#   -genkeypair会生成x509自签名证书,注意用-validity设置有效期,
#   另外,需要-ext bc:c来标明这是一个CA证书。
#   -ext的详细说明参见
keytool -genkeypair -keystore mystore.jks -storepass 123456 -alias myca -validity 365 -dname CN=ca,C=cn -ext bc:c

# 查看keystore中,有了一条myca的条目。
keytool -list -keystore mystore.jks -storepass 123456

# 导出ca证书
keytool -exportcert -keystore mystore.jks -storepass 123456 -alias myca -rfc -file myca.cer


# 创建server证书
#   -dname中的CN应该是服务器的域名.
keytool -genkeypair -keystore mystore.jks -storepass 123456 -alias server -keypass sv123456 -validity 365 -dname CN=127.0.0.1,C=cn -ext ku:c=dig,keyE -ext eku=serverAuth


# 生成证书请求
keytool -certreq -keystore mystore.jks -storepass 123456 -alias server -keypass sv123456 -file server.csr


# 用CA证书签署server证书请求
#   还需要-ext ku:c=dig,keyE指定用途为digitalSignature,keyEncipherment
#   还需要-ext eku=serverAuth指定用途为serverAuth
keytool -gencert -keystore mystore.jks -storepass 123456 -alias myca -keypass 123456 -infile server.csr -outfile server.cer -ext ku:c=dig,keyE -ext eku=serverAuth


# 导入CA签署的server证书
#    需要先把ca证书导入到自己的库中使其成为信任证书,
#    否则会报错:keytool 错误: java.lang.Exception: 无法从回复中建立链
keytool -importcert -keystore mystore.jks -storepass 123456 -alias server -keypass sv123456 -file server.cer


下面示例创建了一个root证书,用于代码签名。

# 签署jar文件。用于java web start应用。
jarsigner -keystore mystore.jks -storepass 123456 log4j-1.2.17.jar root -keypass rt123456
# 加时间戳
jarsigner -keystore mystore.jks -storepass 123456 log4j-1.2.17.jar root -keypass rt123456 -tsa


补充,keytool的其他功能:

-printcert          打印证书内容(可以打印证书文件,或签名的jar文件,或https服务器的证书信息)

  1. keytool -printcert -file root.cer
  2. keytool -printcert -jarfile log4j-1.2.17.jar
  3. keytool -printcert -sslserver
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值