Java 使用keytool创建CA证书的操作

keytool是一个密钥和证书管理工具

1.keytool工具位置

keytool工具在 JDK 的安装目录的 bin 目录下面

2.keytool工具命令展示

打开命令行进入 bin 目录,然后输入命令 keytool.exe,就能看见keytool工具支持哪些命令,如下图所示:

注意下面的用法提示:使用 “keytool -command_name -help” 获取 command_name 的用法

3.查看具体命令用法

这里我们使用 -genkeypair 命令来创建密钥库,先来看看 genkeypair 命令的用法,如下图所示:

4.新建密钥库

.\keytool.exe -genkeypair -alias CA -keyalg RSA -validity 30 -keystore D:\keytoolCert\.CAkeystore

4.1.参数说明

-alias CA: alias表示别名的意思,这里别名为 CA,如果不写的话,它的默认值为 mykey

-keyalg RSA: 密钥算法名称,这里使用RSA算法

-validity 30: 有效天数为30天

-keystore D:\keytoolCert.CAkeystore: 指定密钥库存放的位置。

命令输入过后会让我们输入密码、唯一判别名(dname)和密钥口令

注意

密钥库的密码至少必须6个字符,可以是纯数字或者字母或者数字和字母的组合等等

名字与姓氏"应该是输入域名,而不是我们的个人姓名,其他的可以不填

这条命令的完整含义是:使用 keytool.exe ,创建一个别名为 CA,算法为 RSA,有效天数为30天的密钥,并将它存放在 D:\keytoolCert\ 目录下的一个名叫 .CAkeystore 的密钥库中,如果密钥库不存在则自动创建。

执行完上述命令后,在 D:\keytoolCert\ 目录下生成了一个".CAkeystore"的文件,如下图所示:

5.查看密钥库里面的信息

命令如下:

.\keytool.exe -list -keystore D:\keytoolCert\.CAkeystore -v

结果如下:

5.1.查看密钥库信息其他命令

查看密钥库中指定密钥的信息:

keytool.exe -list -alias CA -keystore
“D:\keytoolCert.CAkeystore” -v

6.导出密钥到证书文件

.\keytool -export -alias CA -file D:\keytoolCert\pendIssueCert_1.cer -keystore D:\keytoolCert\.CAkeystore

执行完上述命令后,在 D:\keytoolCert\ 目录下生成了一个"pendIssueCert_1.cer"的证书文件,如下图所示:

7.查看指定证书文件的信息:

keytool.exe -printcert -file D:\keytoolCert\.pendIssueCert_1.cer -v

8.导入证书

将证书文件 pendIssueCert_1.cer 导入到名为 .pendIssuekeystore 的证书库中

keytool -import -keystore D:\keytoolCert\.pendIssuekeystore -file D:\keytoolCert\pendIssueCert_1.cer

注意:

D:\keytoolCert.pendIssuekeystore 密钥库不存在会自动创建

导入时没有输入 -alias 那么它的别名就是 mykey ,如果有需要可以自己指定别名

9.删除密钥库中的条目

删除密钥库 .pendIssuekeystore 中别名为 mykey 的证书条目

keytool -delete -keystore D:\keytoolCert\.pendIssuekeystore -alias mykey

删除前先查看 有一个密钥,删除后再查看就没有了,表示删除成功。

修改证书条目的口令

将密钥库 .pendIssuekeystore 中别名为 mykey 的证书条目的密码修改为 123456

keytool -keypasswd -alias mykey -keystore D:\keytoolCert.pendIssuekeystore

补充:Java Keytool生成数字证书/.cer/.p12文件

任何机构或者个人都可以申请数字证书,并使用由CA机构颁发的数字证书为自己的应用保驾护航。常用的两个证书管理工具:KeyTool,OpenSSL—>构建CSR(Certificate Signing Request,数字证书签发申请),交由CA机构签发,形成最终的数字证书。

最近用到p12文件,就记录一下如何使用jdk自带的keytool来创建p12文件

创建私钥和证书

1.打开cmd,切换到jdk的bin目录下

2.输入命令

keytool -genkeypair -alias serverkey -keyalg RSA -keysize 2048 -validity 3650 -keystore C:\Users\i343740\Desktop\p12test.keystore

参数解释:

storepass keystore 文件存储密码,不加这个参数会在后面要求你输入密码

keypass 私钥加解密密码

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

dname 证书个人信息

keyalg 采用公钥算法,默认是DSA,这里采用RSA

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

validity 有效期

keystore 指定keystore文件储存位置

3.命令行会要求你输入一些信息,这里只是试用,随意输一些就可以了

What is your first and last name?
 [Unknown]: xu
What is the name of your organizational unit?
 [Unknown]: SAP
What is the name of your organization?
 [Unknown]: SAP
What is the name of your City or Locality?
 [Unknown]: ShangHai
What is the name of your State or Province?
 [Unknown]: ShangHai
What is the two-letter country code for this unit?
 [Unknown]: CN
Is CN=xu, OU=SAP, O=SAP, L=ShangHai, ST=ShangHai, C=CN correct?
 [no]: Y

4.最后一行: 输入的密钥口令,这里因为我们在上面设置了一个密钥库的口令,因此这里的口令如果和上面设置的口令一样的话,就直接回车就好,如果两个口令不一样,那么我们可以输入新的口令,回车

5.经过上述操作,秘钥库中已经创建了数字证书(没有经过CA认证),但不影响我们使用。我们可以将数字证书导出,发送给合作伙伴进行加密交互。

查看keystore详情

1.输入命令

keytool -v -list -keystore C:\Users\i343740\Desktop\p12test.keystore

可以看到keystore详情:

Keystore type: jks
Keystore provider: SUN
Your keystore contains 1 entry
Alias name: serverkey
Creation date: Sep 18, 2018
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=xu, OU=SAP, O=SAP, L=ShangHai, ST=ShangHai, C=CN
Issuer: CN=xu, OU=SAP, O=SAP, L=ShangHai, ST=ShangHai, C=CN
Serial number: 68a01736
Valid from: Tue Sep 18 15:29:16 CST 2018 until: Fri Sep 15 15:29:16 CST 2028
Certificate fingerprints:
   MD5: 6D:02:83:77:1D:8F:80:4A:7E:71:10:E5:D1:F7:DA:A1
   SHA1: 50:A7:46:DE:BC:9E:0E:22:AC:AD:85:63:3D:29:FB:FF:75:66:55:3E
   SHA256: 78:C4:65:71:A2:54:2B:56:2E:7B:8F:16:7D:EB:53:46:4E:9C:0C:AF:55:F8:3E:0C:37:FC:CD:A6:8C:04:9E:84
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3
......(还有一些)

导出本地证书(.cer)

1.输入命令

keytool -exportcert -keystore C:\Users\i343740\Desktop\p12test.keystore -file C:\Users\i343740\Desktop\p12test.cer -alias serverkey

参数解释:

-export 表示证书导出操作

-keystore 指定秘钥库文件

-file 指定导出文件路径

-storepass 输入密码

-rfc 指定以Base64编码格式输出

打印数字证书

1.输入命令

Keytool -printcert -file C:\Users\i343740\Desktop\p12test.cer

将.cer格式的证书转换为p12证书

1.输入命令

keytool -importkeystore -srckeystore C:\Users\i343740\Desktop\p12test.keystore -destkeystore C:\Users\i343740\Desktop\p12test.p12 -srcalias serverkey -destalias serverkey -srcstoretype jks -deststoretype pkcs12 -noprompt

2.输入目标密钥库口令和源密钥库口令即可(目标密钥库口令指的是我们要为.p12证书设置的口令,而源密钥库口令则指的是我们最初为.cer证书设置的密钥库口令)

P12的两个命令:

生成证书:

keytool -genkey -v -alias client -keyalg RSA-storetype PKCS12 -keystore C:\Users\i343740\Desktop\p12test.p12

导出证书:

keytool -export -alias client -keystore C:\Users\i343740\Desktop\p12test.p12-storetype PKCS12 -storepass 123456 -rfc -file C:\Users\i343740\Desktop\p12test.cer

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • Java通用BouncyCastle实现的DES3加密的方法

    对于BouncyCastle类库(包)来说,他提供了很多加密算法,在与.net和java进行相互加解密过程中,得到了不错的应用,本文以DES3为例,来说一下DES3加解密的过程. 加密过程 明文字符转为byte数组 对密钥进行处理,处理后一般为16或者24字节 对明文进行DES3加密,生成密文的byte数组 对密文byte数组进行base64的编码 解密过程 对密文byte数组进行base64的解码 对密钥进行处理,处理后一般为16或者24字节 对解码后的byte数组进行DES3解密 对解密之后

  • Java中try catch 的基本用法示例

    前言 我们编译运行程序出错的时候,编译器就会抛出异常.抛出异常要比终止程序灵活许多,这是因为 的Java提供了一个"捕获"异常的的处理器(处理器)对异常情况进行处理. 如果没有提供处理器机制,程序就会终止,并在控制台上打印一条信息,给出异常的类型.L 比如:使用了NULL引用或者是数组越界等. 异常有两种类型:未检查异常和已检查异常对于已检查异常,处理器器将会检查是否提供了处理器. 然而有许多の异常,如:访问null引用,都属于未检查异常.编译器不会查看是否为这些错误提供了处理器.毕竟

  • java结合keytool如何实现非对称签名和验证详解

    前言 本文主要介绍了关于java结合keytool实现非对称签名和验证的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 参考 还有姊妹篇:java结合keytool实现非对称加密和解密 keytool的使用 keytool是JDK自带的一个密钥库管理工具.这里只用到了keytool的部分功能,包括生成密钥对,导出公钥等.keytool生成的公钥/私钥对存放到一个到了一个文件中,这个文件有密码保护,通称为keystore. 生成密钥对 $ keytool -genkey

  • 详解Java删除Map中元素java.util.ConcurrentModificationException”异常解决

    今天在使用map并需要根据某些条件删除map元素时,自然而然想到调用Map中的remove(Object key)函数进行删除,代码如下: //遍历map,如果key<5,那么就删除此元素. Map<Integer, Integer> users = new LinkedHashMap<Integer, Integer>(); for (Map.Entry<Integer,Integer> entry : users.entrySet()){ for (int i

  • java结合keytool如何实现非对称加密与解密详解

    前言 参考:java结合keytool实现非对称签名与验证 那一篇讲签名,这一篇将加密解密.在java安全体系中,签名属于JAAS模块,加解密属于JCE模块. keytool的使用 keytool是JDK自带的一个密钥库管理工具.这里只用到了keytool的部分功能,包括生成密钥对,导出公钥等.keytool生成的公钥/私钥对存放到一个到了一个文件中,这个文件有密码保护,通称为keystore. 生成密钥对 $ keytool -genkey -alias signLegal -keystore

  • Java 使用keytool创建CA证书的操作

    keytool是一个密钥和证书管理工具 1.keytool工具位置 keytool工具在 JDK 的安装目录的 bin 目录下面 2.keytool工具命令展示 打开命令行进入 bin 目录,然后输入命令 keytool.exe,就能看见keytool工具支持哪些命令,如下图所示: 注意下面的用法提示:使用 "keytool -command_name -help" 获取 command_name 的用法 3.查看具体命令用法 这里我们使用 -genkeypair 命令来创建密钥库,先

  • Java使用Thread创建多线程并启动操作示例

    本文实例讲述了Java使用Thread创建多线程并启动操作.分享给大家供大家参考,具体如下: 按照教程实现了一个单线程的创建,但是单线程的创建于启动并不是很有实用价值的.毕竟直接在main方法中放着相关的执行操作本身也就是一种单线程的实现.接下来在之前用过的代码基础上稍作修改,形成如下代码: class ThreadDemo extends Thread { ThreadDemo(){}; ThreadDemo(String szName) { super(szName); } public v

  • Linux之Centos8创建CA证书教程

    安装所需文件 Yum install openssl-* -y 创建数据库索引文件 输入证书序列号为01 生成私钥文件 通过私钥来创建CA证书 openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out /etc/pki/CA/cacert.pem 给用户颁发证书(以/data/skills目录为例) 申请私钥 用申请的私钥文件来申请证书 openssl -req -new -key /data/skills

  • Java实现动态创建类操作示例

    本文实例讲述了Java实现动态创建类操作.分享给大家供大家参考,具体如下: Java可以创建动态类,学习看到,此处作为笔记. 代码如下: import java.io.IOException; import java.lang.reflect.Method; import java.net.URI; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.tools.Java

  • java使用反射创建并操作对象的方法

    Class 对象可以获得该类里的方法(由 Method 对象表示).构造器(由 Constructor 对象表示).成员变量(由 Field 对象表示),这三个类都位于 java.lang.reflect 包下,并实现了 java.lang.reflect.Member 接口.程序可以通过对象来执行对应的方法,通过 Constructor 对象来调用对应的构造器创建实例,能通过 Field 对象直接访问并修改对象的成员变量值. 创建对象 通过反射来生成对象需要先使用 Class 对象获取指定的

  • Java详解IO流创建读取与写入操作

    目录 概念 io流对应的方法 一.File方法(创建文件) 二.FileInputStream(获取字节方法)输入流 三.FileOutputStream(写入字节方法)输出流 总结 概念 IO流可以初步的理解为数据间的传输,我们将一组数据入:1234567,将他们从hello文件中转入haha文件中,使用程序的方法进行转入的话则需要一个一个的传入,即为一个字节一个字节的传输,我们每次只能传入或读取一个字节,这就是io流的大致流程,io流对任何类型的文件都可以进行读取.如:文本文件,图片,歌曲m

  • Java中keytool的使用

    目录 Keytool简单介绍 keytool的使用 1.相关概念 2.相关命令 2.生成秘钥库 3.查看证书 5.导出证书 6.修改密码 Keytool简单介绍 keytool 是个密钥和证书管理工具.它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务.在JDK 1.4以后的版本中都包含了这一工具,它的位置为“%JAVA_HOME%\bin\keytool.exe”. keytool的使用 keytool为java原

  • java之File对象对文件的操作常用的几个方法(推荐)

    File对象是对文件操作最常用的类,平常工作总用的很多,贴出来了几个我工作常用的几个方法.简单总结了下 直接上代码: //构建文件对象 File file=new File("E:/android_demo/a"); File fileTest=new File("E:/android_demo/a/test.mp3"); //获取文件的父路径 File f=file.getParentFile(); System.out.println("f==&quo

随机推荐