keytool 简介

keytool 是java 用于管理密钥和证书的工具,官方文档

其功能包括:

创建并管理密钥

创建并管理证书

作为CA 为证书授权

导入导出证书

主要格式

keytool 采用 keystore 文件来存储密钥及证书,其中可包括私钥、信任证书;

keystore 文件主要使用 JKS格式(也可支持其他格式),带密钥存储;其中私钥的存储也有独立的密码;

其他格式

一、生成私钥和证书

keytool -genkeypair -alias serverkey -keystore server.keystore

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

若不想输入参数,可提供参数:

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

参数说明

storepass keystore 文件存储密码

keypass 私钥加解密密码

alias 实体别名(包括证书私钥)

dname 证书个人信息

keyalt 采用公钥算法,默认是DSA

keysize 密钥长度(DSA算法对应的默认算法是sha1withDSA,不支持2048长度,此时需指定RSA)

validity 有效期

keystore 指定keystore文件

二、查看keystore详情

查看详情命令

keytool -list -keystore -storepass 111111 server.keystore

输出结果

Keystore type: JKS

Keystore provider: SUN

Your keystore contains1entry

serverkey, Sep25, 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

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

Keystore type: JKS

Keystore provider: SUN

Your keystore contains1entry

Alias name: serverkey

Creationdate: Jul 22, 2017Entry type: PrivateKeyEntry

Certificate chain length:1Certificate[1]:

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 Jul22 10:45:45 CST 2017 until: Tue Jul 20 10:45:45 CST 2027Certificate fingerprints:

MD5:27:ED:70:EF:4C:E3:7F:ED:6A:83:67:32:6D:10:24:38SHA1:79:08:97:6E:62:EE:0F:E6:81:56:66:43:9C:9D:A4:11:EF:CC:28:0C

SHA256: 3B:AC:56:8E:60:C2:C8:07:61:19:C7:4A:D3:AF:1F:60:77:24:94:7C:87:6E:C8:E7:17:14:E4:7A:34:0A:CD:8F

Signature algorithm name: SHA256withRSA

Version:3Extensions:

#1: ObjectId: 2.5.29.14 Criticality=falseSubjectKeyIdentifier [

KeyIdentifier [0000: B4 10 A9 26 5D 6C 4C 46 B4 69 ED 31 2B 20 D1 F4 ...&]lLF.i.1+..0010: 58 3C 8F 94 X<..>

]

]

三、证书导入导出

导出证书

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

参数说明

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 111111

输出格式如:

-----BEGIN CERTIFICATE-----MIIDUTCCAjmgAwIBAgIEBcXrQjANBgkqhkiG9w0BAQsFADBZMRIwEAYDVQQDEwl2

...-----END CERTIFICATE-----

导入证书

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

keytool -importcert -keystore client_trust.keystore -file server.cer -alias client_trust_server -storepass 111111 -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 Sep25 16:43:55 CST 2016 until: Sat Dec 24 16:43:55 CST 2016Certificate fingerprints:

MD5: FB:7D:29:4C:A9:F3:07:0E:CC:74:0D:9B:D4:D6:4D:91SHA1:65:75:C9:08:A0:83:21:A1:D7:8D:DA:CD:3D:FB:C2:E0:50:96:29:62SHA256: 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:3Extensions:

#1: ObjectId: 2.5.29.14 Criticality=falseSubjectKeyIdentifier [

KeyIdentifier [0000: 0E C3 62 D3 75 3A 3C B7 D9 C4 BD 8E 63 E7 6C EC ..b.u:<.....c.l.0010: af>

]

]

五、转换格式

jks格式 转 pkcs12

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

参数说明

importkeystore 指示导入导出keystore文件,可用于同类型或不同类型的导入导出

srckeystore 指示源keystore文件

srcalias 指示源实体别名

srcstoretype 指示源store类型(jks/pkcs12..)

srcstorepass 指示源store密码

noprompt 不弹出提示

pkcs12 转jks格式与此同理

六、场景示例

1. 制作Java SSL 双向证书

storepass=111111keypass=111111server_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 2048 -validity 3650 -keystore server.keystoreecho "generate client keystore"keytool-genkeypair -alias clientkey -keypass $keypass -storepass $storepass \-dname $client_dname \-keyalg RSA -keysize 2048 -validity 3650 -keystore client.keystoreecho "export server certificate"keytool-exportcert -keystore server.keystore -file server.cer -alias serverkey -storepass $storepassecho "export client certificate"keytool-exportcert -keystore client.keystore -file client.cer -alias clientkey -storepass $storepassecho "add server cert to client trust keystore"keytool-importcert -keystore client_trust.keystore -file server.cer -alias client_trust_server \-storepass $storepass -nopromptecho "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:111111 -password pass:111111\-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 111111 -srcstorepass 111111

如果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 111111 -srcstorepass 111111

B p12 证书提取pem证书和私钥

openssl pkcs12 -in server.p12 -clcerts -nokeys -password pass:111111 -out server.crt

openssl pkcs12-in server.p12 -nocerts -password pass:111111 -passout pass:111111 -out server.key

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

3. 其他

已有的Nginx证书,如何快速在Java中添加信任

通过keytool -importcert 命令可直接导入信任证书

keytool 通用格式为 jks,如何获取私钥

通过程序读取,参考stackoverflow

JavaSE样例

linux下keytool生成证书_使用keytool 生成证书相关推荐

  1. java createjpeg4_在linux下用java的JPEGCodec.createJPEGEncoder(bos)生成jpg图片问题

    在rh8   linux   下用java的JPEGCodec.createJPEGEncoder(bos)生成jpg图片,XServer已启动.出现如下问题 错误提示如下 java.lang.Int ...

  2. 在Linux下如何使用GCC编译程序、简单生成静态库及动态库。

    在Linux下如何使用GCC编译程序.简单生成 静态库及动态库.   本文适用于Linux下开发初学者.本文初步讲解在Linux下如何使用GCC编译程序.简单生成静态库及动态库. 一.关于安装.一般系 ...

  3. linux下qt静态编译_自由出土文物的空间_百度空间

    linux下qt静态编译_自由出土文物的空间_百度空间 linux下qt静态编译_自由出土文物的空间_百度空间 linux下qt静态编译 2012-04-09 13:10 测试通过,贴一下过程,仅用来 ...

  4. 嵌入式linux液晶显示中文,嵌入式系统Linux下液晶显示的实现_徐喆.pdf

    嵌入式系统Linux下液晶显示的实现_徐喆 显 嵌入式系统 下液晶 示的实现 徐 品 刘 单 殊 华 北 工业大 电子信 与控 工程 院 北 京 学 息 学 京 产 器 于 司 , 摘 要 介绍了嵌入 ...

  5. java keytool 导出证书_使用keytool 生成证书

    keytool 工具介绍 keytool 是java 用于管理密钥和证书的工具,其功能包括: 1 创建并管理密钥 2 创建并管理证书 3 作为CA 为证书授权 4 导入导出证书 keytool 采用k ...

  6. java 生成ecc证书_升级支持ECC证书指南

    ECC简介 随着分解大整数方法的进步及完善.计算机速度的提高以及计算机网络的发展,为了保障数据的安全,RSA的密钥需要不断增加,但是,密钥长度的增加导致了其加解密的速度大为降低,硬件实现也变得越来越难 ...

  7. [2021]Linux下C语言qrencode二维码生成库的基本使用和ARM开发板移植

    文章目录 一.前言 二.准备所用到的环境以及版本信息 1.Ubuntu和内核版本 2.gcc和g++版本 3.交叉编译gcc和g++版本 4.开发板信息 三.开发环境编译&安装qrencode ...

  8. linux 下外语学习软件_学习外语如何帮助您学习编码

    linux 下外语学习软件 The road to becoming a software developer is a long and difficult one, especially for ...

  9. 对抗生成网络_深度卷积生成对抗网络

    本教程演示了如何使用深度卷积生成对抗网络(DCGAN)生成手写数字图片.该代码是使用 Keras Sequential API 与 tf.GradientTape 训练循环编写的. 什么是生成对抗网络 ...

最新文章

  1. windows下cd无法切换到指定目录下
  2. 独家 | 揭秘2021双11背后的数据库硬核科技
  3. 为什么不应该使用(长期存在的)功能分支
  4. 在C#中使用JSON
  5. 2018 年的 Apache 社区不平凡:让数字来说话
  6. java.lang.ClassNotFoundException: org.apache.commons.codec.DecoderException
  7. Exception in thread main java.lang.NoClassDefFoundError解决了
  8. 生成指定位数的坐标方法-2优化版本--建议使用的版本
  9. html中img显示旋转,css如何实现图片的旋转展示效果(代码示例)
  10. python列表用什么符号表示_python列表类型
  11. arXiv上引用文章在bibtex下的引用格式
  12. win8 完全禁用uac的方法
  13. 计算机文件夹加密文件,电脑上怎么创建加密文件夹?三种方法教给你
  14. ctfshow 菜狗杯wp
  15. 自习室 《大学生创新创业课程设计》
  16. Unknown label type: ‘continuous
  17. 【素数表】前20000个素数
  18. 【NOIP2018】旅行 (洛谷P5049 / P5022) O(nlogn)题解
  19. FFmpeg:‘UINT64_C‘ was not declared in ths scope
  20. Process用法与进程详解

热门文章

  1. xcconfig编写指南
  2. [书籍翻译]12周撰写期刊文章 学术出版成功指南——第 2 周:开始您的文章
  3. python练习题,使用爬虫爬取百度百科内置BeautifulSoup安装方法
  4. 南加大计算机研究生录取率,美国南加州大学研究生录取率
  5. 每日诗词 【登徒子好色赋并序】
  6. 读书感受 之 《数学之美》
  7. ​我的第三本译作《机器学习即服务》上架啦
  8. 盖茨基金会参投,专注药物缓释的Lyndra获5500万美元B轮融资|36氪新药新疗法系列...
  9. js鼠标跟随特效鼠标滑过出现小星星动画
  10. 女人,你真的懂自己吗:女生空间QQ情感日志