1 Java程序列出密钥库所有条目

import java.util.*;

import java.io.*;

import java.security.*;

public class ShowAlias{

public static void main(String args[ ]) throws Exception{

String pass="080302";

String name=".keystore";

FileInputStream in=new FileInputStream(name);

KeyStore ks=KeyStore.getInstance("JKS");

ks.load(in,pass.toCharArray());

Enumeratione=ks.aliases( );

while( e.hasMoreElements()) {

System.out.println(e.nextElement());

}

}

}

2 Java程序修改密钥库口令

import java.io.*;

import java.security.*;

public class SetStorePass{

public static void main(String args[ ]) throws Exception{

char[ ] oldpass="080302".toCharArray();

char[ ] newpass="123456".toCharArray();

String name=".keystore";

FileInputStream in=new FileInputStream(name);

KeyStore ks=KeyStore.getInstance("JKS");

ks.load(in,oldpass);

in.close();

FileOutputStream output=new FileOutputStream(name);

ks.store(output,newpass);

output.close();

}

}

3 Java程序修改密钥库条目的口令及添加条目

package test;

import java.io.*;

import java.security.*;

import java.security.cert.Certificate;

public class SetKeyPass{

public static void main(String args[ ]) throws Exception{

//读取相关参数

String name=".keystore";

String alias="mykey";

char[ ] storepass="123456".toCharArray();

char[ ] oldkeypass="080302".toCharArray();

char[ ] newkeypass="123456".toCharArray();

//获取密钥库.keystore的KeyStore对象,并加载密钥库

FileInputStream in=new FileInputStream(name);

KeyStore ks=KeyStore.getInstance("JKS");

ks.load(in,storepass);

//获取别名对应的条目的证书链

Certificate[ ] cchain=ks.getCertificateChain(alias);

//读取别名对应的条目的私钥

PrivateKey pk=(PrivateKey)ks.getKey(alias,oldkeypass);

//向密钥库中添加新的条目

ks.setKeyEntry(alias,pk,newkeypass,cchain);

in.close();

//将KeyStore对象内容写入新文件

FileOutputStream output=new FileOutputStream("333");

ks.store(output,storepass);

output.close();

}

}

4 Java程序检验别名及删除条目

package test;

import java.io.*;

import java.security.*;

public class DeleteAlias{

public static void main(String args[ ]) throws Exception{

String pass = "123456";

String name = ".keystore";

String alias = "mykey";

FileInputStream in=new FileInputStream(name);

KeyStore ks=KeyStore.getInstance("JKS");

ks.load(in,pass.toCharArray());

if (ks.containsAlias(alias)){

ks.deleteEntry(alias);

FileOutputStream output=new FileOutputStream(name);

ks.store(output,pass.toCharArray());

System.out.println("Alias "+alias+" deleted");

}else{

System.out.println("Alias not exist");

}

}

}

5 使用Java程序将已签名的数字证书导入密钥库

首先读取CA的证书mytest.cer和用户收到的签名后的证书lf_signed.cer(由CA私钥签发),使用这两个证书组成证书链,然后从用户的密钥库读取私钥,最后执行KeyStore对象的setKeyEntry( )方法将私钥和证书一起写入密钥库,并使用store( )方法保存为文件即可。

import java.io.*;

import java.security.*;

import java.security.cert.*;

/*

* CA证书,已经签名的用户数字证书,用户密钥库名和密码以及相应证书的私钥名称,新生成的证书名称和密钥库名以及密码

*/

public class ImportCert{

public static void main(String args[ ]) throws Exception{

//参数

String cacert="new.cer";

String lfcert="hqy.cer";

String lfstore="mykeystore";

char[] lfstorepass="080302".toCharArray( );

char[] lfkeypass="080302".toCharArray( );

//CA的证书

CertificateFactory cf=CertificateFactory.getInstance("X.509");

FileInputStream in1=new FileInputStream(cacert);

java.security.cert.Certificate cac=cf.generateCertificate(in1);

in1.close();

//用户的签名证书

FileInputStream in2=new FileInputStream(lfcert);

java.security.cert.Certificate lfc=cf.generateCertificate(in2);

in2.close();

//证书链

java.security.cert.Certificate[] cchain={lfc,cac};

//用户的密钥库

FileInputStream in3=new FileInputStream(lfstore);

KeyStore ks=KeyStore.getInstance("JKS");

ks.load(in3,lfstorepass);

PrivateKey prk=(PrivateKey)ks.getKey("new",lfkeypass);

//导入证书

ks.setKeyEntry("new_signed",prk,lfstorepass,cchain);

//保存密钥库

FileOutputStream out4=new FileOutputStream("nostore");

ks.store(out4,"080302".toCharArray());

out4.close();

}

}

Java程序实现密钥库的维护的更多相关文章

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

    通过Android Studio编译器获取SHA1 第一步.打开Android Studio的Terminal工具 第二步.输入命令:keytool -v -list -keystore keysto ...

  2. Java工具创建密钥库,用于Unity 3D打包、签名、发布

    Java工具创建密钥库 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心创新! ...

  3. java程序员认证考试题库

    第一部分 基础知识练习 目标 本章对应于<学生指南>各章的内容分别提供了练习题集,包括: ●  第一章Java入门 ●  第二章数据类型和运算符 ●  第三章流程控制与数组 ●  第四章封 ...

  4. java程序员应该熟悉的20个有用的库(转)

    优秀且经验丰富的Java开发人员的一个特点是API的广泛知识,包括JDK和第三方库.我花了很多时间学习API,特别是在阅读Effective Java 3rd Edition之后,Joshua Blo ...

  5. Java程序员应该知道的20个有用的lib开源库

    一般一个经验丰富的开发者,一般都喜欢使用开源的第三方api库来进行开发,毕竟这样能够提高开发效率,并且能够简单快速的集成到项目中去,而不用花更多的时间去在重复造一些无用的轮子,多了解一些第三方库可以提 ...

  6. 【转载】Java密钥库及keytool使用详解

    ---------------- 版权声明:本文为CSDN博主「adrninistrat0r」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https: ...

  7. Java 库:为 Java 程序员而生的 10 + 最佳库

    众所周知,Java 的生态环境相当庞大,包含了数量相当可观的官方及第三方库.利用这些库,可以解决在用 Java 开发时遇到的各类问题,让开发效率得到显著提升. 举些例子,最常用的官方库有 java.l ...

  8. JAVA程序通过JNI调用C/C++库

    java程序如何调用c/c++库中的函数主要分为三个步骤: 1. 加载库文件. System.loadLibrary 2. 找到函数( java函数<----映射---->c函数 ) 3. ...

  9. 将.cer证书导入java密钥库?

    导入.cer从浏览器下载的证书文件(打开网址并挖掘详细信息)到cacerts keystore中java_home\jre\lib\security为我工作,而不是尝试生成和使用我自己的密钥库. 去你 ...

随机推荐

  1. POJ3450 Corporate Identity

    后缀数组. 解决多个字符串的最长公共子串. 采用对长度的二分,将子串按height分组,每次判断是否在每个字符串中都出现过. 复杂度O(NlogN) By:大奕哥 #include<cstrin ...

  2. [NOIP2017]列队(线段树/裂点splay)

    考虑n=1的做法,就是支持: 1.在线删一个数 2.在结尾加一个数 3.查询序列的第y个数 用线段树记录区间内被删元素的个数,可以通过线段树上二分快速得解,对于新增的数,用vector记录即可. 对于 ...

  3. 快速排序-C

    #include <stdio.h> #include <stdlib.h> #define N 6 int partition(int arr[], int low, int ...

  4. bzoj 1014 LCP 二分 Hash 匹配

    求同一字符串的两个后缀的最长公共前缀. 将字符串按位置放到Splay中维护(每个节点还维护一下该子树的hash),然后二分前缀的长度,用splay计算出指定范围的hash,按hash是否相等来判断是否 ...

  5. java中重载(overload)与重写(override)的区别

    方法重载(overload): 方法重载就是在一个类中可以创建多个方法,它们具有相同的名字,但是具有不同的参数和不同的定义,调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法,这就 ...

  6. Linux下Apache2.2和PHP5的安装配置

    Linux下Apache2.2和PHP5的安装配置 环境介绍 我安装使用的Linux版本为CentOS6.5最精简版,Apache为2.2.29,PHP版本为5.4.28. 系统安装 首先安装Cent ...

  7. Apache Hadoop 简介

    什么是Apache Hadoop? 在Apache Hadoop的项目开发可靠,可扩展,分布式计算开源软件. Apache Hadoop的软件库是一个框架,允许分布式处理大型数据集在集群计算机使用简单 ...

  8. Microcontroller measures resistance without an ADC

    Sensors automate most of the processes in industry. Most of these sensors, such as those for ammonia ...

  9. java多线程知识汇总(三)如何选择锁?如何加锁

    1.锁,保证的是被锁的代码,一次执行完毕才能被其他线程执行,锁保证了一个线程执行过程中不被其他线程打断.以保证数据的准确性. 2.数据的读写过程,是有冲突的,当一个线程正在读数据,另一个线程正在写同一 ...

  10. [mark]如何删除地址栏的记录?

    比如,我输入字母a ..因为经常访问.它首先会自动帮我补填 amazon.cn 第二行出现 ali213...第三行是 alipay... 这个很简单,没必要搞得很复杂很Geek.比如楼主的情况,首先 ...