`
yjhexy
  • 浏览: 332294 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

JAVA 机密机制初探(JCA)—— 安全证书

阅读更多

数字证书好比人的身份证。可以用证书像别人证明自己的身份一样。

 

分两种场合:

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
分享到:
评论

相关推荐

    IBM WEBSPHERE javacore分析工具jca

    本文将深入探讨IBM WebSphere中的JCA(Java Connector Architecture)与javacore分析之间的关联。 首先,JCA是Java平台的标准,用于集成企业信息系统(EIS)和Java应用程序。它为开发者提供了一种标准接口来访问和...

    jca javacore分析工具

    JCA(Java Core Analysis)工具就是用于解析和分析这些文件的专业软件。 1. **Java Core (javacore) 文件**: Java Core文件是由JVM生成的一种日志文件,记录了JVM在特定时刻的状态,包括线程堆栈信息、内存使用...

    was内存溢出 javacore分析工具jca 456

    本篇将详细探讨如何利用Javacore分析工具JCA 456来诊断和解决这类问题。 WebSphere是IBM推出的一款强大的Java应用程序服务器,它为开发和部署企业级应用提供了全面的平台。然而,在长时间运行或处理大量数据时,...

    websphere javacore 分析工具 jca412

    【标题】"Websphere Javacore 分析工具 JCA412"涉及的是IBM Websphere应用服务器中的一项核心诊断技术,Javacore,以及与Java连接器架构(JCA)相关的分析和故障排查。Javacore是IBM Websphere在遇到异常或系统崩溃...

    IBM Thread and Monitor Dump Analyzer for Java (jca) 线程分析工具 jca456.jar

    IBM Thread and Monitor Dump Analyzer for Java(简称 jca)。它可以识别Java线程中的挂起,死锁,资源竞争,和瓶颈。 使用方法: java -Xmx1000m -jar jca456.jar

    jca-分析javacore和dump.zip

    JCA(Java Composite Diagnostic Tools)是Oracle提供的一个强大工具,用于分析和诊断Java应用的问题,包括内存泄漏、性能瓶颈以及死锁等。在"jca-分析javacore和dump.zip"这个压缩包中,包含了一个名为"jca457.jar...

    was内存溢出 javacore分析工具jca 401

    标题中的“was内存溢出 javacore分析工具jca 401”指的是在WebSphere应用服务器(WAS)环境中,出现内存溢出问题时,使用名为JCA(Java Core Analysis)401的工具进行分析的情况。内存溢出是程序运行过程中,因分配...

    javacore分析工具jca36

    JavaCore分析工具JCA36是一款专为Java开发者设计的强大性能分析工具,它提供了一个直观的图形用户界面(GUI),帮助开发者深入理解Java应用程序的运行状况。通过使用JCA36,用户可以轻松地捕获和分析Java虚拟机(JVM...

    java的jca演示程序

    不懂jca的朋友可以来这看看,一个jca的演示程序,程序逻辑清晰

    Java实现浏览器CA证书的签名和验证

    Java提供了丰富的API来处理证书的生成、签名、验证等操作,包括但不限于使用Java Cryptography Architecture (JCA) 和 Java Cryptography Extension (JCE)。 在Java中,可以使用keytool工具来生成自签名证书,或者...

    IBM Thread and Monitor Dump Analyzer for Java (jca) 线程分析工具 jca45

    IBM Thread and Monitor Dump Analyzer for Java(简称 jca)。它可以识别Java线程中的挂起,死锁,资源竞争,和瓶颈。 使用方法: java -Xmx1000m -jar jca456.jar

    java线程堆栈分析工具jca457.jar

    java线程堆栈分析工具jca466.jar;堆内存分析工具Memory Analyzer;分析内存泄露产生的javacore文件,以便于定位blocked线程

    JCA练习 JCA练习

    JCA练习 JCA练习 JCA练习 JCA练习 JCA练习

    JCA433及JCA463

    Java Comprehensive Application (JCA) 是Java平台上的一个关键组件,主要用于在Java应用程序中集成企业级服务,例如消息传递、数据库连接等。标题提到的“JCA433及JCA463”可能是两个版本号,暗示这可能是一个用于...

    Java-Java加密与安全教程

    在本教程中,我们将深入探讨Java提供的各种加密技术和安全机制。 一、Java加密技术 1. **Java Cryptography Extension (JCE)**:JCE是Java平台的标准扩展,提供了强大的加密功能,支持多种加密算法,如AES(高级...

    企业级Java安全性(构建安全的J2EE应用)

    为了帮助开发人员构建安全的J2EE应用,本书详细地描述了J2EE安全技术,包括Servlet、JSP、EJB的安全——这些技术是J2EE体系结构的核心。另外本书还涵盖了Web服务的安全技术。 本书还详细描述了Java与加密技术之间的...

    网络安全技术应用——数字签名技术在Java中的实现.pdf

    "数字签名技术应用——Java中的实现" 数字签名技术是一种用于保证信息完整性、私有性和不可抵赖性的安全技术,以公开密钥加密体制为基础。其核心是采用加密技术的加、解密算法体制来实现对信息的数字签名。数字签名...

    基于Java的两个通用安全模块的设计与实现.zip

    在Java中,Java Cryptography Architecture (JCA)和Java Cryptography Extension (JCE)为开发者提供了加密、解密、签名和哈希等安全操作。例如,使用RSA公钥/私钥对进行数据加密,或者使用SHA-256进行消息摘要,确保...

    jca分析工具.zip

    Java Core Analysis (JCA) 工具是Java开发者在排查性能问题、监控应用程序或诊断线程问题时的重要辅助工具。这个名为"jca分析工具.zip"的压缩包包含了一个名为"jca433.jar"的文件,这很可能是JCA工具的一个版本,...

    java 安全编程指南

    1. **Java安全模型**:Java的安全模型基于沙箱机制,它限制了代码(尤其是来自不可信源的代码)的执行权限,以防止恶意行为。理解这个模型是确保代码安全的基础。 2. **类加载器与权限**:Java中的类加载器负责加载...

Global site tag (gtag.js) - Google Analytics