java读取数字证书信息.docx

上传人:b****2 文档编号:12886326 上传时间:2023-04-22 格式:DOCX 页数:11 大小:20.64KB
下载 相关 举报
java读取数字证书信息.docx_第1页
第1页 / 共11页
java读取数字证书信息.docx_第2页
第2页 / 共11页
java读取数字证书信息.docx_第3页
第3页 / 共11页
java读取数字证书信息.docx_第4页
第4页 / 共11页
java读取数字证书信息.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

java读取数字证书信息.docx

《java读取数字证书信息.docx》由会员分享,可在线阅读,更多相关《java读取数字证书信息.docx(11页珍藏版)》请在冰豆网上搜索。

java读取数字证书信息.docx

java读取数字证书信息

竭诚为您提供优质文档/双击可除

java读取数字证书信息

  篇一:

JAVA对数字证书的常用操作

  阅读提示:

本文介绍JAVA对数字证书的常用操作

  一需要包含的包

  importjava.security.*;

  importjava.io.*;

  importjava.util.*;

  importjava.security.*;

  importjava.security.cert.*;

  importsun.security.x509.*

  importjava.security.cert.certificate;

  importjava.security.cert.certificateFactory;

  二从文件中读取证书

  用keytool将.keystore中的证书写入文件中,然后从该文件中读取证书信息certificateFactorycf=certificateFactory.getInstance("x.509");

  FileInputstreamin=newFileInputstream("out.csr");

  certificatec=cf.generatecertificate(in);strings=c.tostring();

  三从密钥库中直接读取证书

  stringpass="123456";

  FileInputstreamin=newFileInputstream(".keystore");

  Keystoreks=Keystore.getInstance("JKs");

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

  java.security.cert.certificatec=ks.getcertificate(alias);//alias为条目的别名

  四JAVA程序中显示证书指定信息

  system.out.println("输出证书信息:

\n"+c.tostring());

  system.out.println("版本号:

"+t.getVersion());

  system.out.println("序列号:

"+t.getserialnumber().tostring(16));

  system.out.println("主体名:

"+t.getsubjectDn());

  system.out.println("签发者:

"+t.getIssuerDn());

  system.out.println("有效期:

"+t.getnotbefore());

  system.out.println("签名算法:

"+t.getsigAlgname());

  byte[]sig=t.getsignature();//签名值

  publicKeypk=t.getpublicKey();

  byte[]pkenc=pk.getencoded();

  system.out.println("公钥");

  for(inti=0;i    五JAVA程序列出密钥库所有条目

  stringpass="123456";

  FileInputstreamin=newFileInputstream(".keystore");

  Keystoreks=Keystore.getInstance("JKs");

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

  enumeratione=ks.aliases();

  while(e.hasmoreelements())

  java.security.cert.certificatec=ks.getcertificate((string)e.nextelement());

  六JAVA程序修改密钥库口令

  stringoldpass="123456";

  stringnewpass="654321";

  FileInputstreamin=newFileInputstream(".keystore");

  Keystoreks=Keystore.getInstance("JKs");

  ks.load(in,oldpass.tocharArray());

  in.close();

  Fileoutputstreamoutput=newFileoutputstream(".keystore");

  ks.store(output,newpass.tocharArray());

  output.close();

  七JAVA程序修改密钥库条目的口令及添加条目

  FileInputstreamin=newFileInputstream(".keystore");

  Keystoreks=Keystore.getInstance("JKs");

  ks.load(in,storepass.tocharArray());

  certificate[]cchain=ks.getcertificate(alias);获取别名对应条目的证书链

  privateKeypk=(privateKey)ks.getKey(alias,oldkeypass.tocharArray());获取别名对应条目的私钥

  ks.setKeyentry(alias,pk,newkeypass.tocharArray(),cchain);向密钥库中添加条目

  第一个参数指定所添加条目的别名,假如使用已存在别名将覆盖已存在条目,使用新别名将增加一个新条目,第二个参数为条目的私钥,第三个为设置的新口令,第四个为该私钥的公钥的证书链

  Fileoutputstreamoutput=newFileoutputstream("another");

  ks.store(output,storepass.tocharArray())将keystore对象内容写入新文件

  八JAVA程序检验别名和删除条目

  FileInputstreamin=newFileInputstream(".keystore");

  Keystoreks=Keystore.getInstance("JKs");

  ks.load(in,storepass.tocharArray());

  ks.containsAlias("sage");检验条目是否在密钥库中,存在返回true

  ks.deleteentry("sage");删除别名对应的条目

  Fileoutputstreamoutput=newFileoutputstream(".keystore");

  ks.store(output,storepass.tocharArray())将keystore对象内容写入文件,条目删除成功

  九JAVA程序签发数字证书

  

(1)从密钥库中读取cA的证书

  FileInputstreamin=newFileInputstream(".keystore");

  Keystoreks=Keystore.getInstance("JKs");

  ks.load(in,storepass.tocharArray());

  java.security.cert.certificatec1=ks.getcertificate("caroot");

  

(2)从密钥库中读取cA的私钥

  privateKeycaprk=(privateKey)ks.getKey(alias,cakeypass.tocharArray());

  (3)从cA的证书中提取签发者的信息

  byte[]encod1=c1.getencoded();提取cA证书的编码

  x509certImplcimp1=newx509certImpl(encod1);用该编码创建x509certImpl类型对象

  x509certInfo

  cinfo1=(x509certInfo)cimp1.get(x509certImpl.nAme+"."+x509certImpl.InFo);获取x509certInfo对象

  x500name

  issuer=(x500name)cinfo1.get(x509certInfo.subJecT+"."+certificateIssuername.Dn_nAme);获取x509name类型的签发者信息

  (4)获取待签发的证书

  certificateFactorycf=certificateFactory.getInstance("x.509");

  FileInputstreamin2=newFileInputstream("user.csr");

  java.security.cert.certificatec2=cf.generatecertificate(in);

  (5)从待签发的证书中提取证书信息

  byte[]encod2=c2.getencoded();

  x509certImplcimp2=newx509certImpl(encod2);用该编码创建x509certImpl类型对象

  x509certInfo

  cinfo2=(x509certInfo)cimp2.get(x509certImpl.nAme+"."+x509certImpl.InFo);获取x509certInfo对象

  (6)设置新证书有效期

  Datebegindate=newDate();获取当前时间

  Dateenddate=newDate(begindate.getTime()+3000*24*60*60*1000L);有效期为3000天

  certificateValiditycv=newcertificateValidity(begindate,enddate);创建对象cinfo2.set(x509certInfo.VALIDITY,cv);设置有效期

  (7)设置新证书序列号

  intsn=(int)(begindate.getTime()/1000);以当前时间为序列号

  certificateserialnumbercsn=newcertificateserialnumber(sn);

  cinfo2.set(x509certInfo.seRIAL_numbeR,csn);

  (8)设置新证书签发者

  cinfo2.set(x509certInfo.IssueR+"."+certificateIssuername.Dn_nAme,issuer);应用第三步的结果

  (9)设置新证书签名算法信息

  AlgorithmIdalgorithm=newAlgorithmId(AlgorithmId.md5withRsAencryption_oid);

  cinfo2.set(certificateAlgorithmId.nAme+"."+certificateAlgorithmId.ALgoRIThm,algorithm);

  (10)创建证书并使用cA的私钥对其签名

  x509certImplnewcert=newx509certImpl(cinfo2);

  newcert.sign(caprk,"mD5withRsA");使用cA私钥对其签名

  (11)将新证书写入密钥库

  ks.setcertificateentry("lf_signed",newcert);

  Fileoutputstreamout=newFileoutputstream("newstore");

  ks.store(out,"newpass".tocharArray());这里是写入了新的密钥库,也可以使用

  第七条来增加条目

  十数字证书的检验

  

(1)验证证书的有效期

  (a)获取x509certificate类型对象

  certificateFactorycf=certificateFactory.getInstance("x.509");

  FileInputstreamin1=newFileInputstream("aa.crt");

  java.security.cert.certificatec1=cf.generatecertificate(in1);

  x509certificatet=(x509certificate)c1;

  in2.close();

  (b)获取日期

  DateTimenow=newDate();

  (c)检验有效性

  try{

  t.checkValidity(Timenow);

  system.out.println("oK");

  }catch(certificateexpiredexceptione){//过期

  system.out.println("expired");

  system.out.println(e.getmessage());

  }catch((certificatenotYetValidexceptione){//尚未生效

  system.out.println("Tooearly");

  system.out.println(e.getmessage());}

  

(2)验证证书签名的有效性

  (a)获取cA证书

  certificateFactorycf=certificateFactory.getInstance("x.509");

  FileInputstreamin2=newFileInputstream("caroot.crt");

  java.security.cert.certificatecac=cf.generatecertificate(in2);

  in2.close();

  (c)获取cA的公钥

  publicKeypbk=cac.getpublicKey();

  (b)获取待检验的证书(上步已经获取了,就是c1)(c)检验证书

  booleanpass=false;

  try{

  c1.verify(pbk);

  pass=true;

  }catch(exceptione){

  pass=false;

  system.out.println(e);

  }

  篇二:

Java使用数字证书加密文件(含代码)

  JAVA使用数字证书加密解密文件

  总结

  目录

  1.编写目的........................................................................................................................................3

  2.JAVA生产数字证书.....................................................................................................................4

  2.1.1keystore(JKs)的生成.............................................................................................4

  2.1.2导出公钥.................................................................................................................5

  3.使用JKs私钥加密文件...............................................................................................................5

  4.转换为pFx格式私钥..................................................................................................................6

  5.使用pFx加密文件......................................................................................................................7

  6源代码...........................................................................................................................................8

  6.1用到的JAR包...................................................................................................................8

  6.2示例代码............................................................................................................................8

  6.2.1Test.java...................................................................................................................8

  6.2.2Rsautil.java............................................................................................................10

  6.2.3base64.java............................................................................................................19

  7.结束语..........................................................................................................................................26

  1.编写目的

  学习RsA算法,读取数字证书中的私钥对文件进行加密,使用数字证书的公钥解密,这种方式就是RsA算法.

  自己对RsA算法的理解:

  ?

私钥加密公钥解密:

如果用私钥对文件加密,发给别人,别人用我公布的公钥进行解

  密,实现这个文件就是我本人制作的,不是别人做的.

  ?

公钥加密私钥解密:

如果别人用我的公钥加密文件,那么只能我一个人看,只有使用

  我的私钥进行解密,私钥一定是不能告诉其他人的.

  本文讲解如何用JKs私钥对文件进行加密,用对于cRT公钥进行解密,将JKs私钥转换为pFx格式私钥,并用pFx私钥对文件进行加密解密

  Jks:

是JAVA的keytools证书工具支持的证书私钥格式

  pfx:

是微软支持的私钥格式

  ?

  2.JAVA生产数字证书

  为了实现数字证书加密文件,我们首先要制作几个数字证书,如果你已经有了pfx格式的数字证书并且知道其密码,以及对应crt或者cer格式的公钥证书则跳过本章.

  2.1keytool创建数字证书

  Keytool是一个Java数据证书的管理工具,Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里,包含两种数据:

  ?

密钥实体(Keyentity):

密钥(secretkey)又或者是私钥

  ?

配对公钥(采用非对称加密):

可信任的证书实体(trustedcertificateentries),只

  包含公钥

  2.1.1keystore(JKs)的生成

  ?

分阶段生成:

  命令格式:

keytool-genkey-aliasyushan(别名)-keypassyushan(别名密码)-keyalgRsA(算法)-keysize1024(密钥长度)-validity365(有效期,天单位)-keystoree:

\yushan.keystore(指定生成证书的位置和证书名称)-storepass123456(获取keystore信息的密码);

  示例:

  ?

1)cmd下进入java/bin

  ?

2)输入命令keytool-genkey-aliasmyalias-keypass123456-keyalgRsA-keysize1024

  -validity365-keystored:

\myalias.keystore-storepass123456

  ?

一次性生成:

  keytool-genkey-aliasyushan-keypassyushan-keyalgRsA-keysize1024-validity365-keystoree:

\yushan.keystore-storepass123456-dname"cn=(名字与姓氏),ou=(组织单位名称),o=(组织名称),L=(城市或区域名称),sT=(州或省份名称),c=(

  单位的两字母国家代

  码)";(中英文即可)

  无例图

  2.1.2导出公钥

  命令:

keytool-export-aliasmyalias-keystored:

\myalias.keystore-filed:

\myalias.crt-storepass123456

  创建结果:

  3.使用JKs私钥加密文件

  //工具类

  RsAutilrsa=newRsAutil();

  //从jks私钥中获取私钥加密串

  privateKeypriKeyFromKs=rsa.getpriKeyFromKs("d:

\\myalias.keystore","123456","myalias","123456");

  //从jks私钥中获取公钥解密串

  publicKeypubKeyFromKs=rsa.getpubKeyFromKs("d:

\\myalias.keystore",

  "123456","myalias");

  //从crt公钥中获取公钥解密串

  publicKeypubKeyFromcrt=rsa.getpubKeyFromcRT("d:

\\myalias.crt");

  //用私钥串加密

  rsa.encryptwithprv("d:

\\file.xml",priKeyFromKs,"d:

\\file_encwithKspri.xml",

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 公共行政管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1