用keytool创建Keystore和Truststore文件

一、介绍

1.目的:JSSE使用Truststore和Keystore文件来提供客户端和服务器之间的安全数据传输

2.描述:Keytool 是一个Java数据证书的管理工具 ,Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中. 在keystore里,包含两种数据:密钥实体(Key entity)-密钥(secret key)或者是私钥和配对公钥(采用非对称加密);可信任的证书实体(trusted certificate entries)-只包含公钥.

即:keytool是一个工具可以用来创建包含公钥和密钥的的keystore文件,并且利用keystore文件来创建只包含公钥的truststore文件。 

二、步骤

1.生成一个含有一个私钥的keystore文件 

$ keytool -genkey -alias certificatekey  -keyalg RSA -validity 700  -keystore keystore.jks

说明: 

  • genkey:在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书 
  • alias:别名 
  • keyalg:指定密钥的算法(如:RSA ,DSA  默认值为:DSA) 
  • validity: 指定创建的证书有效期多少天(默认 90) 
  • keystore: 指定密钥库的名称( 产生的各类信息将不在.keystore文件中,而是在keystore.jks中)   
$ keytool -genkey -alias certificatekey  -keyalg RSA -validity 700  -keystore keystore.jks

输入密钥库口令:*****
再次输入新口令:*****
您的名字与姓氏是什么?
  [Unknown]:  peng...
您的组织单位名称是什么?
  [Unknown]:  asia..
您的组织名称是什么?
  [Unknown]:  mall
您所在的城市或区域名称是什么?
  [Unknown]:  beijing
您所在的省/市/自治区名称是什么?
  [Unknown]:  beijing
该单位的双字母国家/地区代码是什么?
  [Unknown]:  ZG
CN=peng..., OU=..., O=mall, L=beijing, ST=beijing, C=ZG是否正确?
  [否]:  Y

输入 <certificatekey> 的密钥口令:****
  (如果和密钥库口令相同, 按回车):

再次输入新口令:****
......


2.验证生成的keystore文件和证书信息

$ keytool -list -v -keystore keystore.jks
$ keytool -list -v -keystore keystore.jks
输入密钥库口令:****
密钥库类型: JKS
密钥库提供方: SUN
您的密钥库包含 1 个条目
别名: certificatekey
创建日期: 2015-11-25
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=peng.., OU=asiai.., O=mall, L=beijing, ST=beijing, C=ZG
发布者: CN=peng.., OU=asia.., O=mall, L=beijing, ST=beijing, C=ZG
序列号: 51c8a241
有效期开始日期: Wed Nov 25 15:37:07 CST 2015, 截止日期: Wed Oct 25 15:37:07 CST 2017
证书指纹:
   MD5: 9B:A7:CC:B4:2B:E2:31:F0:7A:E0:36:..
   SHA1: 4E:45:3A:A2:4F:B7:BA:84:0A:F2:CF:E....
   SHA256: 5F:4B:8..
.....


3.从keystore.jks导出公钥证书

$ keytool -export -alias  certificatekey -keystore keystore.jks -rfc -file gongyaoCert.cer
输入密钥库口令:*******
存储在文件 <gongyaoCert.cer> 中的证书


4. Truststore的生成以及公钥证书的导入  

$ keytool -import -alias certificatekey  -file gongyaoCert.cer  -keystore truststore.jks

输入密钥库口令:******
再次输入新口令:******

所有者: CN=peng.., OU=asia.., O=mall, L=beijing, ST=beijing, C=ZG
发布者: CN=peng..., OU=asi..., O=mall, L=beijing, ST=beijing, C=ZG

序列号: 51c8a24
有效期开始日期: Wed Nov 25 15:37:07 CST 2015, 截止日期: Wed Oct 25 15:37:07 CST 2017
证书指纹:
   MD5: 9B:A7:CC:B4:2B:E2:31:F0:7A:E...
   SHA1: 4E:45:3A:A2:4F:B7:BA:84:0A:F2....
   SHA256: 5F:4B:8B:43:BA:A1:60:B0:3A:C5:71:CB:4E:C4:0A:B....
   签名算法名称: SHA2...
   版本: 3
扩展:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
   KeyIdentifier [
        0000: ED 64 B3 D4 34 6E 84 28 ..... DB  .d..4n.(!..uw/..
        0010: 57 9D B6 44                                        W..D
    ]
]
是否信任此证书? [否]:  y
证书已添加到密钥库中


5.验证公钥truststore.jks文件

$ keytool -list -v -keystore truststore.jks



三、附录

1.  JDK中keytool常用参数说明(不同版本有差异):
  • -genkey
     在用户主目录中创建一个默认文件”.keystore”,还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书(在没有指定生成位置的情况下,keystore会存在用户系统默认目录)
  • -alias
    产生别名 每个keystore都关联这一个独一无二的alias,这个alias通常不区分大小写
  • -keystore
    指定密钥库的名称(产生的各类信息将不在.keystore文件中)
  • -keyalg
    指定密钥的算法 (如 RSA DSA,默认值为:DSA)

  • -validity
    指定创建的证书有效期多少天(默认 90)
  • -keysize 指定密钥长度 (默认 1024)
  • -storepass 指定密钥库的密码(获取keystore信息所需的密码)
  • -keypass 指定别名条目的密码(私钥的密码)
  • -dname 指定证书发行者信息 其中: “CN=名字与姓氏,OU=组织单位名称,O=组织名称,L=城市或区域名 称,ST=州或省份名称,C=单位的两字母国家代码”
  • -list 显示密钥库中的证书信息 keytool -list -v -keystore 指定keystore -storepass 密码
  • -v 显示密钥库中的证书详细信息
  • -export 将别名指定的证书导出到文件 keytool -export -alias 需要导出的别名 -keystore 指定keystore -file 指定导出的证书位置及证书名称 -storepass 密码
  • -file 参数指定导出到文件的文件名
  • -delete 删除密钥库中某条目 keytool -delete -alias 指定需删除的别 -keystore 指定keystore – storepass 密码
  • -printcert 查看导出的证书信息 keytool -printcert -file g:\sso\michael.crt
  • -keypasswd 修改密钥库中指定条目口令 keytool -keypasswd -alias 需修改的别名 -keypass 旧密码 -new 新密码 -storepass keystore密码 -keystore sage
  • -storepasswd 修改keystore口令 keytool -storepasswd -keystore g:\sso\michael.keystore(需修改口令的keystore) -storepass pwdold(原始密码) -new pwdnew(新密码)
  • -import 将已签名数字证书导入密钥库 keytool -import -alias 指定导入条目的别名 -keystore 指定keystore -file 需导入的证书
  • 中创建一个默认文件”.keystore”,还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书(在没有指定生成位置的情况下,keystore会存在用户系统默认目录)
  • -alias 产生别名 每个keystore都关联这一个独一无二的alias,这个alias通常不区分大小写
  • -keystore 指定密钥库的名称(产生的各类信息将不在.keystore文件中)
  • -keyalg 指定密钥的算法 (如 RSA DSA,默认值为:DSA)
  • -validity 指定创建的证书有效期多少天(默认 90)
  • -keysize
    指定密钥长度 (默认 1024)
  • -storepass
    指定密钥库的密码(获取keystore信息所需的密码)
  • -keypass
    指定别名条目的密码(私钥的密码)
  • -dname
    指定证书发行者信息 其中: “CN=名字与姓氏,OU=组织单位名称,O=组织名称,L=城市或区域名 称,ST=州或省份名称,C=单位的两字母国家代码”
  • -list
    显示密钥库中的证书信息 keytool -list -v -keystore 指定keystore -storepass 密码
  • -v
    显示密钥库中的证书详细信息
  • -export 将别名指定的证书导出到文件 keytool -export -alias 需要导出的别名 -keystore 指定keystore -file 指定导出的证书位置及证书名称 -storepass 密码
  • -file 参数指定导出到文件的文件名
  • -delete 删除密钥库中某条目 keytool -delete -alias 指定需删除的别 -keystore 指定keystore – storepass 密码
  • -printcert 查看导出的证书信息 keytool -printcert -file g:\sso\michael.crt
  • -keypasswd 修改密钥库中指定条目口令 keytool -keypasswd -alias 需修改的别名 -keypass 旧密码 -new 新密码 -storepass keystore密码 -keystore sage
  • -storepasswd 修改keystore口令 keytool -storepasswd -keystore g:\sso\michael.keystore(需修改口令的keystore) -storepass pwdold(原始密码) -new pwdnew(新密码)
  • -import 将已签名数字证书导入密钥库 keytool -import -alias 指定导入条目的别名 -keystore 指定keystore -file 需导入的证书

 

你可能感兴趣的:(用keytool创建Keystore和Truststore文件)