Avatar billede elites Nybegynder
11. juni 2004 - 14:08 Der er 17 kommentarer

BouncyCastle problem

Hejsa

Jeg har et problem mht. bouncy castle til java!
Jeg får en nullpointer exception
at org.bouncycastle.cms.CMSSIgnedDataGenerator$$SignerInf.toSignerInfo(CSSignedDataGenerator.java:249);

Vil ikke lige skrive mere da bouncy castle ikke er noget standard java kode...
Men hvis der er nogen som helst der har arbejdet med dette i forbindelse med digital signatur eller lign. så må i meget gerne henvende jer.. for jeg er kørt mega fast...

Mvh. henrik
Avatar billede signori Nybegynder
11. juni 2004 - 14:40 #1
Hej,
Hvad sker der hvis du istedet anvender sun som provider istedet? Får du samme exception?
Avatar billede elites Nybegynder
11. juni 2004 - 14:41 #2
Hvad er det den hedder?
Avatar billede signori Nybegynder
11. juni 2004 - 14:50 #3
Hvordan har du defineret at du vil bruge bountycastle som provider. Er det i din kode eller er det i din java.security fil ($javahome/lib/security/java.security)?

Jeg sidder ikke lige ved min egen maskine, men jeg mener den bare hedder sunjce.

Se eventuelt: http://java.sun.com/j2se/1.4.2/docs/guide/security/CryptoSpec.html#ProviderInstalling
Avatar billede elites Nybegynder
11. juni 2004 - 14:52 #4
I min kode...
Men der henter jeg BouncyCastle med navnet "BC"
Kan se at Suns ligger i min java.security.. og ja SunJcE...

Men kan du huske hvad den hentes med.. altså i stedet for "BC".
Tjekker lige linket i mens
Avatar billede signori Nybegynder
11. juni 2004 - 14:57 #5
Jeg kan ikke lige huske det på stående for. Så skal jeg tjekke det i en bog...som jeg ikke har lige her men jeg kan da finde den :)
Avatar billede signori Nybegynder
11. juni 2004 - 15:01 #6
Jeg kan ikke lige huske det men hvad med
Security.addProvider(new SunJCE());
Avatar billede arne_v Ekspert
11. juni 2004 - 15:06 #7
Man kan altid bruge:

            Security.addProvider(new com.sun.crypto.provider.SunJCE());
            Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

men det er næppe der problemet ligger, da BC koden jo er blevet kaldt (det
er i den null pointer exception opstår).
Avatar billede arne_v Ekspert
11. juni 2004 - 15:07 #8
Men det er nok svært at komme videre uden at se lidt mere kode og vide lidt mere
hvad du prøver at lave.
Avatar billede elites Nybegynder
11. juni 2004 - 15:25 #9
Skal signere en mail med et tdc signatur og sende det...

import java.io.*;
import java.security.*;
import java.security.cert.*;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;

import org.bouncycastle.mail.smime.*;

/**
* a simple example that creates a single signed mail message.
*/
public class CreateSignedMail {

    public static void main(String[] args) throws Exception
    {
        //Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
        Security.addProvider(new com.sun.crypto.provider.SunJCE());
        //com.sun.crypto.provider.SunJCE
        // Genererer et keystore objekt af typen PKCS12 som tester.pfx er
        KeyStore keyStore = KeyStore.getInstance("PKCS12");
        // læser tester.pfx ind
        FileInputStream fis = new FileInputStream("test.pkcs12");
        // laver password på tester.pfx om til char array
        char[] key = "2115Henrik".toCharArray();
        // loader tester.pfx fra inputstream
        keyStore.load( (InputStream) fis, null);
        /**
        * Der er sikkert en smartere måde men jeg har ikke rigtigt forstået det med alias
        * Så jeg finder bare det første alias..vist også det eneste og bruger det til at finde cert,privatekey
        */
        Enumeration e = keyStore.aliases();
        String alias = (String) e.nextElement();
        // henter private key ved at angive alias og password
        PrivateKey pk = (PrivateKey) keyStore.getKey(alias, key);
        // Henter certificatet ud fra alias
        X509Certificate pkcs12Cert = (X509Certificate) keyStore.getCertificate(alias);
        // bruges til at signe en message
        SMIMESignedGenerator gen = new SMIMESignedGenerator();
        // tilføjer cert
        gen.addSigner(pk, pkcs12Cert, SMIMESignedGenerator.DIGEST_SHA1);
        System.out.println(gen+"1");
        //
        // laver beskeden
        //

        MimeBodyPart msg = new MimeBodyPart();
        System.out.println(msg+"1");
        // sætter text i beskeden
        msg.setText("Hello world! ...");
        System.out.println(gen);
        java.security.Provider[] per = Security.getProviders();
        System.out.println(per[3].getName());

        MimeMultipart mm = gen.generate(msg, "SunJCE");

        Properties props = System.getProperties();
        props.put("relay1.songnet.dk", "relay1.songnet.dk");
        Session session = Session.getDefaultInstance(props, null);

        Address fromUser = new InternetAddress("TESTCapella");
        Address toUser = new InternetAddress("henrik.hinteregger@capelladenmark.com");

        MimeMessage body = new MimeMessage(session);
        body.setFrom(fromUser);
        body.setRecipient(Message.RecipientType.TO, toUser);
        body.setSubject("Example signed message");
        body.setContent(mm, mm.getContentType());
        body.saveChanges();
        Transport.send(body);
    }
}
Avatar billede elites Nybegynder
11. juni 2004 - 15:26 #10
Hvis jeg skifter SunJCE ud med BS.. smider den exceptionen... men den loader godt provideren godt nok....
Hvis jeg anvender SunJCE som nu i gen.generate(msg, "SunJCE") så skriver den at den at provideren ikke har den rigtige RSA et eller andet...
Avatar billede simonvalter Praktikant
11. juni 2004 - 19:10 #11
huskede du at tilføje BC til din security file som jeg sagde?
Avatar billede simonvalter Praktikant
11. juni 2004 - 19:13 #12
jeg tilføjede den selv til C:\JBuilderX\jdk1.4\jre\lib\security\java.security
det skal selvfølgelig også gøres i den java.security fil som programmet bliver afviklet under.

security.provider.<nr>=org.bouncycastle.jce.provider.BouncyCastleProvider

opfølgning på http://www.eksperten.dk/spm/505924
Avatar billede simonvalter Praktikant
17. juni 2004 - 07:08 #13
Avatar billede simonvalter Praktikant
17. juni 2004 - 10:50 #14
Snakker pr mail med elites, nullpointer problemet er væk, men nu er der et nyt.
-------->
Jeg er kommet af med min nullpointer,,, og kan for så vidt også sende digitalt signerede mails.
Meeeen... Hvis jeg sender til min Lotus Notes, så kan jeg ikke åbne filen... programmet styrter!
<--------
Jeg har sammenlignet den signature jeg får ved at sende igennem java og den fra outlook og foreskellen er at java ikke har
Encryption certificate
Encryption Key preference
SMIME Capabilities

igennem outlook siger den:

[1]SMIME Capability
    Object ID=1.2.840.113549.3.7 DES-EDE3-CBC
[2]SMIME Capability
    Object ID=1.2.840.113549.3.2 RC2-CBC
    Parameters=02 02 00 80
[3]SMIME Capability
    Object ID=1.2.840.113549.3.2
    Parameters=02 01 40
[4]SMIME Capability
    Object ID=1.3.14.3.2.7
[5]SMIME Capability
    Object ID=1.2.840.113549.3.2
    Parameters=02 01 28
[6]SMIME Capability
    Object ID=1.3.14.3.2.26 sha1
[7]SMIME Capability
    Object ID=1.2.840.113549.2.5


> SMIME kan man sætte med

    ASN1EncodableVector signedAttrs = new ASN1EncodableVector();
        SMIMECapabilityVector caps = new SMIMECapabilityVector();

    caps.addCapability(SMIMECapability.dES_EDE3_CBC);
        caps.addCapability(SMIMECapability.rC2_CBC);
        caps.addCapability(SMIMECapability.dES_CBC);

        signedAttrs.add(new SMIMECapabilitiesAttribute(caps));

        // bruges til at signe en message
        SMIMESignedGenerator gen = new SMIMESignedGenerator();
        // tilføjer cert
        gen.addSigner(pk, pkcs12Cert, SMIMESignedGenerator.DIGEST_SHA1,new AttributeTable(signedAttrs), null);



men det andet har jeg ikke lige fået fat på endnu.

Hvis der er nogen der kan forklare hvad de 3 dele der mangler gør godt for vil det hjælpe på min forståelse ;)
Avatar billede simonvalter Praktikant
17. juni 2004 - 11:06 #15
Dette skulle klare    Encryption Key preference

IssuerAndSerialNumber issAndSer = new IssuerAndSerialNumber(new
            X509Name(pkcs12Cert.getIssuerDN().getName()),
            pkcs12Cert.getSerialNumber());
signedAttrs.add(new SMIMEEncryptionKeyPreferenceAttribute(issAndSer));
Avatar billede simonvalter Praktikant
17. juni 2004 - 11:53 #16
Jeg har ingen problemer med at kryptere mail modtaget fra en mail hvor SMIME Capabilities er sat..
begynder jeg at rode med Encryption Key preference brokker den sig..
jeg skal ikke kunne sige om de 2 andre er krævet for at være en valid signature men outlook har ihvertfald ikke noget imod det. Encryption certificate
kan jeg slet ikke finde ud af.
Avatar billede simonvalter Praktikant
18. april 2005 - 21:35 #17
fandt du ud af det?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester