Key Tool Gui 1.7

/**

*

Title: Light Weight APIs for crypto

*

Description: 一个上海CA证书(根证书和用户证书)进行处理的例子

*

Copyright: Copyright (c) 2003

*

Company: 中国信息安全组织(CISO)

* @author rainbow(webmaster)哈哈 拿老大的东西来添一添.ciso中有关于PKI的更多资料,欢迎你去看看呢

*希望能够加入我们!

* @version 1.0.2003.0620

*/

import java.io.*;

import org.bouncycastle.asn1.*;

import org.bouncycastle.asn1.util.*;

import org.bouncycastle.asn1.x509.*;

import org.bouncycastle.util.encoders.*;

public class CertManager {

String eoid[][]={

{new String("Subject Key Identifier"), new String("2.5.29.14")},

{new String("Key Usage"),           new String("2.5.29.15")},

{new String("Private Key Usage Period"),new String("2.5.29.16")},

{new String("Subject Alternative Name"),new String("2.5.29.17")},

{new String("Issuer Alternative Name"), new String("2.5.29.18")},

{new String("Basic Constraints"),     new String("2.5.29.19")},

{new String("CRL Number"),         new String("2.5.29.20")},

{new String("Reason code"),         new String("2.5.29.21")},

{new String("Hold Instruction Code"),   new String("2.5.29.23")},

{new String("Invalidity Date"),       new String("2.5.29.24")},

{new String("Delta CRL indicator"),   new String("2.5.29.27")},

{new String("Issuing Distribution Point"),new String("2.5.29.28")},

{new String("Certificate Issuer"),     new String("2.5.29.29")},

{new String("Name Constraints"),     new String("2.5.29.30")},

{new String("CRL Distribution Points"), new String("2.5.29.31")},

{new String("Certificate Policies"),   new String("2.5.29.32")},

{new String("Policy Mappings"),       new String("2.5.29.33")},

{new String("Authority Key Identifier"),new String("2.5.29.35")},

{new String("Policy Constraints"),     new String("2.5.29.36")},

{new String("Extended Key Usage"),     new String("2.5.29.37")}};

byte buf[];

public CertManager() {

int fLength=0;

try {

FileInputStream fis=new FileInputStream("..\\mycert\\ca.der");

fLength=fis.available();

buf=new byte[fLength];

fis.read(buf,0,fLength);

}

catch (Exception ex) {

System.out.println("读证书文件出错!");

return;

}

}

public byte[] getExtensionBytes(String oid,X509Extensions exts)

{

if (exts != null)

{

X509Extension   ext = exts.getExtension(new DERObjectIdentifier(oid));

if (ext != null)

{

return ext.getValue().getOctets();

}

}

return null;

}

public void getCert()

{

ByteArrayInputStream   bIn;

DERInputStream       dIn;

String             dump = "";

try

{

bIn = new ByteArrayInputStream(buf);

dIn = new DERInputStream(bIn);

ASN1Sequence     seq = (ASN1Sequence)dIn.readObject();

//dump = DERDump.dumpAsString(seq);

// 调试输出语句

//System.out.println(dump);

// 证书的基本信息

System.out.println("<<=============证书的基本信息===============>>");

X509CertificateStructure   cert = new X509CertificateStructure(seq);

System.out.println("证书版本:\t"+cert.getVersion());

System.out.println("序列号:\t\t"+cert.getSerialNumber().getValue().toString(16));

System.out.println("算法标识:\t"+cert.getSignatureAlgorithm().getObjectId().getId());

System.out.println("签发者:\t\t"+cert.getIssuer());

System.out.println("开始时间:\t"+cert.getStartDate().getTime());

System.out.println("结束时间:\t"+cert.getEndDate().getTime());

System.out.println("主体名:\t\t"+cert.getSubject());

System.out.print("签名值:\t");

DERBitString signature=cert.getSignature();

String strSign=new String(Hex.encode(signature.getBytes()));

System.out.println(strSign);

System.out.println("主体公钥:\t");

SubjectPublicKeyInfo pukinfo=cert.getSubjectPublicKeyInfo();

System.out.println("\t标识符:\t"+pukinfo.getAlgorithmId().getObjectId().getId());

byte[] byPuk=pukinfo.getPublicKeyData().getBytes();

String strPuk=new String(Hex.encode(byPuk));

System.out.println("\t公钥值:\t"+strPuk);

// 证书的扩展信息

System.out.println("<<===========证书的扩展信息==============>>");

X509Extensions ext=cert.getTBSCertificate().getExtensions();

// 15 --key usage     19 ---basic constrains

// 31-- crl point     32 ---certificate policy

getKeyUsage(ext);

getBasicConstrains(ext);

getCRLPoint(ext);

getCertPolicy(ext);

}

catch (Exception e)

{

e.printStackTrace();

return ;

}

}

// 取密钥的使用

public void getKeyUsage(X509Extensions ext)

{

DERObjectIdentifier derOid = new DERObjectIdentifier("2.5.29.15");

X509Extension item = null;

boolean isCritical;

ASN1OctetString value;

try {

item=ext.getExtension(derOid);

isCritical=item.isCritical();

value=item.getValue();

}

catch (Exception ex) {

return;

}

System.out.println(new String(Hex.encode(value.getOctets())));

}

// 取基本限制

public void getBasicConstrains(X509Extensions ext)

{

byte[] bytes = getExtensionBytes("2.5.29.19",ext);

if (bytes != null)

{

try

{

DERInputStream dIn = new DERInputStream(new ByteArrayInputStream(bytes));

ASN1Sequence   seq = (ASN1Sequence)dIn.readObject();

if (seq.size() == 2)

{

if (((DERBoolean)seq.getObjectAt(0)).isTrue())

{

int pathlen=((DERInteger)seq.getObjectAt(1)).getValue().intValue();

System.out.println("是CA证书\t"+"max path len="+pathlen);

}

else

{

System.out.println("不是ca证书!");

}

}

else if (seq.size() == 1)

{

if (seq.getObjectAt(0) instanceof DERBoolean)

{

if (((DERBoolean)seq.getObjectAt(0)).isTrue())

{

System.out.println(Integer.MAX_VALUE);

}

}

}

}

catch (Exception e)

{

throw new RuntimeException("error processing key usage extension");

}

}

}

// 取crl分布点

public void getCRLPoint(X509Extensions ext)

{

byte[] byContent = getExtensionBytes("2.5.29.31",ext);

if (byContent != null)

{

try

{

DERInputStream dIn = new DERInputStream(new ByteArrayInputStream(byContent));

ASN1Sequence   seq = (ASN1Sequence)dIn.readObject();

int dpCount=seq.size();

for(int i=0;i

{

// 第一个分布点(DistributionPoint)

ASN1Sequence point1=(ASN1Sequence)seq.getObjectAt(i);

DERObject tobj=(DERTaggedObject)point1.getObjectAt(0);

System.out.println("CRL分布点"+(i+1)+":");

while(tobj instanceof DERTaggedObject&&!((DERTaggedObject)tobj).isEmpty())

{

System.out.println("\ttagNo:"+((DERTaggedObject)tobj).getTagNo());

if(tobj instanceof DERTaggedObject)

tobj=((DERTaggedObject)tobj).getObject();

}

DEROctetString os=(DEROctetString)tobj.getDERObject();

String str=new String(os.getOctets());

System.out.println("\t"+str);

}

}

catch (Exception e)

{

System.out.println("crl分布点处理出错了!");

}

}

}

// 取证书策略

public void getCertPolicy(X509Extensions ext)

{

byte[] byContent = getExtensionBytes("2.5.29.32",ext);

if (byContent != null)

{

try

{

DERInputStream dIn = new DERInputStream(new ByteArrayInputStream(byContent));

ASN1Sequence   seq = (ASN1Sequence)dIn.readObject();

//String dump = DERDump.dumpAsString(seq);

// 调试输出语句

//System.out.println("证书策略:"+dump);

for(int i=0;i

{

getPolicyInfo((ASN1Sequence)seq.getObjectAt(i));

}

}

catch(Exception e)

{

e.printStackTrace();

}

}

}

private void getPolicyInfo(ASN1Sequence seq)

{

if(seq.size()==2)

{

DERObjectIdentifier objID=(DERObjectIdentifier)seq.getObjectAt(0);

System.out.println("证书策略标识:"+objID.getId());

ASN1Sequence seqQualifier=(ASN1Sequence)seq.getObjectAt(1);

for(int i=0;i

getPolicyQualifierInfo((ASN1Sequence)seqQualifier.getObjectAt(i));

}

else

System.out.println("解析策略声明时出错!");

}

private void getPolicyQualifierInfo(ASN1Sequence seq)

{

if(seq.size()==2)

{

DERObjectIdentifier objID=(DERObjectIdentifier)seq.getObjectAt(0);

System.out.println("策略声明标识:"+objID.getId());

DERIA5String ia5=(DERIA5String)seq.getObjectAt(1);

System.out.println("声明内容:"+ia5.getString());

}

}

public static void main(String[] args) {

CertManager cm = new CertManager();

cm.getCert();

}

}

java 解析证书_java 读取证书类以及key tool gui 1.7相关推荐

  1. java解析文件_Java读取文件方法大全

    public classReadFromFile {/*** 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件.*/ public static voidreadFileByByte ...

  2. linux java 生成证书_Java 制作证书(Windows 和Linux)

    一.Windows数字证书 1. 生成数字证书 1.1 进入[%JAVA_HOME%]路径下 1 cd D:Program FilesJavajdk1.8.0_131 1.2 生成证书.一些命令中红色 ...

  3. java载入器材_JAVA之了解类载入器Classloader

    1.类的载入.连接和初始化 类初始化通常包含载入.连接.初始化三个步骤. (1)进程的结束 每当执行一个java程序时,将会启动一个java虚拟机进程,无论程序多么复杂.有多少线程.都在这个java虚 ...

  4. java zipfile用法_Java使用ZipFile类实现Zip文件解压

    java.util.zip.ZipFile类用于从 ZIP 文件读取条目. 即从给定的ZIP压缩文件中获取所有文件的信息,如:文件的名称.是否为目录等信息.可以使用这个类来实现将zip文件进行解压操作 ...

  5. java 匿名类型_Java之匿名类讲解

    匿名类,正如名字一样在java中没有名字标识的类,当然了编译后还是会安排一个名字的. 下面是一个关于匿名类的简单例子: public classClient {public static voidma ...

  6. java ocsp请求_java – 客户端证书上的OCSP吊销

    如果仅使用客户端的java.security.cert.X509Certificate,如何使用OCSP手动检查java中的证书撤销状态?我看不清楚这样做的明确方法. 或者,我可以让tomcat自动为 ...

  7. java安装证书_Java SSL证书的安装

    https正在成为主流,http估计在不久的将来会被彻底放弃-- 一个Java程序需要访问一个https的网站的时候,可能需要涉及证书的安装,卸载等操作. 一.证书的下载 打开浏览器输入https:/ ...

  8. java mp3 信息_java读取MP3的信息

    标签头"TAG" 3字节 标题 30字节 作者 30字节 专辑 30字节 出品年份 4字节 备注信息 28字节 保留 1字节 音轨 1字节 类型 1字节 import java.i ...

  9. java mp3 信息_java读取MP3的信息 | 学步园

    标签头"TAG" 3字节 标题 30字节 作者 30字节 专辑 30字节 出品年份 4字节 备注信息 28字节 保留 1字节 音轨 1字节 类型 1字节 import java.i ...

最新文章

  1. NUXT: 视图和模板
  2. 大庆师范学院计算机系徐媛老师,大庆师范学院课程表(未添加英语课).xls
  3. 在Eclipse中搭建Python开发环境
  4. JVM性能调优监控工具专题一:JVM自带性能调优工具(jps,jstack,jmap,jhat,jstat,hprof)...
  5. 深度图像特征在推荐和广告中的应用(一)
  6. scanf函数的读取
  7. mac安装mysql(命令行方式)
  8. Multisim实现D触发器模拟异步计数器
  9. 产品经理学习——卡诺模型
  10. 交通大数据应用细分_大数据、数据挖掘在交通领域有哪些应用?
  11. WordPress防止自动压缩jpg图片
  12. eclipse 导入项目后,在工程图标上出现红叉,但是工程中的文件并没有提示错误的解决方法
  13. 从实践角度重新理解BIO和NIO
  14. Echarts地图实现点击某地区跳转到指定页面
  15. 云数据库与传统数据库有什么区别
  16. 压敏电阻原理、参数、选型
  17. SpringSecurity 安全框架
  18. android橡皮擦擦图片功能
  19. Flalsh Lighting Network(闪电网络)
  20. 数据结构—回溯法、子集树、排列树

热门文章

  1. AI科研绘图3:排版
  2. NBT-新年4篇35分文章聚焦宏基因组研究
  3. R语言sd函数计算数值标准差实战(Standard Deviation)
  4. R语言使用coin包应用于独立性问题的置换检验(permutation tests、响应变量是否独立于组、两个数值变量是独立的吗、两个分类变量是独立的吗)、以及coin包的常用置换检验函数
  5. pandas使用groupby函数计算dataframe数据中每个分组的N个数值的滚动最小值(rolling min)、例如,计算某公司的多个店铺每N天(5天)的滚动销售额最小值
  6. R语言使用ggplot2包使用geom_boxplot函数绘制基础分组缺口箱图(notch boxplot)实战
  7. R语言循环中break函数和next函数使用实战
  8. LINUX的20练习题
  9. Science:便携式DNA测序仪在检测病毒疫情中大显身手
  10. A fuzzy Bruijn graph approach to long noisy reads assembly