用java keytool工具生成keystore文件的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用java keytool工具生成keystore文件的问题相关的知识,希望对你有一定的参考价值。

问题1:在dos窗口中输入命令 keytool -genkey -alias smalllove -keyalg RSA -keystore D:/keys/smallkey以后,总是提示 keystore文件已经存在,但为空(具体如下图),但是我看了D:/keys/smallkey下里面没有keystore文件,请问该如何处理
问题2:我用的win7系统,看网上说-genkey 这个指的是系统用户主目录下生成,但是win7系统下,这个用户主目录又是哪个?

在申请服务器证书时,用户需要提供证书签名请求文件(CSR)。CSR文件是一个从您的服务器生成的加密数据文件,包含了您的公司信息和web server信息。

  一、 创建证书Keystore

  keytool -genkey -alias -keyalg RSA –keysize 2048 -keystore

  重要:

  ! 当创建时必须制定您的keystore 位置;

  ! 如果您正在续订您的证书,您必须创建新的key pair 和 keystore;

  ! 创建您的CSR和安装您的证书,您使用它来创建自签名的密钥存储库时,请使用相同的别名。

  例如:

  C:\\> keytool -genkey -alias myalias -keysize 2048 -keyalg RSA -keystore c:\\.mykeystore

  输入keystore密码: password (请输入保护证书密钥的密码)

  您的名字与姓氏是什么?请输入域名,例如:www.etsec.com.cn

  您的组织单位名称是什么?请输入单位名称,如: Beijing eTsec Technology Co.,Ltd.

  您的组织名称是什么?请输入部门名称,如: IT Dept

  您所在的城市或区域名称是什么?输入城市名称,如:Beijing

  您所在的州或省份名称是什么?输入省份名称,如:Beijing

  该单位的两字母国家代码是什么?中国请输入CN

  CN=www.etsec.com.cn, OU= Beijing eTsec, O=IT, L= Beijing, ST= Beijing, C=CN 正确吗?输入 Y

  输入的主密码(如果和 keystore 密码相同,按回车):按回车

  确保记住您所输入的密码,注意生成CSR时,在第2部分中会使用它。

  二、生成证书签名请求(CSR)

  1. keytool -certreq -keyalg RSA -alias -file certreq.csr -keystore

  重要:

  ! 创建您的CSR和安装您的证书,您使用它来创建自签名的密钥存储库时,请使用相同的别名。

  例如:

  C:\\>keytool -certreq -keyalg RSA -alias myalias -file certreq.txt -keystore c:\\.mykeystore

  输入keystore密码:

  2. 打开生成CSR文件certreq.txt 。这个CSR文件显示如下:

-----BEGIN NEW CERTIFICATE REQUEST-----
MIIBujCCASMCAQAwejELMAkGA1UEBhMCQ0ExEDAOBgNVBAgTB09udGFyaW8xDzANBgNVBAcTBk90
dGF3YTEQMA4GA1UEChMHRW50cnVzdDETMBEGA1UECxMKRW50cnVzdCBDUzEhMB8GA1UEAxMYd3d3

5w6T+q/f+wIDAQABoAAwDQYJKoZIhvcNAQEEBQADgYEAF+0hqAqXumz/vGrzGVhKHlnxd7HW3ezS
GIbIUcOy1YdDc/1ZCqRpu3utYIZ6welK++l+QjlbL6p5RJJETkkLKXjb/WVFajNuPl7Yob9pbwA7
JBrCCKbFj+kzDNbGhCR1RgFA9vQj5vob41Vj+k+TQchliuTLL9rFXNDHrtgTMtA=
-----END NEW CERTIFICATE REQUEST-----
参考技术A 我没找到,建议你在命令后的d:/keys/smallkey.keystore,用来指定keystore文件的完整名称,试试,本回答被提问者和网友采纳 参考技术B 你的d:\keys/smallkey,路径的分隔符打错了
一个正的一个反的
两个都是\追问

分格符这里我试了,无论是\\还是//都会报这个错误,另外我该如何找出它提示已经存在 的keystore文件呢?

使用keytool 生成证书

keytool 工具介绍

keytool 是java 用于管理密钥和证书的工具,其功能包括:

1 创建并管理密钥

2 创建并管理证书

3 作为CA 为证书授权

4 导入导出证书

keytool 采用keystore来存储密钥及证书,其中可包括私钥、信任证书; 
keystore 文件使用 JKS格式,带密钥存储;其中私钥的存储也有独立的密码;

一、生成 私钥

keytool -genkey -alias serverkey -keystore server.keystore

按提示 输入keystore 存储密码、私钥密码、个人信息,之后会生成 server.keystore文件

相关参数

-keyalt RSA 采用RSA算法(默认) 
-storepass keystore 文件密码 
-keypass 私钥密码

二、导出证书

keytool -export -keystore server.keystore -file server.cer -alias serverkey

三、导入信任证书(客户端使用)

keytool -import -keystore clientTrust.keystore -file server.cer -alias serverTrust

四、查看密钥及证书

查看server 密钥

keytool -list -keystore server.keystore

输出

Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
serverkey, Sep 25, 2016, PrivateKeyEntry,
Certificate fingerprint (SHA1): 65:75:C9:08:A0:83:21:A1:D7:8D:DA:CD:3D:FB:C2:E0:50:96:29:62

  

查看clientTrust 密钥

keytool -list -keystore clientTrust.keystore

输出

Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
servertrust, Sep 25, 2016, trustedCertEntry,
Certificate fingerprint (SHA1): 65:75:C9:08:A0:83:21:A1:D7:8D:DA:CD:3D:FB:C2:E0:50:96:29:62

  

加上-v选项可查看更详细信息

查看 证书

keytool -printcert -file server.cer

输出

Owner: CN=ZZ, OU=DEV, O=pp.com, L=GZ, ST=GD, C=CN
Issuer: CN=ZZ, OU=DEV, O=pp.com, L=GZ, ST=GD, C=CN
Serial number: 797f3140
Valid from: Sun Sep 25 16:43:55 CST 2016 until: Sat Dec 24 16:43:55 CST 2016
Certificate fingerprints:
MD5: FB:7D:29:4C:A9:F3:07:0E:CC:74:0D:9B:D4:D6:4D:91
SHA1: 65:75:C9:08:A0:83:21:A1:D7:8D:DA:CD:3D:FB:C2:E0:50:96:29:62
SHA256: E9:8B:A5:43:5F:40:FA:C5:64:3B:0A:11:1D:BE:D1:07:3C:A1:E2:50:88:71:A7:5C:EC:43:22:98:1B:AA:B6:EB
Signature algorithm name: SHA1withDSA
Version: 3
Extensions:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 0E C3 62 D3 75 3A 3C B7 D9 C4 BD 8E 63 E7 6C EC ..b.u:<.....c.l.
0010: AF 8A 29 72 ..)r
]
]

  

五 转换命令

将 jks格式 转 pkcs

keytool -importkeystore -srckeystore me.keystore -destkeystore me.p12 -srcalias me -destalias me -srcstoretype JKS -deststoretype PKCS12

 

FAQ

** keytool 通用格式为 jks,如何获取私钥?** 
答:通过程序读取输出;

** 如何将 jks文件转换为 pem文件,以用于nginx服务器?** 
答:通常jks 文件已包含私钥、证书、CA证书信息,可通过 keytool 将jks 转为pkcs格式,再通过openssl 进行转换提取:

提取 privatekey -nodes 指示输出无加密 pem文件
openssl pkcs12 -in me.p12 -nodes -nocerts -out me.key
提取 证书
openssl pkcs12 -in me.p12 -nodes -nokeys -clcerts -out me.crt
提取 CA证书(如果自签名则为空)
openssl pkcs12 -in me.p12 -nodes -nokeys -cacerts -out ca.crt

  

以上是关于用java keytool工具生成keystore文件的问题的主要内容,如果未能解决你的问题,请参考以下文章

使用keytool 生成证书

Java KeyStore 用命令生成keystore文件

keytool生成证书与tomcat 的SSL的配置使用

java中Keytool的使用总结

jdk的keytool生成jks及获取jks的信息

keytool工具使用