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);}}}@Testpublic void test() throws Exception {read("D:\\keytooltest\\ca1.jks", "111111");}
}

View Code

上面程序执行结果:

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. JAVA利用keytool工具生成.crt和.key文件

    1.生成一个名称为zhanghaiwen的证书 keytool -genkeypair -alias "zhanghaiwen" -keyalg "RSA" - ...

  2. 【ssl认证、证书】java中的ssl语法API说明(SSLContext)、与keytool 工具的联系

    文章目录 1. 前言 java中的ssl语法与keytool 工具的联系 2. SSLContext的体系 2.1 KeyStore 2.1.1 通过证书库文件创建: 2.1.2 随机生成自签名证书库 ...

  3. Java安全架构____java的Keytool工具Oracle官方说明文档

    keytool -密钥和证书管理工具 管理密钥的密钥存储库(数据库),X.509证书链,受信任的证书. 剧情简介 keytool[commands ] keytool命令接口已经改变了在Java SE ...

  4. JAVA Keytool工具生成Keystore和Truststore文件

    JAVA Keytool工具生成Keystore和Truststore文件 文章目录 JAVA Keytool工具生成Keystore和Truststore文件 生成含有一个私钥的keystore文件 ...

  5. Java之加密工具类java.security.MessageDigest或org.apache.commons.codec.digest.DigestUtils

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

  6. java生成csr_使用Keytool工具生成CSR

    使用Keytool工具生成CSR 发布时间:2018-03-02 15:55:57 keytool是JDK中工具,对JDK版本要求不高,但基于现在JDK版本的安全性考虑,建议使用JDK8及以上版本 C ...

  7. 证书及证书管理(keytool工具实例)

    一: 什么是证书?为什么要使用证书? 对数据进行签名(加密)是我们在网络中最常见的安全操作.签名有双重作用,作用一就是保证数据的完整性,证明数据并非伪造,而且在传输的过程中没有被篡改,作用二就是防止数 ...

  8. JAR 文件格式的强大功能(java中jar工具的使用)

    大多数 Java 程序员都熟悉对 JAR 文件的基本操作.但是只有少数程序员了解 JAR 文件格式的强大功能.在本文中,作者探讨了 JAR 格式的许多功能和优势,包括打包.可执行的 JAR 文件.安全 ...

  9. Java Security Architecture--Java安全体系技术文档翻译(三)

    返回目录 3.2 java.security.CodeSource 本类扩展了HTML中的代码库(CodeBase)的概念,不仅囊括了代码位置(URL)还包含了用于确认从该位置得到的签名代码的公钥证书 ...

最新文章

  1. 云+技术沙龙:计算机视觉的原理及最佳实践
  2. 亲近自然的加州玻璃豪宅
  3. DP! | 不要怂!
  4. 盘点:12个超炫数据可视化工具
  5. python 苹果李子橙_分享|苹果和它千万不能放在一起!因为它们会……
  6. 「Python海龟画图」利用海龟画笔绘制奥运五环
  7. w10桌面计算机图标箭头去除,如何让win10桌面图标箭头取消除 笔记本电脑去掉快捷小箭头软件-♚付涛纪实阁♚...
  8. matplotlib画圆
  9. 微擎模块 抖音口红机 3.2.0+wap登陆1.3.0增加首页banner跳转链接
  10. Processor 处理器
  11. Clippper模拟量输出设置
  12. Android BootLoader及两种刷机模式fastboot和recovery
  13. 撕开帝国裂缝的互联网+饮料公司——元气森林是如何做的?
  14. 【词汇辨析】Primary, main, prime and major “主要的、首要的”
  15. linux使用matlab
  16. 基于深度学习的印刷电路板瑕疵识别
  17. val什么意思vb中的属性值_VB: ByVal是什么意思
  18. 安全加速SCDN产品调研
  19. 简单python项目实例-python实战项目
  20. 天刀登录显示连接服务器失败ipis,天刀游戏服务器ip是什么意思

热门文章

  1. ORM-Dapper:Dapper百科
  2. 对学校公开课信息网站一次渗透测试
  3. DOMContentLoaded与load的区别
  4. IDEA中MAVEN项目打JAR包的简单方法
  5. JSPServlet学习手册
  6. 路径输入mac下配置NDK开发环境
  7. keygen基本流程
  8. 关于jQuery在Asp.Net Mvc 框架下Ajax文件上传的实现
  9. 华为手机 android8.0APP更新时出现安装包解析异常的提示及安装闪退(无反应)问题
  10. Thinkpad T420 指纹开机 win10 解决方案