本文概述

Java KeyStore是包含证书的文件。这些证书在Java代码中使用。 KeyStore及其中的证书用于与Java代码建立安全连接。存储的证书可以采用多种格式。 Java KeyStore由KeyStore(java.security.KeyStore)类表示。

例如-如果我们希望通过HTTP进行API调用, 则服务器向我们提供包含公钥的证书, 并且我们的代码必须确定它是否信任该证书。

KeyStore存储以下类型的数据-

私钥

公钥和证书

秘密钥匙

Java KeyStore的方法

方法

描述

Enumeration

aliases()

它返回此密钥库的所有别名。

boolean containsAlias(String alias)

它检查给定的别名是否存在于KeyStore中。

void deleteEntry(String alias)

它将删除从KeyStore提供的别名。

boolean entryInstanceOf(字符串别名, Class entryClass)

它确定给定别名的KeyStore条目是给定entryClass的子类还是实例。

Certificate getCertificate(String alias)

它返回与给定别名关联的证书。

String getCertificateAlias(Certificate cert)

它返回与提供的证书匹配的第一个密钥库条目的名称。

Certificate[] getCertificateChain(String alias)

它返回与给定别名关联的证书链。

Date getCreationDate(String alias)

它返回创建与指定别名关联的条目的日期。

static String getDefaultType()

它返回Java安全属性文件中指定的KeyStore的默认类型, 如果没有找到属性, 则返回字符串“ jks”。

KeyStore.Entry getEntry(字符串别名, KeyStore.ProtectionParameter protParam)

它使用指定的保护参数返回与给定别名关联的KeyStore条目。

static KeyStore getInstance(String type)

它返回指定类型的Keystore对象。

static KeyStore(String type, Provider provider)

它返回指定类型的Keystore对象。

static KeyStore(String type, String provider)

它返回指定类型的Keystore对象。

Key getKey(String alias, char[] password)

它返回与给定别名关联的密钥, 并使用密码来恢复它。

Provider getProvider()

它返回密钥库的提供者。

String getType()

它返回密钥库的类型。

boolean isCertificateEntry(String alias)

如果与别名关联的条目是由setCertificateEntry方法创建的, 或者由setEntry方法与TrustedCertificateEntry创建的, 则返回true。

boolean isKeyEntry(String alias)

如果与别名关联的条目是由setKeyEntry方法创建的, 或者由setEntry方法使用PrivateKeyEntry或SecretKeyEntry创建的, 则返回true。

void load(InputStream stream, char[] password)

它从给定的输入流加载此KeyStore。

void load(KeyStore.LoadStoreParameter param)

它从给定的LoadStoreParameter加载此KeyStore。

void setEntry(String alias, KeyStore.Entry entry, KeyStore.ProtectionParameter protParam)

它为别名分配密钥库条目。

void setKeyEntry(String alias, byte[] key, Certificate[] chain)

它将给定的密钥分配给别名。此处的密钥已受到保护。

void setKeyEntry(String alias, Key key, char[] password, Certificate[] chain)

它将给定的密钥分配给别名, 并使用密码对其进行保护。

int size()

它提供了密钥库中的条目数。

void store(KeyStore.LoadStoreParameter param)

它用于使用给定的LoadStoeParameter存储给定的Keystore。

void store(OutputStream stream, char[] password)

它用于将密钥库存储在给定的输出流中, 并使用给定的密码对其进行保护。

void setCertificateEntry(String alias, Certificate cert)

它将证书映射到给定的别名。

如何创建密钥库?

我们可以通过调用KeyStore的getInstance()方法来初始化其实例来创建KeyStore。

KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());

这将创建具有默认类型的KeyStore。我们可以通过简单地将不同的参数传递给getInstance()方法来创建其他类型的KeyStore。

KeyStore keyStore = KeyStore.getInstance("PKCS12");

如何加载密钥库?

要使用KeyStore实例, 我们首先需要加载它。 KeyStore通常存储在磁盘或任何其他类型的存储中。

要加载密钥库, 我们使用KeyStore load()方法。负载包含两个参数:

一个InputStream, 它指示必须从何处加载KeyStore数据。

一个char数组, 用于存储KeyStore的密码。

char[] keyStorePassword = "123abc".toCharArray();

try(InputStream keyStoreData = new FileInputStream("keystore.ks")){ //keystore.ks //is the file from where we want to load the file

keyStore.load(keyStoreData, keyStorePassword);

}

如何从KeyStore获取密钥?

要从Keystore实例获取密钥, 我们使用getEntry()方法。密钥库的每个密钥都映射有一个别名, 该别名可标识密钥并受密钥密码保护。要访问任何密钥, 我们必须提供两个参数, 即密钥别名和密码。

char[] keyPassword = "abc123".toCharArray();

KeyStore.ProtectionParameter entryPassword =

new KeyStore.PasswordProtection(keyPassword);

KeyStore.Entry keyEntry = keyStore.getEntry("keyAlias", entryPassword);

如何在KeyStore中设置密钥?

你可以使用setEntry方法在KeyStore中设置密钥。此方法采用密码, 别名和密钥输入。以下代码用于在KeyStore中设置密钥。

SecretKey secretKey = getSecretKey();

KeyStore.SecretKeyEntry secretKeyEntry = new KeyStore.SecretKeyEntry(secretKey);

keyStore.setEntry("keyAlias2", secretKeyEntry, entryPassword);

如何存储密钥库?

我们可以将密钥库存储在磁盘或数据库中, 以供以后检索。为此, 我们使用store()方法。

char[] keyStorePassword = "123abc".toCharArray();

try (FileOutputStream keyStoreOutputStream = new FileOutputStream("data/keystore.ks")) {

keyStore.store(keyStoreOutputStream, keyStorePassword);

}

java代码生成密钥库,Java密钥库keystore相关推荐

  1. 如何使用java代码生成_使用Java成功生成代码的7个技巧

    如何使用java代码生成 作为介绍,最近我有点安静,部分原因是我一直在忙于Chronicle-FIX的工作 . 这是Chronicle-Enterprise套件中的一个新的超低延迟库,我们证明了该库可 ...

  2. java代码生成springdao_请JAVA高手推荐个SSH的后台代码生成工具!!要能生成Spring整合Hibernate的DAO类和Service类!...

    我是要生成DAO层和service层的类代码!!!不是配置文件!例如importjava.util.List;importorg.apache.commons.logging.Log;importor ...

  3. android studio秘钥库文件不存在,获得SHA1以及错误java.lang.Exception: 密钥库文件不存在: keystore...

    一:在Android studio中Terminal中切换到相应的盘符下,我的jks文件在D盘,输入keytool -v -list -keystore myfirst.jks   "myf ...

  4. keytool 错误: java.lang.Exception: 密钥库文件不存在: keystore

    keytool 错误: java.lang.Exception: 密钥库文件不存在: keystore 通过Android Studio编译器获取SHA1 第一步.打开Android Studio的T ...

  5. java常见证书类型和密钥库类型

    一 .证书类型 1>证书概念: 证书是对现实生活中 某个人或者某件物品的价值体现 比如古董颁发见证书 ,人颁发献血证等 通常证书会包含以下内容 证书拥有者名称(CN),组织单位(OU)组织(O) ...

  6. java rsa获取密钥_[Java]读取.RSA密钥信息及获取KEYSTORE指纹信息

    本段代码能够读取APK签名中的开发者信息,哈哈,有趣. 感谢曾阳提供的代码. import sun.security.pkcs.PKCS7; import java.io.FileInputStrea ...

  7. java azure blob 查询_快速入门:适用于 Java 的 Azure Blob 存储客户端库 v8 | Microsoft Docs...

    您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. 快速入门:使用 Jav ...

  8. 2020年Java最新面试题整理题库完整版

    JAVA面试题 一.JavaSE编程基础 JDK,JRE,JVM三者关系 a. .jdk是JAVA程序开发时用的开发工具包,其内部也有JRE运行环境JRE. b. .JRE是JAVA程序运行时需要的运 ...

  9. rsa1024 java 128 162_关于Java:RSA解密后,无效的AES密钥大小

    我正在尝试解密已使用AES-128对称加密和随后的RSA-1024非对称加密对生成的对称密钥进行加密的消息. 我收到加密的AES密钥和加密的消息,从pfx文件中提取私钥,然后继续对对称密钥进行解密. ...

  10. Android签名打包、密钥库、密钥全面解析

    前言 Android要求所有的应用必须进行数字签名才可以发布,也就是我们平时所说的使用证书打包然后上传市场.这个签署的过程又包括创建和存储证书,使用不同证书签署不同的构建配置,及自动签署过程. 重要的 ...

最新文章

  1. powertoys中文版
  2. Regex解析字符串
  3. 第五章 数组和指针的关系
  4. nginx fastcgi php-fpm的关系梳理
  5. asp.net mvc3 网站退出系统后使用浏览器的回退按钮依然能返回到内容页的处理方法...
  6. OneNote使用技巧及运用
  7. 【编译原理笔记04】语法分析:自顶向下的分析概述、文法转换、LL1文法
  8. Python:学习笔记(一)
  9. 逻辑回归案例模板——信用卡欺诈检测
  10. PMP课程笔记:第12章 项目采购管理
  11. SXF 安全服务一面
  12. 泰拉瑞亚试图加载不正确的_泰拉瑞亚Switch中文版将在12月19日发售|宝可梦 剑/盾大量细节公布 自动存档可关经验平均分配等...
  13. Android 和风天气+腾讯地图
  14. 满足互动、发出用户民意的BBS论坛
  15. grep与egrep的区别!
  16. 仙人掌之歌——金秋十月(2)
  17. 石油化工设备维护检修规程_2020年(第六届)全国石油化工企业设备维护与检修高端研讨会组委会全体成员祝大家国庆、中秋双节愉快!...
  18. linux开机启动过程(简述)
  19. 基于PHP+MySQL超市库存管理系统的设计与实现
  20. java如何爬取qq音乐_QQ音乐评论爬取

热门文章

  1. 管理员登录页面html代码,自己做的一个后台管理员登陆界面 .cshtml
  2. 第五章---面向对象---小练习
  3. View的测量宽高和最终宽高有什么区别?
  4. 如何使用Lumion创建惊艳的渲染
  5. 服务器系统事件6013,系统-事件ID:6013
  6. 前端POST请求下载文件
  7. 微信html页面缓存问题,浅谈微信页面入口文件被缓存解决方案
  8. 网页做服务器的监控界面,服务器监控页面
  9. 一:【博客分享】优秀的有趣的博客
  10. 2022-2027年中国OLED显示面板行业发展监测及投资战略研究报告