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,一经查实,立即删除!

相关文章

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

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

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…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-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.视频效果展示…

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; …

软件测试基础三(前端知识)

前端基础 1. HTML&#xff08;超文本标记语言&#xff09; 1.1. 基本概念 定义&#xff1a;HTML 是用来描述网页的一种语言&#xff0c;指的是超文本标记语言&#xff08;Hyper Text Markup Language&#xff09;。它不是编程语言&#xff0c;而是一种标记语言&#xff0c;由…

优化用于传感应用的衬底集成波导技术

ANSYS HFSS 是一款功能强大的电磁仿真软件&#xff0c;支持为微流体生物传感器应用设计和分析衬底集成波导 &#xff08;SIW&#xff09; 技术。它为快速设计优化、材料选择、系统集成和虚拟原型制作提供了一个强大的平台。借助 ANSYS HFSS&#xff0c;研究人员和工程师可以高效…

Linux 开机自动挂载硬盘

在日常使用 Linux 系统的过程中&#xff0c;我们可能需要挂载一些机械硬盘或者移动硬盘来存储数据。手动挂载虽然简单&#xff0c;但每次重启后都需要重新操作&#xff0c;未免有些繁琐。那么&#xff0c;如何让硬盘在开机时自动挂载呢&#xff1f;本篇博客将详细介绍如何通过配…

[项目] C++基于多设计模式下的同步异步日志系统

[项目] C基于多设计模式下的同步&异步日志系统 文章目录 [项目] C基于多设计模式下的同步&异步日志系统日志系统1、项目介绍2、开发环境3、核心技术4、日志系统介绍4.1 日志系统的价值4.2 日志系统技术实现4.2.1 同步写日志4.2.2 异步写日志 5、相关技术知识5.1 不定参…

[论文阅读] | 智能体长期记忆

更新记录&#xff1a; 2024.11.2 人大高瓴长期记忆综述 文章目录 人大高瓴长期记忆综述智能体与环境交互记忆的来源/形式/操作来源&#xff1a;(1)当前任务历史信息 (2)其他任务的信息 (3)外部知识形式&#xff1a;如何表达记忆的内容&#xff0c;通过(1)文本 (2)参数(训练到模…

Rust 力扣 - 59. 螺旋矩阵 II

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 使用一个全局变量current记录当前遍历到的元素的值 我们只需要一圈一圈的从外向内遍历矩阵&#xff0c;每一圈遍历顺序为上边、右边、下边、左边&#xff0c;每遍历完一个元素后current 我们需要注意的是如果上…

AppInventor2能否用网络摄像头画面作为屏幕的背景?

// 视频是否可以作为背景&#xff1f; // 有会员提问&#xff1a;能否用网络摄像头的实时画面作为屏幕的背景&#xff1f;就跟这个一样背景全覆盖&#xff1a; 摄像头画面是一个在线的网站链接视频流。 // 原先思路 // 1、目前原生组件无法直接实现这个功能&#xff0c;屏幕…

国产操作系统卖疯了!最营收7.84亿,最低1.5亿

最近看各种报道&#xff0c;似乎国产化有提速的绩效&#xff0c;那么既然如此&#xff0c;各个国产操作系统厂商是不是都起飞了呢&#xff1f; 周末闲暇之余&#xff0c;我们来看看各家的营收表现。 银河麒麟2024年1-9月一共卖了多少钱&#xff1f; 前几天中国软件发布了202…