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

本文详细介绍Java中密钥对的生成与管理,包括使用keytool和OpenSSL进行密钥对的操作,以及如何将证书导入cacerts文件,确保HTTPS服务的安全连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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
### 正确使用 `rpm --import` 命令 当遇到提示关于公钥未安装的信息时,意味着系统缺少必要的GPG公钥来验证即将安装的RPM包的真实性。这一步骤至关重要,因为它能确保所使用的软件来自可信源并未经篡改。 要解决这个问题,可以按照如下方法操作: #### 执行命令导入所有匹配的公钥文件 通过终端输入以下指令可一次性导入多个符合条件的公钥文件[^1]: ```bash sudo rpm --import /etc/pki/rpm-gpg/RPM* ``` 这条命令将会遍历指定路径下的所有以`RPM`开头的文件,并将其作为GPG公钥添加至系统的信任列表中。这样做能够有效防止因缺失特定版本的公钥而导致无法正常工作的情况发生。 #### 验证已成功导入的公钥 完成上述步骤之后,可以通过查询当前受信的公钥列表确认新加入的条目是否存在: ```bash rpm -qa gpg-pubkey* ``` 该命令会列出所有的公共密钥及其对应的唯一标识符(ID)。如果之前尝试安装的应用程序再次触发相同的警告,则需进一步排查具体原因;可能是由于网络连接不稳定或是仓库地址配置不当造成的。 #### 特定情况处理——针对EPEL源 对于某些第三方资源库比如EPEL而言,可能会单独指定了不同的公钥位置。此时应参照官方文档说明获取正确的URL链接再执行类似的导入动作[^2]。 例如,对于EPEL 7来说,应该访问官方网站下载最新的GPG密钥并通过下面的方式引入: ```bash sudo rpm --import https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7 ``` #### 注意事项 - 在执行任何涉及权限变更的操作前,请务必先备份重要数据以防万一。 - 如果不确定某个来源的安全性,请勿轻易接受未知发行者的签名材料。 - 对于企业级环境建议遵循内部安全策略指南来进行相应设置调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值