Avatar billede elites Nybegynder
04. juni 2004 - 09:28 Der er 17 kommentarer og
1 løsning

digitalt signatur på en mail

Hejsa

Jeg har et mindre program, der kan påsætte et TDC fremstillet digitalt signatur på en pdf fil.
Jeg har et system, der sender mails til enkelte kunder.
Er det muligt i java at lave et system, der sætter et digitalt signatur på en mail, inden den bliver sendt!

Nogle forslag, ideer?
Mvh henrik
Avatar billede simonvalter Praktikant
04. juni 2004 - 16:27 #1
har siddet og rodet lidt for sjovt med det, men må indrømme at jeg ikke ved meget om det. Jeg tror det er lykkedes mig at loade et cert ind.. måske kan du bruge det til at komme viderer ;)


public class Test5 {
    public static void main(String[] args) throws IOException,
        KeyStoreException, NoSuchAlgorithmException,
        UnrecoverableKeyException, CertificateException

    {

        KeyStore keyStore = null;
        FileInputStream fis = null;

        // Get the keystore of the user
        keyStore = KeyStore.getInstance("PKCS12");
        fis = new FileInputStream("tester.pfx");
        char[] key = "password på dit cert".toCharArray();
        keyStore.load( (InputStream) fis, key);
       
        Enumeration e = keyStore.aliases();
        String alias = (String) e.nextElement();
   
        RSAPrivateCrtKey pkcs12PrivateCrtKey = (RSAPrivateCrtKey) keyStore.
            getKey(alias, key);

        System.out.println(pkcs12PrivateCrtKey.toString());

        Certificate pkcs12Cert = keyStore.getCertificate(alias);

        System.out.println(pkcs12Cert.toString());

    }

}
Avatar billede simonvalter Praktikant
04. juni 2004 - 16:47 #2
her er lidt forklaring, men ikke en hel løsning
ftp://www6.software.ibm.com/software/developer/library/j-trustemail.pdf
desværre..
Avatar billede simonvalter Praktikant
06. juni 2004 - 23:44 #3
ok nu kan jeg signe mine mails i java med mit cert fra tdc!
Om det er den bedste måde at gøre det på tvivler jeg på da jeg ærlig talt ikke forstår at det overhovedet er lykkedes mig ;)

men her er koden

package blaa;

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
    {
        // 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("tester.pfx");
        // laver password på tester.pfx om til char array
        char[] key = "password".toCharArray();
        // loader tester.pfx fra inputstream
        keyStore.load( (InputStream) fis, key);
        /**
        * 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);

        //
        // laver beskeden
        //
        MimeBodyPart msg = new MimeBodyPart();
        // sætter text i beskeden
        msg.setText("Hello world! ...");


        MimeMultipart mm = gen.generate(msg, "BC");
 
        Properties props = System.getProperties();
        props.put("mail.smtp.host", "smtp.mail.dk");
        Session session = Session.getDefaultInstance(props, null);

        Address fromUser = new InternetAddress("\"Simon Nyborg Valter\"<simon@valter.info>");
        Address toUser = new InternetAddress("mail@gbit.dk");

        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);
    }
}




For at få det til at virke skal du besøge
http://www.bouncycastle.org/latest_releases.html
og hente:
bcmail-jdk14-123.jar
bcprov-jdk14-123.jar
disse 2 skal være i din classpath

og så skal du tilføje en security provider
det gør du ved at tilføje dette til
\jre\lib\security\java.security

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


Jeg vil meget gerne have forslag til alternative eller mere optimale måder at gøre dette på!
Avatar billede simonvalter Praktikant
06. juni 2004 - 23:57 #4
jeg tror jeg har misforstået det med password.. du kan bare sætte den til null
Avatar billede simonvalter Praktikant
07. juni 2004 - 00:20 #5
nej, du skal bruge key :)
du får iøvrigt nok en
unknown attr1.3.6.1.4.1.311.17.1 besked i konsollen når programmet kører... dette skulle skyldes at microsoft har tilføjet sin egen attribut.. strong protection
der er vist ikke så meget at gøre ved det.. men det forhindrer ikke brugen af programmet.
Avatar billede simonvalter Praktikant
07. juni 2004 - 00:20 #6
og følger du iøvrigt med? :)
Avatar billede elites Nybegynder
09. juni 2004 - 08:20 #7
Hej Simon... Rart at se et svar på mit spørgsmål....
Jeg prøver det lige i løbet af de næste 2 dage... og vender så tilbage... men hvis du siger det virker ved dig.. så er det da kanon...

Kan være jeg lige har brug for lidt support...

Hygge man... Skal nok vende tilbage med dine points.. skal bare lige prøve det...
Avatar billede elites Nybegynder
11. juni 2004 - 09:43 #8
Den dersens tester.pfx fil.. hvad er det forn en...
Jeg har fået et digigalt signatur og installeret det hele samt java koden... Men den brokker sig lidt over det med den fil.. hvad er det for en fil der skal hentes ind?
Avatar billede elites Nybegynder
11. juni 2004 - 12:41 #9
Hey... Glem det med tester filn... har jeg løst...

men efter at jeg prøvet at loade provideren med
MimeMultipart mm = gen.generate(msg, "BC");
Får jeg en null pointer exception som jeg ikke kan spore...
Den finder provideren... men så sker der bare ikke mere!!!
Var du udsat for noget lignende!

Mvh. henrik
Avatar billede simonvalter Praktikant
11. juni 2004 - 18:47 #10
Nej det har jeg ikke været ude for.

tester.pfx filen er den fil man får når man eksporterer det instalerede certificat fra IE.
Avatar billede simonvalter Praktikant
11. juni 2004 - 18:50 #11
det kan være jeg kan se det hvis du poster stacktrace at jeg kan se det...

fjern throws Exception og try/catch de precise exceptions og lav et ex.printStacktrace();
Avatar billede elites Nybegynder
13. juni 2004 - 19:16 #12
Simon... jeg tror at jeg har eksporteret mit signatur forkert..
Hvordan siger du at du fik eksporteret din. Jeg gjorde det inde fra TDCs hjemmeside.. men jeg kan kun vælge at eksportere til pkcs12 formatet... Kan du ikke skrive præcis hvordan du gør det...
Avatar billede simonvalter Praktikant
13. juni 2004 - 19:54 #13
I IE
IE/Tools/Internet options/Content/Certificates
Vælg dit Certificat og vælg export
vælg yes, export private key
og så sætter du password på den, og gemmer.

Du må selv lige oversætte hvis du har det på dansk.
Avatar billede elites Nybegynder
13. juni 2004 - 22:17 #14
Alt det er gjort... Men alligevel

C:\Paphoved\ps>java -cp C:\Paphoved\ps\jarfiles\bcm2.jar;C:\Paphoved\ps\jarfiles
\bcp2.jar;C:\Paphoved\ps\jarfiles\activation.jar;C:\Paphoved\ps\jarfiles\smtp.ja
r;C:\Paphoved\ps\jarfiles\pop3.jar;C:\Paphoved\ps\jarfiles\mailapi.jar;C:\Paphov
ed\ps\jarfiles\imap.jar;C:\Paphoved\ps CreateSignedMail
org.bouncycastle.mail.smime.SMIMESignedGenerator@18d107f1
javax.mail.internet.MimeBodyPart@1c78e571
org.bouncycastle.mail.smime.SMIMESignedGenerator@18d107f
SunJCE
java.lang.NullPointerException
        at org.bouncycastle.cms.CMSSignedDataGenerator$SignerInf.toSignerInfo(CM
SSignedDataGenerator.java:398)
        at org.bouncycastle.cms.CMSSignedDataGenerator.generate(CMSSignedDataGen
erator.java:650)
        at org.bouncycastle.cms.CMSSignedDataGenerator.generate(CMSSignedDataGen
erator.java:750)
        at org.bouncycastle.cms.CMSSignedDataGenerator.generate(CMSSignedDataGen
erator.java:587)
        at org.bouncycastle.mail.smime.SMIMESignedGenerator.make(SMIMESignedGene
rator.java:163)
        at org.bouncycastle.mail.smime.SMIMESignedGenerator.generate(SMIMESigned
Generator.java:289)
        at CreateSignedMail.main(CreateSignedMail.java:57)

C:\Paphoved\ps>
Avatar billede elites Nybegynder
13. juni 2004 - 22:17 #15
Er bare ved at være godt træt af det...
Avatar billede elites Nybegynder
14. juni 2004 - 12:28 #16
Hey!!!
Tænkte på om jeg evt. kunne komme hjem til dig og se din løsning.
Der må jo være en eller anden ting jeg ikke får sat ordentligt op.
Kunne det blive aktuelt.

Mvh. Henrik
Avatar billede simonvalter Praktikant
14. juni 2004 - 21:01 #17
jo det kan du da godt..men jeg har en dårlig vane med at være vågen om natten og sove om dagen ;)
men jeg bor i nordsjælland.
Avatar billede simonvalter Praktikant
14. juni 2004 - 21:02 #18
skriv til min mail i mit minisite hvis det er.
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