java 解析证书_java 读取证书类以及key tool gui 1.7
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相关推荐
- java解析文件_Java读取文件方法大全
public classReadFromFile {/*** 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件.*/ public static voidreadFileByByte ...
- linux java 生成证书_Java 制作证书(Windows 和Linux)
一.Windows数字证书 1. 生成数字证书 1.1 进入[%JAVA_HOME%]路径下 1 cd D:Program FilesJavajdk1.8.0_131 1.2 生成证书.一些命令中红色 ...
- java载入器材_JAVA之了解类载入器Classloader
1.类的载入.连接和初始化 类初始化通常包含载入.连接.初始化三个步骤. (1)进程的结束 每当执行一个java程序时,将会启动一个java虚拟机进程,无论程序多么复杂.有多少线程.都在这个java虚 ...
- java zipfile用法_Java使用ZipFile类实现Zip文件解压
java.util.zip.ZipFile类用于从 ZIP 文件读取条目. 即从给定的ZIP压缩文件中获取所有文件的信息,如:文件的名称.是否为目录等信息.可以使用这个类来实现将zip文件进行解压操作 ...
- java 匿名类型_Java之匿名类讲解
匿名类,正如名字一样在java中没有名字标识的类,当然了编译后还是会安排一个名字的. 下面是一个关于匿名类的简单例子: public classClient {public static voidma ...
- java ocsp请求_java – 客户端证书上的OCSP吊销
如果仅使用客户端的java.security.cert.X509Certificate,如何使用OCSP手动检查java中的证书撤销状态?我看不清楚这样做的明确方法. 或者,我可以让tomcat自动为 ...
- java安装证书_Java SSL证书的安装
https正在成为主流,http估计在不久的将来会被彻底放弃-- 一个Java程序需要访问一个https的网站的时候,可能需要涉及证书的安装,卸载等操作. 一.证书的下载 打开浏览器输入https:/ ...
- java mp3 信息_java读取MP3的信息
标签头"TAG" 3字节 标题 30字节 作者 30字节 专辑 30字节 出品年份 4字节 备注信息 28字节 保留 1字节 音轨 1字节 类型 1字节 import java.i ...
- java mp3 信息_java读取MP3的信息 | 学步园
标签头"TAG" 3字节 标题 30字节 作者 30字节 专辑 30字节 出品年份 4字节 备注信息 28字节 保留 1字节 音轨 1字节 类型 1字节 import java.i ...
最新文章
- NUXT: 视图和模板
- 大庆师范学院计算机系徐媛老师,大庆师范学院课程表(未添加英语课).xls
- 在Eclipse中搭建Python开发环境
- JVM性能调优监控工具专题一:JVM自带性能调优工具(jps,jstack,jmap,jhat,jstat,hprof)...
- 深度图像特征在推荐和广告中的应用(一)
- scanf函数的读取
- mac安装mysql(命令行方式)
- Multisim实现D触发器模拟异步计数器
- 产品经理学习——卡诺模型
- 交通大数据应用细分_大数据、数据挖掘在交通领域有哪些应用?
- WordPress防止自动压缩jpg图片
- eclipse 导入项目后,在工程图标上出现红叉,但是工程中的文件并没有提示错误的解决方法
- 从实践角度重新理解BIO和NIO
- Echarts地图实现点击某地区跳转到指定页面
- 云数据库与传统数据库有什么区别
- 压敏电阻原理、参数、选型
- SpringSecurity 安全框架
- android橡皮擦擦图片功能
- Flalsh Lighting Network(闪电网络)
- 数据结构—回溯法、子集树、排列树
热门文章
- AI科研绘图3:排版
- NBT-新年4篇35分文章聚焦宏基因组研究
- R语言sd函数计算数值标准差实战(Standard Deviation)
- R语言使用coin包应用于独立性问题的置换检验(permutation tests、响应变量是否独立于组、两个数值变量是独立的吗、两个分类变量是独立的吗)、以及coin包的常用置换检验函数
- pandas使用groupby函数计算dataframe数据中每个分组的N个数值的滚动最小值(rolling min)、例如,计算某公司的多个店铺每N天(5天)的滚动销售额最小值
- R语言使用ggplot2包使用geom_boxplot函数绘制基础分组缺口箱图(notch boxplot)实战
- R语言循环中break函数和next函数使用实战
- LINUX的20练习题
- Science:便携式DNA测序仪在检测病毒疫情中大显身手
- A fuzzy Bruijn graph approach to long noisy reads assembly