Java程序实现密钥库的维护
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程序实现密钥库的维护的更多相关文章
- keytool 错误: java.lang.Exception: 密钥库文件不存在: keystore
通过Android Studio编译器获取SHA1 第一步.打开Android Studio的Terminal工具 第二步.输入命令:keytool -v -list -keystore keysto ...
- Java工具创建密钥库,用于Unity 3D打包、签名、发布
Java工具创建密钥库 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心创新! ...
- java程序员认证考试题库
第一部分 基础知识练习 目标 本章对应于<学生指南>各章的内容分别提供了练习题集,包括: ● 第一章Java入门 ● 第二章数据类型和运算符 ● 第三章流程控制与数组 ● 第四章封 ...
- java程序员应该熟悉的20个有用的库(转)
优秀且经验丰富的Java开发人员的一个特点是API的广泛知识,包括JDK和第三方库.我花了很多时间学习API,特别是在阅读Effective Java 3rd Edition之后,Joshua Blo ...
- Java程序员应该知道的20个有用的lib开源库
一般一个经验丰富的开发者,一般都喜欢使用开源的第三方api库来进行开发,毕竟这样能够提高开发效率,并且能够简单快速的集成到项目中去,而不用花更多的时间去在重复造一些无用的轮子,多了解一些第三方库可以提 ...
- 【转载】Java密钥库及keytool使用详解
---------------- 版权声明:本文为CSDN博主「adrninistrat0r」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https: ...
- Java 库:为 Java 程序员而生的 10 + 最佳库
众所周知,Java 的生态环境相当庞大,包含了数量相当可观的官方及第三方库.利用这些库,可以解决在用 Java 开发时遇到的各类问题,让开发效率得到显著提升. 举些例子,最常用的官方库有 java.l ...
- JAVA程序通过JNI调用C/C++库
java程序如何调用c/c++库中的函数主要分为三个步骤: 1. 加载库文件. System.loadLibrary 2. 找到函数( java函数<----映射---->c函数 ) 3. ...
- 将.cer证书导入java密钥库?
导入.cer从浏览器下载的证书文件(打开网址并挖掘详细信息)到cacerts keystore中java_home\jre\lib\security为我工作,而不是尝试生成和使用我自己的密钥库. 去你 ...
随机推荐
- 【BZOJ 1880】 [Sdoi2009]Elaxia的路线 (最短路树)
1880: [Sdoi2009]Elaxia的路线 Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. ...
- 各种背包的dp刷题板
[p1332][NYOJ skiing] 滑雪 (dp+搜索) [p1312] [vjios1448 路灯改建计划] 关灯问题 (背包预处理的分组背包) f[i][j]表示给把前i个灯分为j组可以获 ...
- hdu 1533 KM或费用流
以前用KM写过,现在再用费用流写. #include <iostream> #include <cstdio> #include <cstring> #includ ...
- BeanFactoryPostProcessor和BeanPostProcessor
1. BeanFactoryPostProcessor调用(见AbstractApplicationContext.refresh): >> 创建DefaultListableBeanFa ...
- Elasticsearch - java客户端连接
写在前面的话:读书破万卷,编码如有神-------------------------------------------------------------------- 最简单的在java客户端连 ...
- STM32F10X FLASH and SRAM size
STM32F10X FLASH Size SRAM Size Device Type --------------------------------------------------------- ...
- gdb逆向调试
http://blog.csdn.net/yiling2012/article/details/35988361
- Python pass 语句
Python pass 语句 Python pass是空语句,是为了保持程序结构的完整性. pass 不做任何事情,一般用做占位语句. Python 语言 pass 语句语法格式如下: pass 实例 ...
- Java 3D游戏引擎——JME(java Monkey Engine)
转自:http://bbs.gameres.com/forum.php?mod=viewthread&tid=180732 JME(java Monkey Engine),一个非常棒的Java ...
- Python学习(九)IO 编程 —— 文件读写
Python 文件读写 Python内置了读写文件的函数,用法和C是兼容的.本节介绍内容大致有:文件的打开/关闭.文件对象.文件的读写等. 本章节仅示例介绍 TXT 类型文档的读写,也就是最基础的文件 ...