keytool 简介

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

  • 创建并管理密钥
  • 创建并管理证书
  • 作为CA 为证书授权
  • 导入导出证书

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

一、生成私钥和证书

keytool -genkeypair -alias serverkey -keystore server.keystore

按提示 输入keystore 存储密码、私钥密码、个人信息,之后会生成 server.keystore文件
若不想输入参数,可提供参数:

keytool -genkeypair -alias serverkey -keypass  -storepass  \
-dname "C=CN,ST=GD,L=SZ,O=vihoo,OU=dev,CN=vihoo.com" \
-keyalg RSA -keysize -validity -keystore server.keystore

参数说明

  • storepass keystore 文件存储密码
  • keypass 私钥加解密密码
  • alias 实体别名(包括证书私钥)
  • dname 证书个人信息
  • keyalt 采用公钥算法,默认是DSA
  • keysize 密钥长度(DSA算法对应的默认算法是sha1withDSA,不支持2048长度,此时需指定RSA)
  • validity 有效期
  • keystore 指定keystore文件

二、查看keystore详情

查看详情命令

keytool -list -keystore -storepass  server.keystore

输出结果

Keystore type: JKS
Keystore provider: SUN
Your keystore contains entry
serverkey, Sep , , PrivateKeyEntry,
Certificate fingerprint (SHA1): ::C9::A0:::A1:D7:8D:DA:CD:3D:FB:C2:E0::::

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

Keystore type: JKS
Keystore provider: SUN
Your keystore contains entry
Alias name: serverkey
Creation date: Jul ,
Entry type: PrivateKeyEntry
Certificate chain length:
Certificate[]:
Owner: C=CN, ST=GD, L=SZ, O=vihoo, OU=dev, CN=vihoo.com
Issuer: C=CN, ST=GD, L=SZ, O=vihoo, OU=dev, CN=vihoo.com
Serial number: 5c5eb42
Valid from: Sat Jul :: CST until: Tue Jul :: CST
Certificate fingerprints:
MD5: :ED::EF:4C:E3:7F:ED:6A::::6D:::
SHA1: :::6E::EE:0F:E6:::::9C:9D:A4::EF:CC::0C
SHA256: 3B:AC::8E::C2:C8::::C7:4A:D3:AF:1F:::::7C::6E:C8:E7:::E4:7A::0A:CD:8F
Signature algorithm name: SHA256withRSA
Version:
Extensions:
#: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
: B4 A9 5D 6C 4C B4 ED 2B D1 F4 ...&]lLF.i.+ ..
: 3C 8F X<..
]
]

三、证书导入导出

导出证书

keytool -exportcert -keystore server.keystore -file server.cer -alias serverkey -storepass 

参数说明

  • exportcert 表示导出证书
  • alias 指示别名
  • file 指示导出文件
  • storepass 指示keystore密钥

此时导出的证书为DER编码格式,使用openssl 可以输出

openssl x509 -in server.cer -inform der -noout -text

加上 -rfc选项,可输出PEM编码格式的证书

keytool -exportcert -keystore server.keystore -rfc -file server.cer -alias serverkey -storepass 

输出格式如:

-----BEGIN CERTIFICATE-----
MIIDUTCCAjmgAwIBAgIEBcXrQjANBgkqhkiG9w0BAQsFADBZMRIwEAYDVQQDEwl2
...
-----END CERTIFICATE-----

导入证书
一般为导入信任证书(SSL客户端使用)

keytool -importcert -keystore client_trust.keystore -file server.cer -alias client_trust_server -storepass  -noprompt

参数说明

  • importcert 表示导入信任证书
  • file 指示导入证书,支持pem/der格式
  • keystore 指示目标keystore文件
  • storepass 指示新的keystore密钥
  • alias 指示trust证书在keystore中的别名
  • noprompt 指示不弹出提示

导入后的证书为 trustedCertEntry 实体类型,而私钥证书为 PrivateKeyEntry

四、查看证书

打印证书

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 :: CST until: Sat Dec :: CST
Certificate fingerprints:
MD5: FB:7D::4C:A9:F3::0E:CC::0D:9B:D4:D6:4D:
SHA1: ::C9::A0:::A1:D7:8D:DA:CD:3D:FB:C2:E0::::
SHA256: E9:8B:A5::5F::FA:C5::3B:0A::1D:BE:D1::3C:A1:E2::::A7:5C:EC::::1B:AA:B6:EB
Signature algorithm name: SHA1withDSA
Version:
Extensions:
#: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
: 0E C3 D3 3A 3C B7 D9 C4 BD 8E E7 6C EC ..b.u:<.....c.l.
: AF 8A ..)r
]
]

五、转换格式

jks格式 转 pkcs12

keytool -importkeystore -srckeystore server.keystore -destkeystore server.p12 -srcalias serverkey -destalias serverkey \
-srcstoretype jks -deststoretype pkcs12 -srcstorepass -deststorepass -noprompt

参数说明

  • importkeystore 指示导入导出keystore文件,可用于同类型或不同类型的导入导出
  • srckeystore 指示源keystore文件
  • srcalias 指示源实体别名
  • srcstoretype 指示源store类型(jks/pkcs12..)
  • srcstorepass 指示源store密码
  • noprompt 不弹出提示

pkcs12 转jks格式与此同理

六、场景示例

1. 制作Java SSL 双向证书

storepass=
keypass=
server_dname="C=CN,ST=GD,L=SZ,O=vihoo,OU=dev,CN=vihoo.com"
client_dname="C=CN,ST=GD,L=SZ,O=vihoo,OU=dev,CN=vihooc.com"
echo "generate server keystore"
keytool -genkeypair -alias serverkey -keypass $keypass -storepass $storepass \
-dname $server_dname \
-keyalg RSA -keysize -validity -keystore server.keystore
echo "generate client keystore"
keytool -genkeypair -alias clientkey -keypass $keypass -storepass $storepass \
-dname $client_dname \
-keyalg RSA -keysize -validity -keystore client.keystore
echo "export server certificate"
keytool -exportcert -keystore server.keystore -file server.cer -alias serverkey -storepass $storepass
echo "export client certificate"
keytool -exportcert -keystore client.keystore -file client.cer -alias clientkey -storepass $storepass
echo "add server cert to client trust keystore"
keytool -importcert -keystore client_trust.keystore -file server.cer -alias client_trust_server \
-storepass $storepass -noprompt
echo "add client cert to server trust keystore"
keytool -importcert -keystore server_trust.keystore -file client.cer -alias server_trust_client \
-storepass $storepass -noprompt

2. Java 证书与 nginx 证书互转

Java通常使用JKS作为证书存储格式,而Nginx往往采用PEM证书格式,如何实现互转?

Nginx 证书 转 JKS

  • A pem证书和私钥合成p12

    openssl pkcs12 -export -in server.crt -inkey server.key -passin pass: -password pass: \
    -name server -out server.p12

    注意定义-name 选项,这将作为keystore识别实体的参数

  • B p12 证书转jks 证书

    keytool -importkeystore -srckeystore server.p12 -destkeystore server.keystore \
    -srcstoretype pkcs12 -deststoretype jks -srcalias server -destalias server \
    -deststorepass -srcstorepass

    如果p12 文件中未指定实体名称,使用keytool转换时则不需提供srcalias/destalias参数,而输出的keystore实体名称默认为1

JKS 证书 转 Nginx证书

  • A jks 证书转p12

    keytool -importkeystore -srckeystore server.keystore  -destkeystore server.p12 \
    -srcstoretype jks -deststoretype pkcs12 -srcalias server -destalias server \
    -deststorepass -srcstorepass
  • B p12 证书提取pem证书和私钥

    openssl pkcs12 -in server.p12 -clcerts -nokeys -password pass: -out server.crt
    openssl pkcs12 -in server.p12 -nocerts -password pass: -passout pass: -out server.key

    其中得到的私钥文件为PKCS#8 加密格式,证书和密钥均为PEM文件编码。

3. 其他

已有的Nginx证书,如何快速在Java中添加信任 
通过keytool -importcert 命令可直接导入信任证书

keytool 通用格式为 jks,如何获取私钥
通过程序读取,参考stackoverflow
JavaSE样例

使用keytool 生成证书的更多相关文章

  1. keytool生成证书与Tomcat SSL配置

    转自:http://tomhat.iteye.com/blog/2087673 一.Keytool介绍 Keytool是一个Java数据证书的管理工具.Keytool将密钥(key)和证书(certi ...

  2. tomcat7+jdk的keytool生成证书 配置https

    目前只会使用jdk的keytool来生成证书.本文仅介绍这种方法. 1Windows下: 1.1 生成keystore文件及导出证书 打开控制台: 运行: %JAVA_HOME%\bin\keytoo ...

  3. Tomcat服务器配置https双向认证(使用keytool生成证书)

    一,HTTPS原理   1,HTTP.HTTPS.SSL.TLS介绍与相互关系 (1)HTTP:平时浏览网页时候使用的一种协议.HTTP协议传输的数据都是未加密的(明文),因此使用HTTP协议传输隐私 ...

  4. Tomcat服务器配置https认证(使用keytool生成证书)

    一.证书生成 1.生成服务器证书 (1)打开打开命令控制台,进入jdk的bin目录 cd D:\Program Files\jdk1.6.0_45\bin (2)keytool为Tomcat生成证书( ...

  5. Keytool生成证书

    一.生成证书keytool -genkey -alias 别名 -keyalg RSA -keysize 1024(密钥位数) -keypass 密码 -validity 365(默认90天) -ke ...

  6. 用keytool生成证书

    1.创建一个证书C:/jdk1.5.0_04/bin>keytool -genkey -alias xahCA -keyalg RSA -keystore dyfCALib输入keystore密 ...

  7. 使用jdk中keytool生成证书

    -genkey 在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥.私钥和证书 -alias 产生别名 -keystor ...

  8. java ssl https 连接详解 生成证书

    我们先来了解一下什么理HTTPS 1. HTTPS概念 1)简介 HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全 ...

  9. 使用jdk生成证书以及把证书导入到jdk中

    证书对于实现此单点登录非常之重要,证书是服务器端和客户端安全通信的凭证,本教程只是演示,所有用了JDK自带的证书生成工具keytool.当然在实际项目中你可以到专门的证书认证中心购买证书. 中文官方网 ...

随机推荐

  1. Sort Characters By Frequency

    Given a string, sort it in decreasing order based on the frequency of characters. Example 1: Input: ...

  2. javascript学习之【new操作符】

    首先请大家思考这么一段代码,如下: <script>var jquery=function(){     console.log(this);};jquery();new jquery() ...

  3. 初步了解Canvas

      <--------一些理论储备: ------------------------------------------------------------------------------ ...

  4. c# 水晶报表的设计(非常的基础)

    最近在公司实习,由于公司需要用到的一种叫做水晶报表的神奇的东东,老大就叫我们学习学习.怕自己以后忘了,也为了以后阅读方便,将其记录下来. 使用工具:vs2008 基本方法一.使用水晶报表的推模式 步骤 ...

  5. Extjs,Git,插件....学习网址

    详细的extjs讲解http://wenku.baidu.com/view/e98a781352d380eb62946de4.html 博客 http://www.cnblogs.com/iamlil ...

  6. $("").click与onclick的区别

    onclick是绑定事件,click本身是方法作用是触发onclick事件,只要执行了元素的click()方法,下面示例 Html代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

  7. Unable to load native-hadoop library for your platform

    #HADOOP VARIABLES START export JAVA_HOME=/home/yang/jdk1.7.0_80export HADOOP_HOME=/home/hadoop/hadoo ...

  8. Ubuntu 16.04 64位安装insight 6.8

    1. apt-get install insight已经不管用. 2. 编译源码死都有问题. 3. 拜拜,用KDBG.

  9. 1.2 ASSEMBLY LANGUAGE

    People are much happier moving up the ladder,socially or even technically.So our profession has move ...

  10. qt 设置等待事件

    QElapsedTimer et;et.start();while(et.elapsed() < 1000)     QCoreApplication::processEvents();