数字证书KeyTool使用(第二篇)
http://my.oschina.net/frankies/blog/344914
J2SDK提供了keytool命令行工具,可以根据指定的参数来创建数字证书。生成的证书或证书库默认保存在命令行当前目录下。
1. 创建数字证书
1
|
keytool -genkey - v - alias scent -dname "CN=John,OU=MNG,O=Corp,L=Hangzhou,ST=Zhejiang,C=CN" -keyalg RSA -keysize 2048 -keypass 123456 -keystore prospectlib -storepass 123456 -storetype JCEKS -validity 900
|
注:-genkey可以写成-genkeypair
dname的值详解:
CN(Common Name名字与姓氏)
OU(Organization Unit组织单位名称)
O(Organization组织名称)
L(Locality城市或区域名称)
ST(State州或省份名称)
C(Country国家名称)
2. 查看证书库中的所有数字证书
1
|
keytool -list -rfc -keystore prospectlib -storepass 123456 -storetype JCEKS
|
注:如果证书库是非默认storetype,需要明确指定。(JKS--默认,JCEKS, PKCS12 and PKCS11)
JDK 已有的加密算法
JDK中不同的Keystore类型
3. 查看证书详细
1
|
keytool -list - v - alias scent -keystore prospectlib -storepass 123456 -storetype JCEKS
|
注:如果证书是非默认storetype,需要明确指定。
4. 导入证书
1
|
keytool - import - v -trustcacerts - alias scent - file scent.cer -keypass 123456 -keystore prospectlib -storepass 123456
|
注:
-import可以写成-importcert
-trustcacerts和-v 可以不写,效果一样
5. 导出证书
1
|
keytool - export - alias scent - file scent.cer -keystore prospectlib -storepass 123456
|
注:-export可以写成-exportcert
6. 删除证书
1
|
keytool -delete - alias scent -keystore prospectlib -storepass 123456 -storetype JCEKS
|
注:如果证书是非默认storetype,需要明确指定。
7. 生成证书签名申请
1
|
keytool -certreq - alias scent -sigalg "MD5withRSA" - file scent.csr -keypass 123456 -keystore cacerts.jks -storepass 123456
|
注:将生成的scent.scr文件发给CA机构来申请签名。
8. 显示证书
1
|
keytool -printcert - v - file scent.cer
|
9. 更改证书别名
1
|
keytool -changealias - v - alias scent -destalias perfume -keystore prospectlib -storepass 123456
|
10. 导入证书库
1
|
keytool -importkeystore - v -srckeystore prospectlib -srcstoretype JKS -srcstorepass 123456 -destkeystore intrinsic -deststoretype JKS -deststorepass 123456 -srcalias terrific prospect -destalias terrific prospect
|
注:如果不提供-srcalias, -destalias,则会将源库的所有证书导入到目标库中。
11. 修改证书密码
1
|
keytool -keypasswd - alias brilliant -keystore range -storepass 123456 -keypass 123456 -new 654321
|
注:如果不提供-keypass,系统会提示你输入新密码。
12. 修改证书库密码
1
|
keytool -storepasswd - v -new 654321 -keystore range -storepass 123456 -storetype JKS
|
参数详解:
-dname "CN=xx,OU=xx,O=xx,L=xx,ST=xx,C=xx" dn名为"CN=..."
-alias scent 别名为scent的一个证书
-keyalg
DSA RSA DSA或RSA算法(当使用-genkeypair参数)
DES DESede AES DES或DESede或AES算法(当使用-genseckey参数)
-keysize
512 ~ 1024 密钥的长度为512至1024之间(64的倍数)(当使用-genkeypair和-keyalg DSA参数)
> 512 密钥的长度大于512 (当使用-genkeypair和-keyalg RSA参数)
56 密钥的长度为56 (当使用-genseckey和-keyalg DES 参数)
112 168 密钥长度为112或168(当使用-genseckey和-keyalg DESede 参数)
128 192 256 密钥长度为128或192或256 (当使用-genseckey和-keyalg AES 参数)
-keypass 123456 这个证书的私钥密码为123456
-keystore prospectlib 证书库的名称为prospectlib
-storepass 123456 证书库的访问密码为123456
-validity 900 证书有效期为900天
-file scent.cer 从scent.cer文件导入证书,或者导出证书到scent.cer文件
-v 显示详细信息
-rfc 以Base64的编码格式打印证书
-storetype JCEKS 密钥库的类型为JCEKS。常用的有JKS(默认),JCEKS(推荐),PKCS12,BKS,UBER。每个密钥库只可以是其中一种类型。
13、导出私钥的方法(通过Java实现)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
import java.io.FileInputStream; import java.security.Key;
import java.security.KeyStore; //import sun.misc.BASE64Encoder;import org.apache.commons.codec.binary.Base64;
public class DumpPrivateKey {
/**
* Provides the missing functionality of keytool
* that Apache needs for SSLCertificateKeyFile.
*
* @param args <ul>
* <li> [0] Keystore filename.
* <li> [1] Keystore password.
* <li> [2] alias
* <li> [3] Store type (optional)
* </ul>
*/
static public void main(String[] args)
throws Exception {
if (args.length < 3 ) {
throw new IllegalArgumentException( "expected args: Keystore filename, Keystore password, al ias, [store type] <key password: default same than keystore" );
}
final String keystoreName = args[ 0 ];
final String keystorePassword = args[ 1 ];
final String alias = args[ 2 ];
final String storeType = (args.length> 3 ) ? args[ 3 ] : "jks" ; //Default type is 'jks'
final String keyPassword = getKeyPassword(args,keystorePassword);
KeyStore ks = KeyStore.getInstance(storeType );
ks.load( new FileInputStream(keystoreName), keystorePassword.toCharArray());
Key key = ks.getKey(alias, keyPassword.toCharArray());
//String b64 = new BASE64Encoder().encode(key.getEncoded());
String b64 = new String(Base64.encodeBase64(key.getEncoded(), true ));
System.out.println( "-----BEGIN PRIVATE KEY-----" );
System.out.println(b64);
System.out.println( "-----END PRIVATE KEY-----" );
}
private static String getKeyPassword( final String[] args, final String keystorePassword)
{
String keyPassword = keystorePassword; // default case
if (args.length == 4 ) {
keyPassword = args[ 3 ];
}
return keyPassword;
}}
|
说明:
(1) 命令运行:
1
|
java -classpath .:commons-codec-1.4 /commons-codec-1 .4.jar DumpPrivateKey $HOME/.keystore changeit tomcat
|
(2) 参数说明:
第一个参数:Key store 文件的存放目录
第二个参数:Key store 的访问密码
第三个参数: 导出的私钥别名。
第四个参数(可选): 导出的私钥别名。
数字证书KeyTool使用(第二篇)相关推荐
- 数字证书应用综合揭秘(包括证书生成、加密、解密、签名、验签)
引言 数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件.为现实网络安全化标准如今大部分的 B2B.B2C.P2P.O2O 等商业网站含有重要企业资料个人资料的信息资信网站 ...
- 数字证书 - Java加密与安全
数字证书我们在前面看到了一些计算机密码学的一些算法1. 摘要算法确保数据没有被篡改2. 非对称加密就是对数据进行加解密3. 数据签名可以确保数据完整性和抗否认性而数字证书就是集合了多种密码学算法,用于 ...
- Java加密与解密的艺术~数字证书~证书管理
证书管理 keytool命令 echo 生成本地数字证书1 keytool -genkeypair -keyalg RSA -keysize 2048 -sigalg SHA1withRSA -val ...
- SM2算法第十二篇:数字证书原理
出处:http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html 作者:无恙 完美的逻辑,简直碉堡了.学习学习,,,尊重原创,热 ...
- 数字证书、签名到底是什么?这篇文章讲得太好了
前段时间整理了关于数字证书和数字签名的一些内容,今天整理一下发出来. 我们都知道 HTTP 协议都是明文传输内容,为了保证数据传输的安全,HTTPS 协议就应运而生了,但它其实并不是一个全新的协议,而 ...
- 数字证书中keytool命令使用说明
这个命令一般在JDK\jre\lib\security\目录下操作 keytool常用命令 -alias 产生别名 -keystore 指定密钥库的名称(就像数据库一样的证书库,可以 ...
- Keytool生成数字证书 + Tomcat https 配置
参考:http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html https://baike.baidu.com/item/ht ...
- 利用keytool工具生成数字证书
一.制作数字证书 因测试微信小程序, 腾讯要求使用 https协议,所以需要使用证书.使用jdk工具制作数字证书流程如下: 1.查看JDK是否安装,使用命令java -version 2.切换目录至 ...
- 数字证书、数字签名的实现使用以及keytool工具生成私钥公钥
数字证书.数字签名的实现使用以及keytool工具生成私钥公钥 数字签名 数字证书 数字签名的实现 keytool工具 基本命令 生成私钥公钥 导出公钥 数字签名 数字签名(又称公钥数字签名)是只有信 ...
最新文章
- 获取服务(getService)
- 单片机sleep函数的头文件_单片机学习day8—单片机IO扩展
- Python分页组件
- MSTP技术支撑大客户专线——Vecloud
- Android --- PagerAdapter的使用方法详细讲解
- 他们为什么融资上市?因为用好了……
- 不知道自己是否适合做产品经理
- JavaScript之路(3)JavaScript的函数
- 深度学习2.0-32.经典卷积网络VGG,GoogleNet,Inception-1
- UnicodeEncodeError: #39;ascii#39; codec can#39;t encode character u#39;\u5929#39; in position 2...
- MAL II,怀槐凝集素II(MAL II)
- ThinkPHP6项目基操目录
- android逆向分析腾讯微视研究无限循环视频嵌套滑动不中断的实现方式
- 关于互联网的一些观点想法
- python3 安装urllib3
- CVE-2022-21907 Microsoft Windows HTTP 协议栈远程代码执行漏洞复现
- 2.石头游戏(坑爹)
- 中科红旗之死--国产软件界最大不幸
- POJ 2993 Emag eht htiw Em Pleh 模拟
- 留良乡稳健投资理财的四大原则
热门文章
- Redis之跳跃表(面试重点容易考)
- 什么是栈,栈存储结构详情
- 射影几何教程: 1 射影几何介绍
- zimbra邮件服务器配置,Zimbra邮件服务器无需登录任意邮箱伪造漏洞修复
- centos mysql-5.5.20_centos 下安装mysql5.5.20出现的问题
- swing查询输入框无值时出现null异常_如何优雅处理代码中 Null 值引起的 Bug?告别 Null 恐惧症!...
- MATLAB-M文件
- Spring学习12之整合Mybatis
- java上传的文件没有,java – 文件未上传到服务器
- 重装了java然后说找不到路径,Java第三次作业第五题