<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>
(1)从密钥库中读取CA的证书
FileInputStream in=new FileInputStream(".keystore");
KeyStore ks=KeyStore.getInstance("JKS");
ks.load(in,storepass.toCharArray());
java.security.cert.Certificate c1=ks.getCertificate("caroot");
(2)从密钥库中读取CA的私钥
PrivateKey caprk=(PrivateKey)ks.getKey(alias,cakeypass.toCharArray());
(3)从CA的证书中提取签发者的信息
byte[] encod1=c1.getEncoded(); 提取CA证书的编码
X509CertImpl cimp1=new X509CertImpl(encod1); 用该编码创建X509CertImpl类型对象
X509CertInfo cinfo1=(X509CertInfo)cimp1.get(X509CertImpl.NAME+"."+X509CertImpl.INFO); 获取X509CertInfo对象 X500Name issuer=(X500Name)cinfo1.get(X509CertInfo.SUBJECT+"."+CertificateIssuerName.DN_NAME); 获取X509Name类型的签发者信息
(4)获取待签发的证书
CertificateFactory cf=CertificateFactory.getInstance("X.509");
FileInputStream in2=new FileInputStream("user.csr");
java.security.cert.Certificate c2=cf.generateCertificate(in);
(5)从待签发的证书中提取证书信息
byte [] encod2=c2.getEncoded();
X509CertImpl cimp2=new X509CertImpl(encod2); 用该编码创建X509CertImpl类型对象
X509CertInfo cinfo2=(X509CertInfo)cimp2.get(X509CertImpl.NAME+"."+X509CertImpl.INFO); 获取X509CertInfo对象 (6)设置新证书有效期
Date begindate=new Date(); 获取当前时间
Date enddate=new Date(begindate.getTime()+3000*24*60*60*1000L); 有效期为3000天
CertificateValidity cv=new CertificateValidity(begindate,enddate); 创建对象
cinfo2.set(X509CertInfo.VALIDITY,cv); 设置有效期
(7)设置新证书序列号
int sn=(int)(begindate.getTime()/1000); 以当前时间为序列号
CertificateSerialNumber csn=new CertificateSerialNumber(sn);
cinfo2.set(X509CertInfo.SERIAL_NUMBER,csn);
(8)设置新证书签发者
cinfo2.set(X509CertInfo.ISSUER+"."+CertificateIssuerName.DN_NAME,issuer);应用第三步的结果
(9)设置新证书签名算法信息
AlgorithmId algorithm=new AlgorithmId(AlgorithmId.md5WithRSAEncryption_oid);
cinfo2.set(CertificateAlgorithmId.NAME+"."+CertificateAlgorithmId.ALGORITHM,algorithm);
(10)创建证书并使用CA的私钥对其签名
X509CertImpl newcert=new X509CertImpl(cinfo2);
newcert.sign(caprk,"MD5WithRSA"); 使用CA私钥对其签名
(11)将新证书写入密钥库
ks.setCertificateEntry("lf_signed",newcert);
FileOutputStream out=new FileOutputStream("newstore");
ks.store(out,"newpass".toCharArray()); 这里是写入了新的密钥库,也可以使用第七条来增加条目
分享到:
相关推荐
二、使用Java程序签发数字证书 在这个实验中,我们使用上面确定的CA“wang zhihui”对证书“wzh”进行签发。我们使用J2SDK内部使用的X509CertImpl类来创立新的证书,该类的构造器中传入有关新的证书的各种信息,...
### Java 获取数字证书信息 ...总之,本文介绍了如何使用Java和相关工具(如TOMCAT、JDK、OpenSSL)来搭建SSL服务、签发和管理数字证书以及如何在Java程序中处理客户端证书。这些技术对于实现安全的网络通信至关重要。
5. 使用数字证书:在Java程序中,可以通过KeyStore类加载和使用证书,进行加密、解密、签名和验证签名操作。 例如,使用jarsigner工具给Applet签名,可以突破Applet的权限限制: ```bash jarsigner -keystore ...
数字证书是一种电子文档,由可信的第三方机构(称为证书颁发机构,简称CA)签发,用于证明网络实体的身份。它包含了公钥的所有者信息、公钥本身、颁发者的身份以及证书的有效日期。在Java中,这些证书通常存储在JKS...
### JAVA对数字证书的常用操作 #### 一、需要包含的包 在进行数字证书的操作之前,我们需要导入一些必要的Java包。这些包主要用于处理安全相关的类和接口。 ```java import java.security.*; import java.io.*; ...
多线程支持: Java内置了对多线程的支持,允许程序同时执行多个任务。这对于开发需要高并发性能的应用程序(如服务器端应用、网络应用等)非常重要。 自动内存管理(垃圾回收): Java具有自动内存管理机制,通过...
数字证书通常由证书颁发机构(Certificate Authority, CA)签发,这些机构负责验证申请者的身份信息并为其颁发数字证书。数字证书的主要组成部分包括持有者的公钥、持有者的身份信息、证书的有效期、颁发者的名称及...
这个库允许Java程序与本地操作系统集成,从而能够使用Windows内置的证书存储区,这是处理本地数字证书的一个便捷方式。 要使用`mscrypto.jar`,你需要将其添加到Java项目的类路径中。这可以通过编辑`CLASSPATH`环境...
Java 数字签名和数字证书是网络安全领域中的重要概念,它们在确保数据的完整性和认证信息来源的可靠性方面发挥着关键作用。在这个Java源码包中,我们可能找到了用于生成数字签名和数字证书的相关代码,这对于理解和...
在Java编程环境中,数字证书是实现安全套接层(SSL)通信、确保数据传输安全的重要工具。本篇文章将深入探讨Java对数字证书的常用操作,包括导入必要的库、从文件中读取证书、从密钥库中直接读取证书、显示证书信息...
总的来说,Java提供了一套完整的API来处理数字签名和数字证书,使得开发者能够在应用程序中轻松集成安全机制。理解和掌握这些概念及其实现方式对于构建安全的网络服务至关重要。在实际开发过程中,还需要关注安全...
在Java编程环境中,数字...通过以上知识,开发者可以在Java应用程序中有效地利用数字证书进行安全通信,保障数据的安全和隐私。在实际项目中,应根据具体需求选择合适的安全策略,如证书的获取、存储、分发和更新等。
例如,你可以用它来创建和管理内部的 Certificate Authority (CA),从而签发和管理组织内部的数字证书。 总之,`JAVA keytool`数字证书生成及应用是一个涵盖密钥对管理、证书创建、导入导出、以及安全配置等多个...
CFCA证书环境的Java安装是确保Java应用能够识别并信任CFCA签发的数字证书的关键步骤。下面将详细介绍如何进行这一过程。 首先,你需要了解CFCA证书的基本概念。CFCA是一家权威的数字证书颁发机构,其SSL证书用于...
在进行Java数字证书操作时,需要导入以下包来确保程序能够顺利执行相关的安全和证书处理功能: ```java import java.security.*; import java.io.*; import java.util.*; import java.security.cert.*; import sun....
Java根证书是Java安全模型的重要组成部分,主要用于验证数字证书的可信度。在Java中,根证书扮演着公钥基础设施(PKI)的信任锚点角色,确保网络通信的安全性,特别是对于HTTPS、S/MIME以及代码签名等应用。理解Java...
在安卓(Android)平台上,数字证书是用于验证应用程序或服务身份的重要工具,它们基于公钥基础设施(PKI)原理,确保数据的安全传输和应用的可信度。本篇将深入探讨安卓Android中的数字证书以及相关扩展项,特别是...
Java 生成证书是指通过 Java 的 keytool 工具和 OpenSSL 库生成数字证书的过程。在 HTTPS 环境下,证书是必不可少的组件, play a crucial role in ensuring the security and authenticity of online transactions....
Java CA是负责签发和管理数字证书的机构,其工作基于公钥基础设施(PKI)原理。Java CA为用户、服务器和其他实体提供信任服务,确保网络通信的安全性。当USB KEY与Java CA一起使用时,用户可以通过插入USB设备来证明...