JAVA编写CA认证中的.KEYSTORE的问题

Eros1219 2003-08-20 07:18:58
用BIN目录下KEYTOOL生成自签证书中的秘钥对存在.keystore文件中,
但为什么.KEYSTORE不能打开?
各位高手能提点一下么,小女子不盛感激。

...全文
189 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eros1219 2003-08-20
  • 打赏
  • 举报
回复
谢谢高人,实在惭愧,请问这些包要在哪下?
Euyi 2003-08-20
  • 打赏
  • 举报
回复
package criptografia.protocolos;

import java.security.*;
import java.security.cert.*;
import java.security.spec.*;
import java.security.interfaces.*;
import javax.crypto.*;
import java.io.*;
import java.util.*;
import java.math.*;
import java.net.*;

import iaik.asn1.structures.Name;
import iaik.asn1.structures.AlgorithmID;
import iaik.asn1.ObjectID;

public class CA {

public static void main(String args[]) throws Exception {

// Verificar se os parametros est correctos
if (args.length == 5) {

// Requisitar uma keystore do tipo JKS
KeyStore ks = KeyStore.getInstance("JKS");

// Carregar a keystore a partir do ficheiro especificado

FileInputStream fis = new FileInputStream(args[0]);
ks.load(fis,args[1].toCharArray());
fis.close();

// Obter o certificado do issuer
java.security.cert.Certificate[] issuerChain = ks.getCertificateChain(args[2]);
X509Certificate issuer = (X509Certificate)issuerChain[0];

// Obter chave p lica do issuer e par etros comuns
DSAPublicKey caPublicKey = (DSAPublicKey) issuer.getPublicKey();
BigInteger p = caPublicKey.getParams().getP();
BigInteger q = caPublicKey.getParams().getQ();
BigInteger g = caPublicKey.getParams().getG();

// Obter chave privada do issuer
PrivateKey chave = (PrivateKey) ks.getKey(args[2],args[3].toCharArray());

// Criar um server socket na porta parametrizada
ServerSocket ss = new ServerSocket(Integer.parseInt(args[4]));

while (true) {

System.out.println("Estou ?espera na porta "+args[4]);

// Ficar ?espera de uma comunica o
Socket s = ss.accept();
ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
ObjectInputStream in = new ObjectInputStream(s.getInputStream());

// Enviar par etros comuns da comunidade
out.writeObject(p);
out.writeObject(q);
out.writeObject(g);

// Construir um certificado para o subject

// Temos que usar os certificados do provider IAIK
// porque na JCA n ?poss el criar

iaik.x509.X509Certificate cert = new iaik.x509.X509Certificate();
// Este n ero de sie aleatio n faz muito sentido...
cert.setSerialNumber(new BigInteger(32, new Random()));

// Definir o DN do issuer
cert.setIssuerDN(converte(issuer.getSubjectDN().getName()));
// Definir o DN do subject
String subjectDN = (String) in.readObject();
System.out.println("Vou emitir um certificado para "+subjectDN);
cert.setSubjectDN(converte(subjectDN));

// Definir a chave plica do subject
PublicKey subjectPK = (PublicKey) in.readObject();
cert.setPublicKey(subjectPK);

// Definir prazo de validade do certificado
GregorianCalendar data = (GregorianCalendar) Calendar.getInstance();
cert.setValidNotBefore(data.getTime());
data.add(Calendar.MONTH, 6);
cert.setValidNotAfter(data.getTime());

// Assinar o certificado
cert.sign(AlgorithmID.dsa,chave);

// Imprimir o conteudo do certificado
System.out.println(cert.toString(true));

// Enviar o certificado ao subject
out.writeObject(cert.getEncoded());

}
} else {
System.out.println("Modo de utiliza玢o: java CA <keystore> <password> <issuer> <keypass> <porta>");
}
}

// M閠odo auxiliar utilizado para converter uma string com um DN
// numa inst钞cia de iaik.asn1.structures.Name

private static Name converte(String aux) {
Name res = new Name();
int i, f;
i=aux.indexOf("C=");
f=aux.indexOf(",",i);
if (f==-1) f=aux.length();
String c = aux.substring(i+2,f);
i=aux.indexOf("ST=");
f=aux.indexOf(",",i);
if (f==-1) f=aux.length();
String st = aux.substring(i+3,f);
i=aux.indexOf("L=");
f=aux.indexOf(",",i);
if (f==-1) f=aux.length();
String l = aux.substring(i+2,f);
i=aux.indexOf("O=");
f=aux.indexOf(",",i);
if (f==-1) f=aux.length();
String o = aux.substring(i+2,f);
i=aux.indexOf("OU=");
f=aux.indexOf(",",i);
if (f==-1) f=aux.length();
String ou = aux.substring(i+3,f);
i=aux.indexOf("CN=");
f=aux.indexOf(",",i);
if (f==-1) f=aux.length();
String cn = aux.substring(i+3,f);
res.addRDN(ObjectID.country, c);
res.addRDN(ObjectID.stateOrProvince, st);
res.addRDN(ObjectID.locality, l);
res.addRDN(ObjectID.organization, o);
res.addRDN(ObjectID.organizationalUnit, ou);
res.addRDN(ObjectID.commonName, cn);
return res;
}

}


------------------------------------------------------------------
Euyi

zhaoruyi2003@263.net
------------------------------------------------------------------
# 课程背景2021年ARM又推出了ARMv9架构,系统软件架构也在悄无声息地发生变化。在这种架构,强调的是隔离技术,包括资源的隔离、运行时隔离,特权操作系统的权限也变得越来越小…不管您是什么领域,ARM服务器、汽车电子、手机或者是其它设备终端,安全都是其的一个重要环节。我们常说的安全一般是只网络安全/业务安全/App安全,这些安全依赖的正是操作系统安全,操作系统安全所依赖的就是安全架构技术,在该安全架构,首当要学习的就是Trustzone/TEE技术。只有设备安全/操作系统安全/APP安全/网络安全/服务器安全整个一条链都安全了,那么你的业务才算得上的安全.不管您是做什么的,您做不做安全或虚拟化,掌握整个系统软件架构也是一件必要的事情。您只有掌握了安全架构,你才具有全局的视野,才能进行全局的软件设计,才称得上架构师。安全不仅仅是架构安全,安全还是一种生态,安全还产生一类标准。安全出现在产品声明周期的任何一个角落,它可能零碎地出现在硬件、零碎地出现在软件代码。如果你不了解安全,你可能无法进行优秀的产品设计,你甚至无法去正确的阅读代码。# 课程介绍(1) 讲解ARM最新硬件架构(ARM Core、ARM Architecture)、SOC架构(2) 讲解最新的Trustzone安全架构、TEE架构、Secureboot等(3) 讲解软件组件:TF-A(ATF)、optee_os、Linux Kernel、CA/TA应用程序等,及其交互模型、设计模型(4) 多系统交互代码导读、安全论证实践、CA/TA示例实践、安全业务设计实践(5) 我们学习的是全部硬件、全部系统,软硬结合,或者是大系统的软硬件融合# 课程收益1、安全不再神秘,能cover住全局2、熟悉ARM Architecture架构知识3、熟悉SOC架构知识4、熟悉主流的系统软件框架5、知道多系统之间是如何交互的,也能够进行系统级的设计6、深入了解当前的系统安全架构以及未来安全架构趋势7、熟悉基础的安全业务设计方法8、熟悉系统的启动流程、Secureboot等9、知道Linux Kernel在大系统的位置,以及与其它系统交互的方法10、熟悉各类标准和规范11、学习资料的获取方法 # 课程大纲《Trustzone/TEE/系统安全开发速成班》 --当前48节课/19小时说明: 本视频会持续更新,购买时请以课程目录为主。本EXCEL一个月更新一次。章节编号课程时常第一章基础和简介1课程介绍 8:332ARM和SOC的架构简介60:13第二章软硬件基础3armv8/armv9基础概念26:204ARMv8/ARMv9的Trustzone技术77:565ARMv7的Trustzone技术8:376安全架构及其未来趋势(FF-A/SPM/CCA)6:417ARMv9 CCA机密计算框架底层核心原理简介20:448ARMv9 RME安全扩展详解61:299ATF Quick Start0161:2710Optee Quick Start49:3411系统软件Quick Start21:0412Secureboot原理深度讲解60:2813Android AVB的介绍26:0914TZC400详解17:5615TZC400代码导读之ATF13:4416RPMB详解30:0617RPMB代码导读之optee14:0318efuse详解12:1919Anti-Rollback的介绍11:33第三章软件架构20TEE的组件介绍67:5921TEE的RPC反向调用31:1422TEE的调度模型21:3223各类标准和规范22:17第四章软件架构(高级)24多系统之间的管理模型(ABI/标准)10:3025多系统之间的调度12:2126多系统之间的断(不含虚拟化)61:4727多系统之间的断(虚拟化)6:5728再谈多系统之间的调度(多核多线程)10:3129其它(内存管理/PSCI...)10:12第五章安全应用开发基础30安全应用开发基础5:3731TEE环境:qemu_V8环境的使用4:2032TEE环境:编写一个CA和TA程序11:0433TEE环境:编写漂亮的文档4:1434TEE环境:搭建阅读代码神器opengrok3:2635TEE环境(必看):使用集成好的qemu_v8镜像程序20:2936[CA/TA开发]CA到TA的通信9:1837[CA/TA开发]CA到TA的传参27:1638[CA/TA开发]TEE的存储系统20:5739[CA/TA开发]TEE的密码学系统简介12:3740[CA/TA开发]TEE的密码学系统简介-数字摘要Hash等33:2141[CA/TA开发]TEE的密码学系统简介-对称密码学算法AES等12:2042[CA/TA开发]TEE的密码学系统简介-消息摘要算法HMAC等15:4843[CA/TA开发]TEE的密码学系统简介-非对称密码学算法RSA等7:33第六章安全业务设计高级44Gatekeeper的介绍29:3245keymaster/keymint/keystore/keystore213:2746生物认证(指纹/人脸)13:5747DRM的介绍21:3748TUI的介绍17:03总计时统计(分钟)1128:12 说明:本课程会持续更新…

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧