- 浏览: 314501 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
夜闯疯人院:
如何在已经存在的CRL文件中加入新的吊销证书列表?
对证书的CRL进行验证 -
lzf0530:
亲 执行时有报错,能否将源码以及jar包打包上传一下?
Java编写PC喇叭发声程序 -
yangge3232:
你好,我的cab chktrust 能运行,就是放在服务器 ...
如何制作cab包(解决不能注册的问题) -
jspandservlet:
缺了很多的包
SSH框架入门(三) -
f0rb:
public void contextInitiali ...
改造myoa例子,使用hsql代替mysql随webapp启动
package ciso.security.test; /** * <p>Title: Light Weight APIs for crypto </p> * <p>Description: 一个上海CA证书(根证书和用户证书)进行处理的例子</p> * <p>Copyright: Copyright (c) 2003</p> * <p>Company: 中国信息安全组织(CISO) </p> * @author rainbow(webmaster) * @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<dpCount;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<seq.size();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<seqQualifier.size();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(); } }
上面代码使用了文件输入流来检查证书,适用于对单个证书文件的操作。如果想对证书库进行操作,就需要对代码作一下改动,以便能够读取keystore。
String storeFile = "c:\\default.keystore"; String storePass = "11111111"; String alias = "root"; DERInputStream dIn = null; try{ KeyStore ks = KeyStore.getInstance("jks"); ks.load(new FileInputStream(storeFile), storePass.toCharArray()); X509Certificate cert = (X509Certificate)ks.getCertificate(alias); dIn = new DERInputStream(new ByteArrayInputStream(cert.getEncoded())); ASN1Sequence seq = (ASN1Sequence)dIn.readObject(); //重用代码 }catch(Exception e){ e.printStackTrace(); }
发表评论
-
常见证书格式及相互转换
2010-12-15 17:49 1229PKCS 全称是 Public-Key Cryptograph ... -
使用微软代码签名证书签名Java代码使用指南
2010-12-15 15:01 1571本指南针对已经购买了W ... -
使用Java开发和信息安全相关的程序(CA)
2010-11-09 21:54 1249这里说的信息安全是相对于系统安全而言的,它更侧重于加密,解密, ... -
架设独立从属CA而不检查吊销服务器
2010-08-18 11:15 1856以前使用windows2003的证书颁发机构签发证书一直使用独 ... -
使用Windows2003签发客户端验证证书和私钥
2010-06-29 23:19 1996签发客户端验证证书和私钥 本文目的 本文将会教会你如何使用 ... -
用keytool进行签名报“无法从回复中建立链接”
2010-06-11 17:36 2598转自“小小的一亩田”的博客 更换服务证书的时候遇到这个 ... -
使用openssl签发X.509证书的基本操作
2010-05-07 17:34 1844准备环境 在windows下操作: 1、查看openssl ... -
实现CRL中吊销列表按日期排序
2009-11-25 16:04 1647项目原来设计只要求读取CRL中吊销列表的序列号和吊销日 ... -
如何将.spc和.pvk转换成.pfx格式
2009-11-19 17:47 2827申请微软代码签名证书后,可以得到以下2个文件。 mycer ... -
X.509证书
2009-11-12 11:09 1625默认情况下,JDK使用的是X.509证书。X.509是一个广泛 ... -
免费申请证书的网址
2009-11-03 15:03 2233本人在编写操作证书的程序时,最头痛的就是找不到相应的证书,以前 ... -
Java对证书的生成、导入和删除操作
2009-11-03 14:58 1591/** * 生成自签名证书 * @param a ... -
选择验证CRL的最优算法
2009-11-03 14:52 1523前提 拥有多个证书吊销列表CRL,给定一个证书,验证 ... -
对证书的CRL进行验证
2009-11-03 13:58 7481package com.example.certificate ... -
PKI术语:pki,ca,数字证书,电子签名,数字信封,摘要算法,md5,ldap,ocsp,Usb key
2009-10-19 10:38 2789一、 PKI的基本概念: PKI(Publi ... -
PKI术语:CRL、增量 CRL、CTL、OCSP、LDAP、AIA、CDP、名称约束、证书模板
2009-10-19 10:36 42421. 证书吊销列表 (CRL):由 CA 颁发的数字签名列表, ... -
PKI术语:PKCS
2009-10-19 10:31 1066The Public-Key Cryptography S ...
相关推荐
在实际项目中,我们可以根据需求进一步扩展这个例子,比如使用XPath表达式来定位特定节点,或者对XML数据进行更复杂的处理。 总结起来,Java解析XML时,DOM4J是一个强大而灵活的工具。它简化了XML文档的处理,允许...
在Java编程中,XML(可扩展标记语言)文件解析是一个常见的任务,用于处理结构化数据。本示例提供了三种不同的方法来解析XML文件,并结合了数据库连接,特别是使用Oracle数据库。下面将详细介绍DOM、SAX和DOM4J这三...
DOM4J这个名字来源于“Document Object Model”(DOM)和“Java”的组合,它扩展了DOM接口,同时引入了基于事件的处理方式,使得XML处理更为简便。 本例子的核心知识点包括: 1. **DOM4J解析XML**:DOM4J通过创建...
Java的`java.security.cert`包提供了解析和验证X.509证书的功能。对于国密算法,你需要确保证书符合国密标准,并且可以使用支持国密的证书库进行解析和验证。 在实际应用中,这些国密算法和相关功能通常会结合使用...
在"JAVA操作XML"和"Java解析XML文件"中,我们可以学习到Java如何通过DOM(文档对象模型)、SAX(简单API for XML)和StAX(流式API for XML)等不同方式来读取和写入XML文档。DOM将整个XML文件加载到内存中形成一棵...
Java解析ASN.1文件的实例和简要使用说明主要涉及两个关键点:Java解析库JAC(Java ASN.1 Compiler)以及ASN.1语言的基本概念和应用。首先,ASN.1(Abstract Syntax Notation One)是一种标准的数据表示语法,常用于...
在这个例子中,`unmarshal()`方法将XML文件解析成`Root`对象。然后,我们可以通过对象的getter方法获取到嵌套子节点`nested`中的`text`字符串。 如果我们只想获取特定子节点的字符串,而不关心整个对象模型,可以...
这个"上传照片 java例子"提供了一个不依赖任何框架或插件的自定义实现,对于初学者或需要理解基本上传逻辑的开发者来说,非常有价值。下面我们将详细探讨Java中实现照片上传的关键知识点。 首先,理解HTTP协议中的...
数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写的...
`jspoon` 是一个强大的Java库,专为开发者设计,用于将HTML文档解析成Java对象。这个库的核心特性是利用CSS选择器来定位HTML元素,然后将其转换为Java对象,简化了从HTML数据源提取信息的过程。这种功能在处理网络...
Java提供了`javax.xml`包,包含解析XML文档、创建XML文档、转换XML到其他格式(如DOM、SAX、StAX)等工具。熟悉这些API,如`DocumentBuilderFactory`、`TransformerFactory`和`XPath`,可以让你有效地处理XML数据。 ...
Java解析XML是一个重要的主题,尤其在处理结构化数据和与Web服务交互时。XML(可扩展标记语言)是一种用于标记数据的语言,具有自解释性,易于人类阅读和编写,同时也方便机器解析和生成。在Java中,有多种库和API...
Java解析库会抛出异常,如`SAXParseException`或`DOMException`,需要捕获并处理这些异常。 通过以上技术,可以实现从XML文件中获取节点信息和属性。具体实现过程包括创建解析器、设置解析器属性(如命名空间处理)...
以上就是一个简单的Java解析XML的例子,适用于初学者。理解DOM的基本概念和使用方法后,你可以根据实际需求进行更复杂的XML操作,如修改、添加和删除XML节点。同时,也可以学习SAX解析,了解不同解析方式的适用场景...
【标题】"myeclipse下java调用webservice项目例子"涉及到的是在Java开发环境中,使用MyEclipse IDE来创建并调用Web服务的过程。MyEclipse是Eclipse的一个扩展,特别适合Java企业级应用的开发,包括Web服务。本项目...
这个项目对于Java初学者来说是一个很好的起点,因为它涵盖了文件操作、扩展名检查、元数据解析等多个重要概念。通过实践,学习者可以加深对Java I/O的理解,并接触到多媒体处理的领域,这在现代软件开发中是非常重要...
Java网络爬虫是一种自动化程序,它能够按照特定的规则遍历互联网上...这个例子可以作为一个基础,帮助你扩展到更复杂的爬虫项目,比如处理JavaScript渲染的页面、使用更高级的解析库如Jsoup,或者实现分布式爬虫架构。
这个项目的核心在于利用Java技术栈来创建一个功能完善的论坛系统,其中包括用户注册、登录、发帖、回帖、浏览主题等功能。 【描述】该论坛项目是一个典型的J2EE应用程序,它展示了如何将后端服务与前端展示有效地...
例如,如果项目中包含一些非标准的XML配置文件,可以使用`XmlPullParser`进行解析: ```java XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser parser = factory.newPullParser...
这个项目的核心在于利用DJNativeSwing组件,这是一个开源的Java库,它扩展了Swing组件,增加了对操作系统本地功能的支持,如打印、拖放以及在这个案例中的屏幕截图。 1. **DJNativeSwing**: DJNativeSwing库是Java...