Java keytool keystore的相关概念介绍与使用

参考资料

  1. Java证书工具keytool用法总结
  2. keytool-简介
  3. CA证书介绍与格式转换
  4. 密钥,私钥,公钥的区分
  5. とほほのOpenSSL入門

目录

  • 一. 概念
    • 1.1 keystore文件
    • 1.2 keytool
    • 1.3 非对称加密
      • 1.3.1 加密解密
      • 1.3.2 数字签名认证
      • 1.3.3 通信中的加密与签名过程
    • 1.4 证书格式
    • 1.5 openssl
    • 1.6 X.509标准
  • 二. keytool工具使用
    • 2.1 生成
      • 2.1.1 生成keystore文件
      • 2.1.2 指定私钥生成公钥
    • 2.2 查看
      • 2.2.1 查看所有密钥与keystore的类型
      • 2.2.2 查看keystore内的指定密钥的详情
    • 2.3 修改
      • 2.3.1 修改指定的密钥别名
      • 2.3.2 修改指定密钥的密码
      • 2.3.3 修改keysore密码
    • 2.4 删除
    • 2.5 密钥导入keystore


一. 概念

1.1 keystore文件

keystore文件可以理解为一个容器,用来存储公钥和私钥,主要用于确保身份验证、数据加密和数字签名的安全。

⏹文件类型

  • JKS (Java KeyStore)
    • Java8之前默认的 keystore 类型,专门用于 Java 应用程序。
  • PKCS12
    • 国际标准的 keystore 格式
    • 存储加密的私钥和证书的标准化方式
    • 兼容性好,与编程语言无关,适用于各种平台和工具。

💥注意
keystore文件只是一个容器,里面可以内置多个公钥和私钥。

1.2 keytool

keytool 是JDK 1.4以后自带的密钥和证书管理工具,主要用于生成密钥对、创建、管理、导入和导出证书等。

  • Java8之前,通过keytool命令生成的keystore文件的默认类型就是JKS
  • Java9之后的版本将 PKCS12 作为默认的 keystore 类型。

⏹该工具的路径为%JAVA_HOME%\bin\keytool.exe,Java配置了环境变量之后,便可在命令行中使用。

在这里插入图片描述

1.3 非对称加密

⏹使用一对密钥(公钥和私钥),来进行数据加密和解密。

核心特性:

  • 公钥和私钥是成对的,公钥用于加密,私钥用于解密
  • 可以通过私钥生成公钥,但是无法通过公钥生成私钥。
  • 私钥必须保密,而公钥可以公开发布。

1.3.1 加密解密

  • 发送方使用接收方的公钥加密数据。
  • 加密后的数据通过网络传输给接收方
  • 接收方使用自己的私钥解密数据,恢复明文。

1.3.2 数字签名认证

  • 使用私钥加密摘要(生成签名),意味着只有拥有私钥的人(即签名者)才能创建这个签名,从而确认签名的真实性。
  • 任何人持有发送方的公钥都可以验证签名(通过解密签名获得摘要并与数据摘要比较),但只有私钥持有者才能生成签名,这确保了签名的唯一性和数据的来源可信。

1.3.3 通信中的加密与签名过程

假设 A 要与 B 进行安全通信,通常会按以下步骤操作:

A 加密数据的过程

⏹签名数据(完整性和身份认证):

  • A 使用自己的私钥对数据的哈希摘要进行加密,生成数字签名。
  • 然后,A 将签名和数据一起发送给 B,以便 B 可以验证数据的真实性和来源。

⏹加密数据(机密性):

  • A 使用B的公钥对数据进行加密(有时包括签名部分一起加密),确保数据在传输过程中保持机密。
  • 加密后的数据发送给 B,只有 B 的私钥可以解密。

B 接收数据后的验证过程

⏹解密数据:

  • B使用自己的私钥解密收到的数据,得到原始数据和签名。

⏹验证签名:

  • B 使用A的公钥解密签名,得到 A 生成的哈希摘要。
  • B 对解密得到的数据再次生成哈希摘要,并与 A 提供的摘要进行比较。
  • 如果两者一致,B 可以确认数据未被篡改,并且确认数据确实来自 A。

1.4 证书格式

⏹我们常说的证书其实指的就是公钥,公钥是公开给其它人使用的,常见的后缀有以下几种:

  • .crt
    • crt后缀的证书常用于Unix/Linux系统中。
    • 证书是PEM格式(文本编码格式),通常使用Base64编码,可以直接以文本编辑器查看。
  • .cer
    • cer后缀的证书常用于Windows系统,兼容Windows 的证书管理器。
    • 证书是DER格式(二进制编码格式),无法以文本形式查看,需要专门的证书工具查看。
  • .pem
    • pem(Privacy Enhanced Mail)格式的证书是一种基于 Base64 编码的可读文本格式。
    • pem格式的文件使用明确的分隔符,标明数据类型
      • -----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE-----:表示证书数据
      • -----BEGIN PRIVATE KEY----- 和 -----END PRIVATE KEY-----:表示私钥数据
      • -----BEGIN PUBLIC KEY----- 和 -----END PUBLIC KEY-----:表示公钥数据

1.5 openssl

OpenSSL 是一个广泛使用的开源工具集,提供了实现安全套接字层(SSL)和传输层安全(TLS)协议所需的各种功能。
也支持加密、解密、证书生成和管理等功能。

⏹可以使用openssl对证书的格式进行转换。

  • .cer 转换为 .pem
  • .pem 转换为 .cer

⏹官网:https://www.openssl.org/

1.6 X.509标准

用于定义数字证书的格式和证书验证机制,是公钥基础设施(PKI)的核心部分。
主要用于在计算机网络中验证身份,并在安全通信中提供数字证书。

⏹数字证书格式:

  • X.509 定义了数字证书的结构,包括证书的各个部分,如持有者信息、公钥、颁发者信息和有效期等。
  • 证书通常包括以下字段:
    • 版本:指示 X.509 证书的版本(如 V1、V2、V3)。
    • 序列号:由证书颁发机构(CA)分配的唯一标识符。
    • 颁发者:证书颁发机构的名称和信息。
    • 主题:持有者的名称和信息。
    • 公钥信息:持有者的公钥及其算法。
    • 有效期:证书的有效起始时间和结束时间。
    • 签名:由 CA 使用其私钥生成的证书签名。

⏹公钥基础设施(PKI):

  • X.509 是公钥基础设施的重要组成部分,它使得通过数字证书来验证公钥的合法性成为可能。
  • PKI 包括 CA、证书撤销列表(CRL)、注册机构(RA)等组件,支持数字证书的管理和验证。

⏹证书链:

  • X.509 证书可以形成证书链,信任链中每个证书都是由上级 CA 签名的,最终链接到一个根证书。
  • 通过验证证书链中的每个证书,可以确认目标证书的有效性。

⏹下图是由X.509标准生成的.cer后缀DER格式的公钥证书

在这里插入图片描述


二. keytool工具使用

💥以下所涉及的所有命令,为了方便显示都采取了折行显示,实际使用时,建议转换为一行使用。

⏹要了解某个命令的参数可以使用keytool -command_name -help来获取。
例如:使用keytool -genkeypair -help可以查看genkeypair命令
在这里插入图片描述

2.1 生成

2.1.1 生成keystore文件

⏹生成的keystore文件内含一对密钥(公钥和私钥)

keytool -genkeypair -alias <密钥别名> -keyalg RSA -sigalg SHA384withRSA -keysize 2048 -validity 365 -keystore <keystore文件所在路径>-storepass <keystore密码># 问题组1
您的名字与姓氏是什么?
您的组织单位名称是什么?
您的组织名称是什么?
您所在的城市或区域名称是什么?
您所在的省//自治区名称是什么?
该单位的双字母国家/地区代码是什么?# 问题组2
私钥的密码

2.1.2 指定私钥生成公钥

⏹根据keystore中的指定私钥,生成cer格式的公钥

keytool -exportcert -alias <密钥别名>-keystore <keystore文件所在路径>-storepass <keystore密码>-file <cer文件所在路径>

⏹通过openssl将cer格式的公钥转换为pem格式的公钥

openssl x509 -inform der-in clientkey.cer-outform pem-out clientkey.pem

2.2 查看

2.2.1 查看所有密钥与keystore的类型

  • 可以看到一个keystore内所有的公钥和私钥
  • 可以查看keystore的类型,到底是 JKS 还是 PKCS12
keytool -list -keystore <keystore文件所在路径> -storepass <keystore密码>

2.2.2 查看keystore内的指定密钥的详情

keytool -list -v -alias <密钥别名> -keystore <keystore文件所在路径> -storepass <keystore密码>

2.3 修改

2.3.1 修改指定的密钥别名

keytool -changealias -keystore <keystore文件所在路径> -alias <旧别名> -destalias <新别名>

2.3.2 修改指定密钥的密码

keytool -keypasswd -alias <密钥别名> -keypass <旧密钥密码> -new <新密钥密码> -keystore <keystore文件所在路径> -storepass <keystore密码>

2.3.3 修改keysore密码

keytool -storepasswd -new <新keystore密码> -keystore <keystore文件所在路径> -storepass <原keystore密码>

2.4 删除

⏹删除keystore里面的指定密钥

keytool -delete -alias <密钥别名> -keystore <keystore文件所在路径> -storepass <keystore密码>

2.5 密钥导入keystore

⏹将B的keystore中的私钥导入到A的keystore中

keytool -importkeystore-srckeystore <B.keystore>-srcstoretype JKS或者PKCS12-srcalias <B.keystore中的既存私钥别名>-destkeystore <A.keystore>-deststoretype JKS或者PKCS12-destalias <A.keystore中的待导入私钥别名>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/58849.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目的风险

风险识别 项目风险变成问题后可能会影响项目的整体成功&#xff0c;因此通常需要考虑以下通用项目风险因素&#xff1a;  利益相关方之间在技术需求方面的冲突。  由于开发组织的地域分布而导致的沟通问题。  工具和技术&#xff08;包括相关技能&#xff09;。 …

MFC图形函数学习04——画矩形函数

MFC中绘制矩形函数是MFC的基本绘图函数&#xff0c;它的大小和位置由左上角和右下角的坐标决定&#xff1b;若想绘制的矩形边框线型、线宽、颜色以及填充颜色都还需要其它函数的配合。 一、绘制矩形函数 原型&#xff1a;BOOL Rectangle(int x1,int y1,int x2,int y2); …

Apache HTTP Server中级操作指南

Apache 中级操作指南 摘要&#xff1a; 本文深入探讨了 Apache HTTP Server 的中级操作方法&#xff0c;包括模块管理、安全设置、性能优化、反向代理设置等内容。通过这些操作&#xff0c;能够进一步提升 Apache 的功能和性能&#xff0c;满足更复杂的网站需求。 一、引言 …

功能测试:方法、流程与工具介绍

功能测试是对产品的各功能进行验证的一种测试方法&#xff0c;旨在确保软件以期望的方式运行并满足设计需求。以下是对功能测试的详细解释&#xff1a; 一、定义与目的 定义&#xff1a;功能测试&#xff08;Functional Testing&#xff09;&#xff0c;也称为行为测试&#…

自制esp32开发板,wifi和蓝牙工作不正常一例

参照标准打了一块esp32的板&#xff0c;烧录和运行各种基本程序&#xff08;点灯&#xff09;都正常&#xff0c;但是启用蓝牙功能的时候&#xff0c;出现了异常&#xff0c;串口中断了&#xff0c;类似于断电重启了。 各种找原因&#xff0c;各种拆元器件看可能的影响&#x…

el-table 多选默认选中(根据返回的id给数据加默认选中状态)

前言 el-table是我们最常用的展示数据的方式&#xff0c;但是有时候需要用到多选来选择数据&#xff0c;新增数据的时候还好&#xff0c;选中状态都是正常的&#xff0c;但是修改就遇到问题&#xff0c;需要对这个已经选择过的数据加上默认的选中状态&#xff0c;本次就是解决…

openGauss数据库-头歌实验1-5 修改数据库

一、查看表结构与修改表名 &#xff08;一&#xff09;任务描述 本关任务&#xff1a;修改表名&#xff0c;并能顺利查询到修改后表的结构。 &#xff08;二&#xff09;相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 1.如何查看表的结构&#xff1b; 2.如…

树莓派5实时时钟(RTC)

树莓派5板载一个实时时钟模块。它可以通过 USB-C 电源插口右侧板上的 J5(BAT) 插口进行电池供电。如果没有互联网连接来通过 NTP 获取时间&#xff0c;RTC 可能会很有用。 可以设置唤醒警报&#xff0c;将树莓派5切换到非常低功耗的状态&#xff08;大约3mA&#xff09;。当到达…

分段线性回归

5. 分段线性回归 (Piecewise Linear Regression) 分段线性回归是一种简单的方式&#xff0c;尤其当数据的弧度变化不大但有多个不同趋势段时。可以将数据分为多个区间&#xff0c;每个区间内拟合一条直线。最终的模型是这些直线的组合。 优点&#xff1a;模型简单、易解释&am…

Git下载-连接码云-保姆级教学(连接Gitee失败的解决)

Git介绍 码云连接 一、Git介绍 二、Git的工作机制 下载链接&#xff1a;Git - 下载软件包 三、使用步骤 创建一个wss的文件夹&#xff0c;作为‘工作空间’ 四、连接码云账号 五、连接Gitee失败的解决方法 一、Git介绍 Git是一个免费的、开源的分布式版本控制…

网络工程师的瑞士军刀:深度解析20+常用工具

文章目录 网络工程师的瑞士军刀&#xff1a;深度解析20常用工具一、网络诊断与分析工具1.1 Wireshark1.2 Tcpdump1.3 Ping工具1.4 Tracert&#xff08;Windows&#xff09;/Traceroute&#xff08;Linux&#xff09;1.5 Nslookup 二、网络管理工具2.1 SNMP&#xff08;Simple N…

长度最小的子数组(滑动窗口)

给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 示例 1&#xff1a; 输入&#xf…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-30

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-30 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-30目录1. Step Guided Reasoning: Improving Mathematical Reasoning using Guidance Generation and Step Reasoning摘要研究背…

【再谈设计模式】原型模式~复制的魔法师

一、引言 在软件工程、软件开发中&#xff0c;创建对象的过程常常涉及复杂的初始化和配置。在某些情况下&#xff0c;直接复制现有对象比从头开始创建新对象更为高效。原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;允许我们通过复制现有…

【运动的&足球】足球运动员球守门员裁判检测系统源码&数据集全套:改进yolo11-DBBNCSPELAN

改进yolo11-FocalModulation等200全套创新点大全&#xff1a;足球运动员球守门员裁判检测系统源码&#xff06;数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.10.28 注意&#xff1a;由于项目一直在更新迭代&#xff0c;上面“1.图片效果展示”和“2.视频效果展示…

npm入门教程1:npm简介

一、基本概述 定义&#xff1a;npm是一个开源的JavaScript包管理器&#xff0c;它允许开发者下载、安装、发布和管理Node.js包。地位&#xff1a;npm是Node.js生态系统中不可或缺的一部分&#xff0c;为开发者提供了丰富的第三方库和工具。起源&#xff1a;npm由Isaac Z. Schl…

商业数据库 - oracle -表空间

在Oracle数据库中&#xff0c;SYSTEM表空间、USERS表空间和SYSAUX表空间是三个非常重要的系统表空间&#xff0c;它们各自承担着不同的职责和功能。以下是对这三个表空间的详细解释&#xff1a; SYSTEM表空间 定义与功能&#xff1a; SYSTEM表空间是Oracle数据库在创建时自动…

yocto中一些主要可被改写的函数

以下是 Yocto 中一些主要的可被改写的函数&#xff1a; 1. 源代码获取与准备阶段 do_fetch&#xff1a;从指定位置获取源代码。可用于自定义获取源代码的方式、处理认证或对获取的源进行预处理。do_unpack&#xff1a;解压获取到的源代码包。如果解压格式特殊或解压后需额外处…

React 组件生命周期与 Hooks 简明指南

文章目录 一、类组件的生命周期方法1. 挂载阶段2. 更新阶段3. 卸载阶段 二、函数组件中的 Hooks1. useState2. useEffect3. useContext4. useReducer 结论 好的&#xff0c;我们来详细讲解一下 React 类组件的生命周期方法和函数组件中的钩子&#xff08;hooks&#xff09;。 …

数据库连接池实现

目录 前提&#xff1a;如果我要操作多个表&#xff0c;那么就会产生冗余的JDBC步骤&#xff0c;另一个弊端就是每次都需要数据库连接对象&#xff08;Connection&#xff09;&#xff0c;获取效率低下&#xff0c;每次使用时都需要先进行连接 数据库连接池的特点&#xff1a; …