博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java程序实现密钥库的维护
阅读量:5742 次
发布时间:2019-06-18

本文共 3661 字,大约阅读时间需要 12 分钟。

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();

        //获取密钥库.keystoreKeyStore对象,并加载密钥库

        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(); 

}

}  

 

 

转载地址:http://oiizx.baihongyu.com/

你可能感兴趣的文章
Android MVC之我的实现
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
关于批处理-1
查看>>
Tomcat部署Web应用方法总结
查看>>
Python3 django2.0 字段加密 解密 AES
查看>>
CCNA实验之:网络地址转换(NAT)实验
查看>>
计算机网络原理笔记-停止等待协议
查看>>
确定当前记录和下一条记录之间相差的天数
查看>>
sql语句返回主键SCOPE_IDENTITY()
查看>>
机器学习开源项目精选TOP30
查看>>
iOS开发-邮件发送
查看>>
/etc/resolv.conf文件详解
查看>>
【转】VC的MFC中重绘函数的使用总结(整理)
查看>>
JQuery日记_5.13 Sizzle选择器(六)选择器的效率
查看>>
oracle查看经常使用的系统信息
查看>>
Django_4_视图
查看>>
Linux的netstat命令使用
查看>>
lvm讲解,磁盘故障小案例
查看>>
大快网站:如何选择正确的hadoop版本
查看>>