Java Security:keytool工具使用说明
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工具使用说明相关推荐
- JAVA利用keytool工具生成.crt和.key文件
1.生成一个名称为zhanghaiwen的证书 keytool -genkeypair -alias "zhanghaiwen" -keyalg "RSA" - ...
- 【ssl认证、证书】java中的ssl语法API说明(SSLContext)、与keytool 工具的联系
文章目录 1. 前言 java中的ssl语法与keytool 工具的联系 2. SSLContext的体系 2.1 KeyStore 2.1.1 通过证书库文件创建: 2.1.2 随机生成自签名证书库 ...
- Java安全架构____java的Keytool工具Oracle官方说明文档
keytool -密钥和证书管理工具 管理密钥的密钥存储库(数据库),X.509证书链,受信任的证书. 剧情简介 keytool[commands ] keytool命令接口已经改变了在Java SE ...
- JAVA Keytool工具生成Keystore和Truststore文件
JAVA Keytool工具生成Keystore和Truststore文件 文章目录 JAVA Keytool工具生成Keystore和Truststore文件 生成含有一个私钥的keystore文件 ...
- Java之加密工具类java.security.MessageDigest或org.apache.commons.codec.digest.DigestUtils
Java之加密(信息摘要)工具类(依赖:java.security.MessageDigest或org.apache.commons.codec.digest.DigestUtils) 1. java ...
- java生成csr_使用Keytool工具生成CSR
使用Keytool工具生成CSR 发布时间:2018-03-02 15:55:57 keytool是JDK中工具,对JDK版本要求不高,但基于现在JDK版本的安全性考虑,建议使用JDK8及以上版本 C ...
- 证书及证书管理(keytool工具实例)
一: 什么是证书?为什么要使用证书? 对数据进行签名(加密)是我们在网络中最常见的安全操作.签名有双重作用,作用一就是保证数据的完整性,证明数据并非伪造,而且在传输的过程中没有被篡改,作用二就是防止数 ...
- JAR 文件格式的强大功能(java中jar工具的使用)
大多数 Java 程序员都熟悉对 JAR 文件的基本操作.但是只有少数程序员了解 JAR 文件格式的强大功能.在本文中,作者探讨了 JAR 格式的许多功能和优势,包括打包.可执行的 JAR 文件.安全 ...
- Java Security Architecture--Java安全体系技术文档翻译(三)
返回目录 3.2 java.security.CodeSource 本类扩展了HTML中的代码库(CodeBase)的概念,不仅囊括了代码位置(URL)还包含了用于确认从该位置得到的签名代码的公钥证书 ...
最新文章
- 云+技术沙龙:计算机视觉的原理及最佳实践
- 亲近自然的加州玻璃豪宅
- DP! | 不要怂!
- 盘点:12个超炫数据可视化工具
- python 苹果李子橙_分享|苹果和它千万不能放在一起!因为它们会……
- 「Python海龟画图」利用海龟画笔绘制奥运五环
- w10桌面计算机图标箭头去除,如何让win10桌面图标箭头取消除 笔记本电脑去掉快捷小箭头软件-♚付涛纪实阁♚...
- matplotlib画圆
- 微擎模块 抖音口红机 3.2.0+wap登陆1.3.0增加首页banner跳转链接
- Processor 处理器
- Clippper模拟量输出设置
- Android BootLoader及两种刷机模式fastboot和recovery
- 撕开帝国裂缝的互联网+饮料公司——元气森林是如何做的?
- 【词汇辨析】Primary, main, prime and major “主要的、首要的”
- linux使用matlab
- 基于深度学习的印刷电路板瑕疵识别
- val什么意思vb中的属性值_VB: ByVal是什么意思
- 安全加速SCDN产品调研
- 简单python项目实例-python实战项目
- 天刀登录显示连接服务器失败ipis,天刀游戏服务器ip是什么意思