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. MongoDB学习

    最近在学习,参考一线码农的教程 http://www.cnblogs.com/huangxincheng/category/355399.html

  2. iOS中block的用法 以及和函数用法的区别

    ios中block的用法和函数的用法大致相同 但是block的用法的灵活性更高: 不带参数的block: void ^(MyBlock)() = ^{}; 调用的时候  MyBlock(); 带参数的 ...

  3. 第二章:搭建Android开发环境

    通过对本章节内容的阅读,了解了Android底层开发所需要的各种开发工具,以及在Linux环境下怎样搭建Android底层开发环境,在Linux系统上开发Android应用程序,需要安装Linux版本 ...

  4. 架构设计 - Server设计草稿

    DMServer Framework 主要属性: 四个模块部署在不同服务器,双层部分考虑主备和分布式部署. 架构可依据具体前端需求进行裁剪,灵活配置. gate用于业务框架分布式部署,在业务量可控范围 ...

  5. LayaAir引擎——(五)

    LayaAir引擎——关于地图详解 所需要的软件: LayaAirIDE1.0.2版本 在LayaAir引擎中与地图相关的类: 1.laya.map.TiledMap TiledMap类   地图以层 ...

  6. jQuery中bind方法和live方法区别解析

    Javascript中的事件有它的独特性,有默认的执行事件,例如冒泡就是其中的一个.在很多比较复杂的应用程序中,停止事件的冒泡或捕获在程序开发当中是十分有用的,而在IE中有它的独特方式来阻止事件的冒泡 ...

  7. 【海洋女神原创】知识普及:IS版本命名规则和高低关系

    经常有朋友对IS的版本命名不甚了解,有时候在交流的时候就会造成误会,在这里做一下普及. IS最早出名的版本是IS6.22,这是个非常古老的版本的,但是在IS历史上有不可磨灭的贡献. 之后很长一段时间内 ...

  8. 转发一篇C++编译器环境搭建的文章

    一.环境配置 1.  下载安装MinGW      地址  http://sourceforge.net/projects/mingw/ 2.  设置环境变量            在path变量中, ...

  9. Matlab从一系列图片导出AVI视频,导出GIF动图

    平台:Win7,Matlab 2014a 从一系列图片导出AVI视频的M代码如下: clear all; % 清除变量 % 官方示例,命令窗口输入“doc VideoWriter” writerObj ...

  10. epoll的LT模式缺点

    本文为原创,转载请注明:http://www.cnblogs.com/gistao/ epoll提供了ET和LT两种模式,网上文章很多,这里只总结下LT模式下的两个缺点 epoll对fd的管理实现是用 ...