数字证书好比人的身份证。可以用证书像别人证明自己的身份一样。
分两种场合:
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
分享到:
相关推荐
JavaCore分析工具JCA36是一款专为Java开发者设计的强大性能分析工具,它提供了一个直观的图形用户界面(GUI),帮助开发者深入理解Java应用程序的运行状况。通过使用JCA36,用户可以轻松地捕获和分析Java虚拟机(JVM...
本文将深入探讨IBM WebSphere中的JCA(Java Connector Architecture)与javacore分析之间的关联。 首先,JCA是Java平台的标准,用于集成企业信息系统(EIS)和Java应用程序。它为开发者提供了一种标准接口来访问和...
本篇将详细探讨如何利用Javacore分析工具JCA 456来诊断和解决这类问题。 WebSphere是IBM推出的一款强大的Java应用程序服务器,它为开发和部署企业级应用提供了全面的平台。然而,在长时间运行或处理大量数据时,...
【标题】"Websphere Javacore 分析工具 JCA412"涉及的是IBM Websphere应用服务器中的一项核心诊断技术,Javacore,以及与Java连接器架构(JCA)相关的分析和故障排查。Javacore是IBM Websphere在遇到异常或系统崩溃...
JCA(Java Core Analysis)工具就是用于解析和分析这些文件的专业软件。 1. **Java Core (javacore) 文件**: Java Core文件是由JVM生成的一种日志文件,记录了JVM在特定时刻的状态,包括线程堆栈信息、内存使用...
JCA(Java Composite Diagnostic Tools)是Oracle提供的一个强大工具,用于分析和诊断Java应用的问题,包括内存泄漏、性能瓶颈以及死锁等。在"jca-分析javacore和dump.zip"这个压缩包中,包含了一个名为"jca457.jar...
标题中的“was内存溢出 javacore分析工具jca 401”指的是在WebSphere应用服务器(WAS)环境中,出现内存溢出问题时,使用名为JCA(Java Core Analysis)401的工具进行分析的情况。内存溢出是程序运行过程中,因分配...
不懂jca的朋友可以来这看看,一个jca的演示程序,程序逻辑清晰
IBM Thread and Monitor Dump Analyzer for Java(简称 jca)。它可以识别Java线程中的挂起,死锁,资源竞争,和瓶颈。 使用方法: java -Xmx1000m -jar jca456.jar
Java提供了丰富的API来处理证书的生成、签名、验证等操作,包括但不限于使用Java Cryptography Architecture (JCA) 和 Java Cryptography Extension (JCE)。 在Java中,可以使用keytool工具来生成自签名证书,或者...
java线程堆栈分析工具jca466.jar;堆内存分析工具Memory Analyzer;分析内存泄露产生的javacore文件,以便于定位blocked线程
IBM Thread and Monitor Dump Analyzer for Java(简称 jca)。它可以识别Java线程中的挂起,死锁,资源竞争,和瓶颈。 使用方法: java -Xmx1000m -jar jca456.jar
JCA练习 JCA练习 JCA练习 JCA练习 JCA练习
Java Comprehensive Application (JCA) 是Java平台上的一个关键组件,主要用于在Java应用程序中集成企业级服务,例如消息传递、数据库连接等。标题提到的“JCA433及JCA463”可能是两个版本号,暗示这可能是一个用于...
在本教程中,我们将深入探讨Java提供的各种加密技术和安全机制。 一、Java加密技术 1. **Java Cryptography Extension (JCE)**:JCE是Java平台的标准扩展,提供了强大的加密功能,支持多种加密算法,如AES(高级...
为了帮助开发人员构建安全的J2EE应用,本书详细地描述了J2EE安全技术,包括Servlet、JSP、EJB的安全——这些技术是J2EE体系结构的核心。另外本书还涵盖了Web服务的安全技术。 本书还详细描述了Java与加密技术之间的...
"数字签名技术应用——Java中的实现" 数字签名技术是一种用于保证信息完整性、私有性和不可抵赖性的安全技术,以公开密钥加密体制为基础。其核心是采用加密技术的加、解密算法体制来实现对信息的数字签名。数字签名...
在Java中,Java Cryptography Architecture (JCA)和Java Cryptography Extension (JCE)为开发者提供了加密、解密、签名和哈希等安全操作。例如,使用RSA公钥/私钥对进行数据加密,或者使用SHA-256进行消息摘要,确保...
1. **Java安全模型**:Java的安全模型基于沙箱机制,它限制了代码(尤其是来自不可信源的代码)的执行权限,以防止恶意行为。理解这个模型是确保代码安全的基础。 2. **类加载器与权限**:Java中的类加载器负责加载...
Java Core Analysis (JCA) 工具是Java开发者在排查性能问题、监控应用程序或诊断线程问题时的重要辅助工具。这个名为"jca分析工具.zip"的压缩包包含了一个名为"jca433.jar"的文件,这很可能是JCA工具的一个版本,...