Keytool用法说明

Keytool是一个key与cert的管理工具。使用keytool可以管理public key、private key,以及与key之相关的certificate。

1、command和option说明

1.1 command

使用keytool工具时,可以使用15种命令:

1.2 option

Option是命令的参数,要了解某个命令的参数可以使用keytool –command_name –help来获取。例如:使用keytool –genkeypair –help可以查看genkeypair命令的参数说明:

这个命令中,有许多命令使用的参数是有默认值的,使用命令时可以不指定的,看看下表:

Option

默认值

-alias

“mykey”

-keyalg

“DSA” 使用-genkeypair命令时

“DES” 使用-genseckey命令时

-keysize

2048  使用 –genkeypair命令,并且-keyalg选项是”RSA”时

1024  使用 –genkeypair命令,并且-keyalg选项是”DSA”时

256   使用 –genkeypair命令,并且-keyalg选项是”EC”时

56    使用 –genseckey 命令,并且-keyalg选项是”DES”时

168   使用 –genseckey 命令,并且-keyalg选项是”DESede”时

-validity

90

-keystore

默认的的文件名是 .keystore ,是一个隐藏文件。

-storetype

默认值java.security中配置的,SUN指定的是JKS,可以人为修改

-file

如果是写,值为stout,如果是读,值为stdin

-protected

false

-sigalg

SHA1withDSA   如果生成KeyPair使用的时DSA算法

SHA256withRSA 如果生成KeyPair使用的时RSA算法

SHA256withECDSA 如果生成KeyPair使用的时EC算法

2、Commands

2.1 生成keypair并查看

genkeypair

-genkeypair
{-alias alias} {-keyalg keyalg} {-keysize keysize} {-sigalg sigalg} [-dname dname] [-keypass keypass] {-startdate value} {-ext ext}* {-validity valDays} {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}

生成KeyPair,并且生成使用X.509 v3 自签名的证书。

看下面的例子:

查看命令详情,可以使用list命令(参见下面list命令),也可以使用JAVA程序来查看。

下面是一个Java程序查看的例子:

package com.fjn.other.security;

import java.io.File;
import java.io.FileInputStream;
import java.security.Key;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.cert.Certificate;
import java.security.interfaces.DSAPrivateKey;
import java.util.Enumeration; import org.junit.Test; public class KeyPaireReader {
public void read(String file, String password) throws Exception {
FileInputStream fis = null;
fis = new FileInputStream(new File(file)); KeyStore keystore = KeyStore.getInstance("JKS");
keystore.load(fis, password.toCharArray()); System.out.println(keystore.containsAlias("mykey")); Enumeration<String> aliases=keystore.aliases();
while(aliases.hasMoreElements()){
String alias = aliases.nextElement();
String createDate = keystore.getCreationDate(alias)
.toLocaleString();
System.out.println("createDate: " + createDate);
Key key = keystore.getKey(alias, password.toCharArray());
if (key != null && key instanceof PrivateKey) {
if ("DSA".equals(key.getAlgorithm().toUpperCase())) {
DSAPrivateKey pik = (DSAPrivateKey) key;
System.out.println(pik.getX());
}
}
Certificate[] certs= keystore.getCertificateChain(alias);
for (Certificate cert : certs) {
PublicKey puk = cert.getPublicKey();
System.out.println(puk);
}
} } @Test
public void test() throws Exception {
read("D:\\keytooltest\\ca1.jks", "111111");
}
}

上面程序执行结果:

list

-list
{-alias alias} {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v | -rfc} {-protected} {-Jjavaoption}

打印出指定alias的信息,如果没有指定alias,则显示所有的。

下面的例子,就是打出了上面使用genkeypair生成的alias为mykey的key详情:

2.2 证书签名处理

这个过程涉及到3个命令:

certreq、gencert、importcert

1)机构A使用certreq生成一个证书签名请求文件(CSR certificate sign request),生成的文件就代表一个请求。

2)CA(证书认证中心)接收到这个请求后,经过处理(使用gencert),会生成一个证书或者证书链。

3)机构A接收到响应,将证书导入(importcert)到keystore中。

在说明这个处理之前,先使用genkeypair生成2个keystore文件:

keytool -genkeypair -alias ca1 -keystore D:\keytooltest\ca1.jks
keytool -genkeypair -alias ca2 -keystore D:\keytooltest\ca2.jks

certreq

把请求放到文件中:

keytool -certreq -alias ca1 -keystore D:\keytooltest\ca1.jks -file D:\keytooltest\ca1_to_ca2.req

gencert

-gencert
{-rfc} {-infile infile} {-outfile outfile} {-alias alias} {-sigalg sigalg} {-dname dname} {-startdate startdate {-ext ext}* {-validity valDays} [-keypass keypass] {-keystore keystore} [-storepass storepass] {-storetype storetype} {-providername provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}
keytool -gencert -alias ca2 -infile D:\keytooltest\ca1_to_ca2.req -outfile D:\keytooltest\ca2_to_ca1.cert -keystore D:\keytooltest\ca2.jks

importcert

官方学习资料:

http://docs.oracle.com/javase/6/docs/technotes/tools/windows/keytool.html

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/keytool.html

http://docs.oracle.com/javase/8/docs/technotes/tools/windows/keytool.html

深入了解:

http://www.ibm.com/developerworks/cn/java/j-lo-socketkeytool/index.html?ca=drs

Java Security:keytool工具使用说明的更多相关文章

  1. ssl证书与java keytool工具

    ssl协议 SSL(Secure Sockets Layer 安全套接字协议),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安 ...

  2. Java之加密(信息摘要)工具类(依赖:java.security.MessageDigest或org.apache.commons.codec.digest.DigestUtils)

    依赖于java.security.MessageDigest,支持MD5,SHA-1,SHA-256 import java.security.MessageDigest; import java.s ...

  3. AES的256位密钥加解密报 java.security.InvalidKeyException: Illegal key size or default parameters 异常的处理及处理工具

    一.出现的现象为了数据代码在传输过程中的安全,很多时候我们都会将要传输的数据进行加密,然后等对方拿到后再解密使用.我们在使用AES加解密的时候,在遇到128位密钥加解密的时候,没有进行什么特殊处理:然 ...

  4. java security

    安全性是Java应用程序的非功能性需求的重要组成部分,如同其它的非功能性需求一样,安全性很容易被开发人员所忽略.当然,对于Java EE的开发人员来说,安全性的话题可能没那么陌生,用户认证和授权可能是 ...

  5. 我是如何解决java.security.cert.CertPathValidatorException异常的

    目录 问题来了 问题分析 解决问题 重新安装服务器端证书 日志带来曙光 刨根到底 总结 附录 tomcat的SSL配置 服务器端证书配置 Keytool命令常用参数 问题来了 昨天,我还在我的工位上愉 ...

  6. tomcat配置https–采用JDK自带的keytool工具生成证书

    转自:http://blog.csdn.net/huangxinyu_it/article/details/41693633 有关http与https的区别请看<浅谈http与https的区别( ...

  7. Java&nbsp;keytool命令说明

    Java keytool命令说明 Java 中的 keytool.exe (位于 JDK\Bin 目录下)可以用来创建数字证书,所有的数字证书是以一条一条(采用别名区别)的形式存入证书库的中,证书库中 ...

  8. Keytool 工具使用

    Keytool 管理私钥仓库(keystore)和与之相关的 X.509 证书链(用以验证与私钥对应的公钥),也可以用来管理其他信任实体 keytool 将密钥和证书存储在一个所谓的密钥仓库中,缺省的 ...

  9. Atitit.项目修改补丁打包工具 使用说明

    Atitit.项目修改补丁打包工具 使用说明 1.1. 打包工具已经在群里面.打包工具.bat1 1.2. 使用方法:放在项目主目录下,执行即可1 1.3. 打包工具的原理以及要打包的项目列表1 1. ...

随机推荐

  1. 【Java每日一题】20161202

    20161201问题解析请点击今日问题下方的"[Java每日一题]20161202"查看 package Dec2016; public class Ques1202 { publ ...

  2. line-height 属性

    p.small {line-height:90%} p.big {line-height:200%}     该属性会影响行框的布局.在应用到一个块级元素时,它定义了该元素中基线之间的最小距离而不是最 ...

  3. JPA一对多循环引用的解决

    说是解决,其实不是很完美的解决的,写出来只是想记录一下这个问题或者看一下有没有哪位仁兄会的,能否知道一二. 下面说说出现问题: 问题是这样的,当我查询一个一对多的实体的时候,工具直接就爆了,差不多我就 ...

  4. First day on cnblogs,破壳日~~

    突然很想找个地方写一点文章,又想到了这个老账号:没有因长期静默被删号实在是很感动...好吧,就这样纪念一下.第一天. I suddenly wanna write something and reca ...

  5. PHP内核探索之变量(6)- 后续内核探索系列大纲备忘

    年前因为工作比较饱和,现在又忙着换工作的事情,基本停止了对博文的更新.后续的博文,还是慢慢补上吧. 为了不至于过于发散,先搞个未成形的大纲,如下: PHP内核探索之变量  不平凡的字符串 PHP内核探 ...

  6. Android填坑系列:在小米系列等机型上放开定位权限后的定位请求弹框

    背景: 近期因实际项目需要,在特定操作下触发定位请求,取到用户位置及附近位置. 问题: 经初步选型,最终决定接入百度定位,按照百度定位SDK Android文档,接入过程相对顺利.但随后发现,在小米系 ...

  7. 高性能 Windows Socket 组件 HP-Socket v2.3.1-beta-2 发布

    HP-Socket 是一套通用的高性能 Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP ...

  8. rabbitmq启动异常之error,{not_a_dets_file recovery.dets

    中午,公司群里面测试人员@笔者说,早上测试服务器异常,MQ起不来,重启os了也起不来,报错,上去看下了早上又因为内存oom被内核killed了,启动了下,确实启动报错,erl vm进程起来了,但是be ...

  9. 如何实现桌面App图标可以动态显示消息数(类似手机上的QQ图标)?

    手机上的APP , 像QQ和微信等都可以在图标上动态显示消息数(最大99) , 那么你有没有想过这些效果是如何实现的?桌面上开发的传统应用程序能否也实现类似的功能? 1 思路 桌面快捷方式的图标本质上 ...

  10. Perfect Scrollbar – 完美的 jQuery 滚动条插件

    Perfect Scrollbar 是一个很小的,但完美的 jQuery 滚动插件.滚动条不会影响原来的设计布局,滚动条的设计是完全可定制的.你可以改变几乎所有的 CSS 样式的滚动条,滚动条设计对脚 ...