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
以上为个人经验,希望能给大家一个参考,也希望大家多多支持猪先飞。如有错误或未考虑完全的地方,望不吝赐教。
相关文章
- 这篇文章主要介绍了如何利用java语言实现经典《复杂迷宫》游戏,文中采用了swing技术进行了界面化处理,感兴趣的小伙伴可以动手试一试...2022-02-01
java 运行报错has been compiled by a more recent version of the Java Runtime
java 运行报错has been compiled by a more recent version of the Java Runtime (class file version 54.0)...2021-04-01- 这篇文章主要介绍了在java中获取List集合中最大的日期时间操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
- 这篇文章主要介绍了教你怎么用Java获取国家法定节假日,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下...2021-04-23
- 这篇文章主要介绍了Java如何发起http请求的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-31
- 说起C#和Java这两门语言(语法,数据类型 等),个人以为,大概有90%以上的相似,甚至可以认为几乎一样。但是在工作中,我也发现了一些细微的差别...2020-06-25
- 这篇文章主要介绍了解决Java处理HTTP请求超时的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-29
- 这篇文章主要介绍了java 判断两个时间段是否重叠的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
- 这篇文章主要介绍了超简洁java实现双色球若干注随机号码生成(实例代码),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-02
- 这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
java 画pdf用itext调整表格宽度、自定义各个列宽的方法
这篇文章主要介绍了java 画pdf用itext调整表格宽度、自定义各个列宽的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-31- 这篇文章主要介绍了java正则表达式判断前端参数修改表中另一个字段的值,需要的朋友可以参考下...2021-05-07
Java使用ScriptEngine动态执行代码(附Java几种动态执行代码比较)
这篇文章主要介绍了Java使用ScriptEngine动态执行代码,并且分享Java几种动态执行代码比较,需要的朋友可以参考下...2021-04-15- 这篇文章主要介绍了Java开发实现人机猜拳游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-08-03
- 这篇文章主要介绍了Java List集合返回值去掉中括号('[ ]')的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-29
Java中lombok的@Builder注解的解析与简单使用详解
这篇文章主要介绍了Java中lombok的@Builder注解的解析与简单使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-01-06- 下面小编就为大家带来一篇java中String类型变量的赋值问题介绍。小编觉得挺不错的。现在分享给大家,给大家一个参考。...2016-03-28
Java 8 Stream 的终极技巧——Collectors 功能与操作方法详解
这篇文章主要介绍了Java 8 Stream Collectors 功能与操作方法,结合实例形式详细分析了Java 8 Stream Collectors 功能、操作方法及相关注意事项,需要的朋友可以参考下...2020-05-20- 这篇文章主要介绍了Java线程池中的各个参数如何合理设置操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-06-19
- 在Java中,我们可以利用多线程来最大化地压榨CPU多核计算的能力,下面这篇文章主要给大家介绍了关于java中多线程与线程池基本使用的相关资料,需要的朋友可以参考下...2021-09-13