Galera, estou começando a mexer com certificados no Java e não estou conseguindo criar um CertificateChain para meu certificado de teste.
O que eu tenho é o seguinte: meu certificado criado por um certificado(issuer B), que por sua vez é criado por um certificado(issuer A),ou seja, tenho uma cadeia com 3 certificados, certo?
Agora eu gostaria de montar essa cadeia para poder validar o meu certificado de teste, mas não estou conseguindo
Estou usando apenas o JCA do Java, sem nenhum outro Framework(Bouncy Castle ou CODEC[do projeto Semoa]).
E estou usando assim:
CertificateFactory cf = CertificateFactory.getInstance("X.509");
FileInputStream fis = new FileInputStream(new File("D:" + File.separator + "TESTEX509.cert"));
BufferedInputStream bis = new BufferedInputStream(fis);
X509Certificate c = (X509Certificate) cf.generateCertificate(bis);
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
FileInputStream fis2 = new FileInputStream(System.getenv("APPDATA")+File.separator+"Sun"+File.separator+"Java"+File.separator+"Deployment"+File.separator+"security"+File.separator+"trusted.cacerts");
BufferedInputStream bis2 = new BufferedInputStream(fis2);
ks.load(bis2,"".toCharArray());
//Um seletor de certificado informando que o subject é o issuer do MEU certificado lido.
X509CertSelector xcs = new X509CertSelector();
xcs.setSubject(x9.getIssuerX500Principal().getEncoded());
PKIXBuilderParameters pkbp = new PKIXBuilderParameters(ks,xcs);
CertPathBuilder cpb1 = CertPathBuilder.getInstance("PKIX");
CertPathBuilderResult cpbr1 = cpb1.build(pkbp);
CertPath cp1 = cpbr1.getCertPath();
Alguém dá alguma luz??? Se eu puxo a lista ta lá direitinho, Cert A: Subject: José, Issuer: José. Cert B: Subject: Pedro, Issuer: José.
o Cert A seria a CA e o cert B um intermediário. Tá difícil isso meu =/
Obs: Eu importei todos os certificados que estão fazendo a cadeia dentro do trusted.certs pelo Painel de controle do Java(Painel de Controle -> Java), ou seja, todos os certificados estão lá. Mas não sei porque o certPath cp1 vem com length zero. Não traz nada =(