Estou com um projeto de TCC onde terei que implementar certificação digital e vi que a API Bouncy Castle é uma API bem completa para a implementação, porém estava tentando fazer testes antes de usa-la e é ai que começa os meus problemas.
Baixei o .jar no site do BC e importei o mesmo no buld path para poder usar a API mas quando eu tento implementar a classe
X509V1CertificateGenerator ele da o seguinte erro:
org.bouncycastle.x509.X509V1CertificateGenerator
Note: This element has no attached source and the Javadoc could not be found in the attached Javadoc.
Já tentei de tudo e não consigo resolver. Preciso de uma solução o mais breve possível por favor.
import java.math.BigInteger;
import java.security.*;
import java.security.cert.CertificateEncodingException;
import java.security.cert.X509Certificate;
import java.util.Date;
import javax.security.auth.x500.X500Principal;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.x509.X509V1CertificateGenerator;
public class Teste {
public Teste()
{
Security.addProvider(new BouncyCastleProvider());
}
@SuppressWarnings("deprecation")
public static X509Certificate generateV1Certificate(KeyPair pair) throws InvalidKeyException, NoSuchProviderException, SecurityException, SignatureException, CertificateEncodingException, IllegalStateException, NoSuchAlgorithmException
{
X509V1CertificateGenerator certGen = new X509V1CertificateGenerator();
certGen.setSerialNumber(BigInteger.valueOf(System.currentTimeMillis()));
certGen.setIssuerDN(new X500Principal("CN=Test Certificate"));
certGen.setNotBefore(new Date(System.currentTimeMillis() - 50000));
certGen.setNotAfter(new Date(System.currentTimeMillis() + 50000));
certGen.setSubjectDN(new X500Principal("CN=Test Certificate"));
certGen.setPublicKey(pair.getPublic());
certGen.setSignatureAlgorithm("SHA256WithRSAEncryption");
return certGen.generate(pair.getPrivate(), "BC");
}
public KeyPair generateKeys() throws Exception
{
KeyPairGenerator keyGenerator = KeyPairGenerator.getInstance("RSA", "BC");//Algorítimo RSA e provedor BC
keyGenerator.initialize(1024, new SecureRandom());
return keyGenerator.generateKeyPair();
}
}
Você precisa instalar o BouncyCastle Provider. Ele não funciona só pondo os jars no seu classpath, a menos que na sua aplicação você adicione explicitamente o BouncyCastle como JCE Provider.
X509V1CertificateGenerator certGen = new X509V1CertificateGenerator();
e se da o seqguinte:
The type X509V1CertificateGenerator is deprecated. Ai quando eu coloco Add @supress warning aparece um risco em cima do X509V1CertificateGenerator e ai a mensagem: Note: This element has no attached source and the Javadoc could not be found in the attached Javadoc.
Ele é “deprecated” porque não se usam mais certificados da versão V1, só da versão V3. (Basicamente, porque certificados da versão 1 não suportam os algoritmos mais modernos e acabam sendo intrinsecamente mais inseguros).
Use uma outra coisa.
Para aprender a usar direitinho o BouncyCastle, tente achar o livro “Beginning Cryptography with Java” do sr. David Hook. (Esse livro é um pouco antigo, mas acho que alguém deve tê-lo escaneado. De qualquer forma, os fontes dos exemplos estão disponíveis no site da editora:
Uso a jre7 mas o bc apenas tem o arquivo bcprov-jdk16-146.jar que seria para a jre6 correto? Como eu faria essa instalação para a jre7 ou não funciona? Sou iniciante nesta parte, me corrijam se estou falando besteira.
Se não me engano, há jars diferentes para cada versão do Java porque eles precisam ser assinados digitalmente pela Oracle (antigamente Sun), ou então por um certificado fornecido aos desenvolvedores do BouncyCastle pela Oracle.
Então se não houver um jar para a versão 7.0 (conferi e não achei mesmo) é melhor você pegar seu programa e passá-lo para Java 6.0 mesmo; você não deveria ter muitos problemas.
Eu não ponho meu java.exe no path, eu costumo ter várias versões do Java instaladas na mesma máquina, e para chamar o Java que eu quero, uso um script (batch).
Uai, o arquivo java.security está em c:\program files\java\jre7\lib\security (no caso do Java 6) ou em c:\program files\java\jre6\lib\security (no caso do Java 6) - você não achou?
[quote=entanglement]Uai, o arquivo java.security está em c:\program files\java\jre7\lib\security (no caso do Java 6) ou em c:\program files\java\jre6\lib\security (no caso do Java 6) - você não achou?
[/quote]
Opa sem querer, esse c:\program files\java\jre7\lib\security eu achei, não achei o C:\Tools\java\j2sdk1.4.2_01\jre\lib\security (J2SE SDK location).
Description Resource Path Location Type
Access restriction: The constructor ASN1EncodableVector() is not accessible due to restriction on required library C:\Arquivos de programas\Java\jre7\lib\ext\bouncycastle.jar MyStructure.java /Exemplo/src/chapter5 line 98 Java Problem
Procurei em outros foruns e não achei nada que ajude.
Com os Exemplos do Livro Beginning Cryptography with Java, quando vou testar os exemplos que o autor pede, há muitos erros nas classes e os mesmos não rodam de jeito nenhum. Estou com o crypto-146 instalado junto com o jre6 e o jdk1.6.0_30. Esta tudo importado em build patch. É normal isso ocorrer?
[quote=entanglement]Ele é “deprecated” porque não se usam mais certificados da versão V1, só da versão V3. (Basicamente, porque certificados da versão 1 não suportam os algoritmos mais modernos e acabam sendo intrinsecamente mais inseguros).
Use uma outra coisa.
Para aprender a usar direitinho o BouncyCastle, tente achar o livro “Beginning Cryptography with Java” do sr. David Hook. (Esse livro é um pouco antigo, mas acho que alguém deve tê-lo escaneado. De qualquer forma, os fontes dos exemplos estão disponíveis no site da editora:
amigos estou precisando de ajuda com Bouncy Castle, preciso desenvolver um sistema para assinar digitalmente e depois validar com bouncy castle
Obrigado.