PKI-密钥对/jks/证书的相关操作(keytool、openSSL)


title: 密钥对的相关操作(keytool、openSSL)
date: 2018-10-25 10:01:32
tags:
密码学


cacerts

概念

cacerts:trusted certificate authority (CA) certificates

​ The cacerts file is a collection of trusted certificate authority (CA) certificates. Sun Microsystems™ includes a cacerts file with its SSL support in the Java™ Secure Socket Extension (JSSE) tool kit and JDK 1.4.x. It contains certificate references for well-known Certificate authorities, such as VeriSign™. Its format is the “keystore” format defined by Sun. An administrator can edit the cacerts file with a command line tool (also provided by Sun) called keytool. For more information about keytool, see the Sun Web site.

Note: The default password for the cacerts file supplied by Sun is changeit. You must use this password to view the contents or to import a new certificate. For security reasons, change the default password.

The essential requirement is that the certificate authority that signed the HPE Service Manager server’s certificate must be in the list of certificate authorities named in this file. To use a self-issued server certificate created with OpenSSL or a tool such as Microsoft Certificate Server™, you must import the certificate for this private certificate authority into the cacerts file that the client uses for SSL. If you do not import the certificate, SSL connections fail because the Java SSL implementation does not recognize the certificate authority.

​ 简单的来说,cacerts是java用于接受受信任的证书已经证书链,cacerts默认包含有一些众所周知的权威证书,以及证书链。当你需要使用https协议,为你的服务添加ssl的时候,需要将你的证书和证书链导入cacerts(如果已经导入过了,就不需要了)。

keytool

查看java自带的cacerts

# Linux
cd $JAVA_HOME/jre/lib/security
keytool -list -storepass changeit -keystore "./cacerts"		# 查询所有的证书
keytool -list -storepass changeit -keystore "./cacerts" |grep server 
# 查询alias带有server的证书

# Windows
cd %JAVA_HOME%/jre/lib/security
keytool -list -storepass changeit -keystore "./cacerts"		# 查询所有的证书
keytool -list -storepass changeit -keystore "./cacerts" |findstr /i server
# 查询alias带有server的证书

产生jks密钥对

# 产生一个签名算法为SHA256withRSA的,密钥长度为2048,的RSA密钥对,即软证书server.jks
keytool -keystore server.jks -genkey -alias xxx_server -keyalg RSA -sigalg SHA256withRSA -keysize 2048

导出jks的证书

# 证书,即公钥
keytool -export -alias server -keystore server.jks -rfc -file sign.cer 

导入证书到cacerts

cd $JAVA_HOME/jre/lib/security
# 将证书导入cacerts,并别名为server
keytool -import -keystore "./cacerts" -alias server -trustcacerts -storepass changeit -file /var/tmp/certs/Server.cer

在cacerts上删除证书

cd $JAVA_HOME/jre/lib/security
# 删除命名为server的证书
keytool -delete -alias server -keystore "./cacerts" -storepass changeit

参数分析

-genkey 在用户主目录中创建一个默认文件".keystore" 的软证书,产生一个mykey的别名,其中包含用户的公钥、私钥和证书
(在没有指定生成位置的情况下,keystore会存在用户系统默认目录,如:对于window xp系统,会生成在系统的C:/Documents and Settings/UserName/文件名为“.keystore”)
-alias 产生别名,keytool将通过这个别名进行查找
-keystore 指定密钥库的名称(产生的各类信息将不在.keystore文件中)
-keyalg 指定密钥的算法 (如 RSA DSA(如果不指定默认采用DSA),推荐采用RSA)
-validity 指定创建的证书有效期多少天
-keysize 指定密钥长度
-storepass 指定密钥库的密码(获取keystore信息所需的密码)
-keypass 指定别名条目的密码(私钥的密码)
-dname 指定证书拥有者信息
-list 显示密钥库中的证书信息
-v 显示密钥库中的证书详细信息
-export 将别名指定的证书导出到文件
-file 参数指定导出到文件的文件名
-delete 删除密钥库中某条目
-printcert 查看导出的证书信息
-keypasswd 修改密钥库中指定条目口令
-storepasswd 修改keystore口令
-import 将已签名数字证书导入密钥库

证书拥有者信息

例如: “CN=名字与姓氏,OU=组织单位名称,O=组织名称,L=城市或区域名称,ST=州或省份名称,C=单位的两字母国家代码”

常用命令:

keytool -export -alias 需要导出的别名 -keystore 指定keystore -file 指定导出的证书路径位置,及证书名称 -storepass 密码

keytool -printcert -file yushan.crt

keytool -delete -alias 指定需删除的别 -keystore 指定keystore -storepass 密码

keytool -list -v -keystore 指定keystore -storepass 密码

keytool -import -alias 指定导入条目的别名 -keystore 指定keystore -file 需导入的证书

keytool -storepasswd -keystore e:/yushan.keystore(需修改口令的keystore) -storepass 123456(原始密码) -new yushan(新密码)

keytool -keypasswd -alias 需修改的别名 -keypass 旧密码 -new 新密码 -storepass keystore密码 -keystore sage

下面是各选项的缺省值。
-alias “mykey”
-keyalg “DSA”
-keysize 1024
-validity 90
-keystore 用户宿主目录中名为 .keystore 的文件
-file 读时为标准输入,写时为标准输出

参考

  1. 什么是cacerts: https://docs.microfocus.com/SM/9.50/Hybrid/Content/security/concepts/what_is_a_cacerts_file.htm
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章