数字证书好比人的身份证。可以用证书像别人证明自己的身份一样。
分两种场合:
1,实名买火车票,需要权威的机构(公安局)帮你办的身份证做实名认证。身份证好比数字证书。
这种情况需要权威的机构,比方说是(CA ,Certificate Authority),如VerSign(www.versign.org)和Thawte(www.thawte.comm)颁发。
2,领工资,我只关心能领导如实数目的工资,当然也不含假钞。我可能并不关心这个工资是谁发给我的。
这种情况就可以只创建自我签名的证书,可以通过JDK自带的keytool来创建。
keytool 参数说明:
A.genkey: 生成一对非对称密钥
B.alias :取个别名,以后操作这个证书的时候都通过别名来操作
C.keyalg : 指定加密算法
D.keystore : 指定安全证书的存放路径
E.storepass:打开keystore所需要的密码
F.keypass:设置存储在keystore中密钥对的密码
G.validity:有效时间,单位是天(上例中即为180天)
如下图,利用JDK自带的keytool生成数字签名:
E:\work\balanceofworld\balance\balance.security>keytool -genkey -alias abnerCA -keyalg RSA -keysize 1024 -keystore abner CALib -validity 3650 输入keystore密码: 800528 您的名字与姓氏是什么? [Unknown]: 亚军 您的组织单位名称是什么? [Unknown]: 爱的小屋 您的组织名称是什么? [Unknown]: 爱的小屋 您所在的城市或区域名称是什么? [Unknown]: 滨江区 您所在的州或省份名称是什么? [Unknown]: 浙江省 该单位的两字母国家代码是什么 [Unknown]: CN CN=亚军, OU=爱的小屋, O=爱的小屋, L=滨江区, ST=浙江省, C=CN 正确吗? [否]: y
输入<abnerCA>的主密码 (如果和 keystore 密码相同,按回车):
|
查看证书:
E:\work\balanceofworld\balance\balance.security>keytool -list -keystore abnerCALib 输入keystore密码: 800528
Keystore 类型: jks Keystore 提供者: SUN
您的 keystore 包含 1 输入
abnerca, 2009-11-10, keyEntry, 认证指纹 (MD5): 58:DD:1B:BF:46:93:21:48:F4:E5:4B:B0:A9:F6:1B:18
|
又如: keytool -list -alias abnerCA -keystore abnerCALib
将显示 abnerCALib证书库中别名为abnerCA的证书的信息。如下图所示:
E:\work\balanceofworld\balance\balance.security>keytool -list -alias abnerCA -keystore abnerCALib 输入keystore密码: 800528 abnerCA, 2009-11-10, keyEntry, 认证指纹 (MD5): 58:DD:1B:BF:46:93:21:48:F4:E5:4B:B0:A9:F6:1B:18
|
又如: keytool -list -v -alias abnerCA -keystore abnerCALib
将显示证书的详细信息( -v参数)如下图所示:
E:\work\balanceofworld\balance\balance.security>keytool -list -v -alias abnerCA -keystore abnerCALib 输入keystore密码: 800528 别名名称: abnerCA 创建日期: 2009-11-10 输入类型:KeyEntry 认证链长度: 1 认证 [1]: Owner: CN=亚军, OU=爱的小屋, O=爱的小屋, L=滨江区, ST=浙江省, C=CN 发照者: CN=亚军, OU=爱的小屋, O=爱的小屋, L=滨江区, ST=浙江省, C=CN 序号: 4af96666 有效期间: Tue Nov 10 21:11:02 CST 2009 至: Fri Nov 08 21:11:02 CST 2019 认证指纹: MD5: 58:DD:1B:BF:46:93:21:48:F4:E5:4B:B0:A9:F6:1B:18 SHA1: 83:A0:86:47:D2:26:C9:44:1B:ED:4E:BA:45:BC:62:FE:C4:E8:54:13 |
如: keytool -export -alias abnerCA -file abnerCA.cer -keystore abnerCALib
将把证书库 abnerCALib中的别名为abnerCA的证书导出到abnerCA.cer证书文件中,
它包含证书主体的信息及证书的公钥,不包括私钥,可以公开,如下图所示 :
E:\work\balanceofworld\balance\balance.security>keytool -export -alias abnerCA -file abnerCA.cer -keystore abnerCALib 输入keystore密码: 800528 保存在文件中的认证 <abnerCA.cer> |
上面导出的证书文件是以二进制编码文件,无法用文本编辑器正确显示,因此不利用公布证书,可以加上 -rfc参数以一种可打印的编者编码输出。
E:\work\balanceofworld\balance\balance.security>keytool -export -alias abnerCA -file abnerCA.cer -keystore abnerCALib -s torepass 800528 -rfc 保存在文件中的认证 <abnerCA.cer> |
其他一些功能:
keytool的命令行参数-delete可以删除密钥库中的条目,
如: keytool -delete -alias abnerCA -keystore abnerCALib
这条命令将 abnerCALib库中的abnerCA这一条证书删除了。
证书条目口令的修改
如: keytool –keypasswd –alias abnerCA –keystore abnerCALib
可以以交互的方式修改 abnerCALib证书库中的条目为abnerCA的证书。
Keytool –keypasswd –alias abnerCA –keypass 123456 –new 200100 –storepass 800528 –keystore abnerCALib
详见:http://blog.csdn.net/CYHJRX/archive/2009/02/17/3899577.aspx
读取以上生成的证书文件的代码:
package com.yajun.certificate;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.security.cert.CertificateExpiredException;
import java.security.cert.CertificateFactory;
import java.security.cert.CertificateNotYetValidException;
import java.security.cert.X509Certificate;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
public class CerCertificateReader {
public static void main(String[] args) {
try {
// =============== 读取生成的本地证书文件 ===========
String pass = "800528";
FileInputStream in2 = new FileInputStream("E:\\work\\balanceofworld\\balance\\balance.security\\abnerCALib");
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(in2, pass.toCharArray());
String alias = "abnerCA"; // alias为条目的别名
// 获取私钥文件
PrivateKey privateKey = (PrivateKey) ks.getKey(alias, pass.toCharArray());
System.out.println(privateKey);
Certificate c = ks.getCertificate(alias);
System.out.println("转换成String后的证书信息:" + c.toString());
// 获取获取X509Certificate类型的对象,这是证书类获取Certificate的子类,实现了更多方法
X509Certificate t = (X509Certificate) c;
// 从信息中提取需要信息
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();// 签名值
PublicKey pk = t.getPublicKey();
byte[] pkenc = pk.getEncoded();
System.out.println("公钥:");
for (int i = 0; i < pkenc.length; i++) {
System.out.print(pkenc[i] + ",");
}
System.err.println();
// 证书的日期有效性检查,颁发的证书都有一个有效性的日期区间
Date TimeNow = new Date();
t.checkValidity(TimeNow);
System.out.println("证书的日期有效性检查:有效的证书日期!");
// ======================== 读取 cer 证书文件(改证书文件时可以公布出去的,不包含私钥的) ===========================
FileInputStream fis = new FileInputStream(
"E:\\work\\balanceofworld\\balance\\balance.security\\abnerCA.cer");
CertificateFactory cf = CertificateFactory.getInstance("X.509");
Collection c1 = cf.generateCertificates(fis);
Iterator i = c1.iterator();
while (i.hasNext()) {
Certificate cert = (Certificate) i.next();
System.out.println(cert);
}
} catch (CertificateExpiredException e) {// 证书的日期有效性检查:过期
System.out.println("证书的日期有效性检查:过期");
} catch (CertificateNotYetValidException e) { // 证书的日期有效性检查:尚未生效
System.out.println("证书的日期有效性检查:尚未生效");
} catch (CertificateException ce) {
ce.printStackTrace();
} catch (FileNotFoundException fe) {
fe.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
- 大小: 84.2 KB
分享到:
相关推荐
websphere 内存溢出 javacore分析工具jca456 分析javacore的好工具 分析javacore的好工具
javacore分析工具,很好的一款图形界面分析工具
websphere javacore 分析工具 jca412
websphere 内存溢出 javacore分析工具jca401 分析javacore的好工具 分析javacore的好工具
帮忙分析javacore和dump文件,查看内存泄漏,线程阻塞,个人觉得很实用,希望可以帮忙到需要的人
不懂jca的朋友可以来这看看,一个jca的演示程序,程序逻辑清晰
jca工具分析死锁及内存情况
IBM Thread and Monitor Dump Analyzer for Java(简称 jca)。它可以识别Java线程中的挂起,死锁,资源竞争,和瓶颈。 使用方法: java -Xmx1000m -jar jca456.jar
ibm websphere 服务器内存溢出或其他故障,生成javacore,分析工具
IBM Thread and Monitor Dump Analyzer for Java(简称 jca)。它可以识别Java线程中的挂起,死锁,资源竞争,和瓶颈。 使用方法: java -Xmx1000m -jar jca456.jar
JCA练习 JCA练习 JCA练习 JCA练习 JCA练习
java线程堆栈分析工具jca466.jar;堆内存分析工具Memory Analyzer;分析内存泄露产生的javacore文件,以便于定位blocked线程
为了帮助开发人员构建安全的J2EE应用,本书详细地描述了J2EE安全技术,包括Servlet、JSP、EJB的安全——这些技术是J2EE体系结构的核心。另外本书还涵盖了Web服务的安全技术。 本书还详细描述了Java与加密技术之间的...
jca java dump分析工具,检测java 内存溢出,检测java 堆栈资源分析
javacore分析工具 jca37.zip IBM javacore分析工具 jca37.zip heapdump分析工具HeapAnalyzer heapdump分析工具------HeapAnalyzer: 2014年1月最新发布 用法: 在命令行执行 java -Xmx500m -jar ha453.jar
最新IBM javacore分析工具。它提供了广泛的详细 GC 数据值的图形显示,并处理 optthruput、optavgpause 和 gencon GC 模式。它具有原始日志、表格式数据和图表视图,并且可以将数据保存到 jpeg 或 .csv 文件(用于...
内存分析工具 jca455.jar 和 ha455.jar 需要用java7运行 java -jar jca455.jar or java -jar ha455.jar
利用Jca工具分析JavaCore文件/Thread dump文件。Jca工具分析JavaCore文件/Thread dump文件。很实用。
IBM Thread and Monitor Dump Analyzer for Java 2014年1月最新发布 可以分析weblogic或was当机生成的javacore和dump文件 使用方法在命令行输入 java -Xmx500m -jar jca452.jar
该资源包含了两部分内容,jca和ha。jca是java线程堆栈分析工具,此压缩包包含的版本是jca396.jar,ha是java内存使用情况分析工具,此压缩包包含的版本是ha405.jar