Jeg vil dog gerne i stedet hente truststore.dat fra jar filen, så jeg ikke er afhængig af afdre filer end dem der ligger i jar filen. Hvordan løser jeg dette problem?
Jeg har prøvet med: URL truststore = getClass().getResource("truststore.dat"); System.setProperty("javax.net.ssl.trustStore",truststore.toString());
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Du har formentligt overvejet workaround: distribuer truststore i jar-fil, lad dine applikation teste for om den er på disk og hvis ikke, så skrive den til disk inden SSL socket åbnes.
Den brokker sig hvis jeg prøver med openStream, dvs setProperty vil have "setProperty(java.lang.String,java.lang.String)".
Hvis du mener at workaround er: hvis filen ikke findes i sammen dir som prog(jar), så hent den ud fra jar fil og skriv til dir. Så må det blive min løsning. Jeg har ikke hørt workaround begrebet(eller hvad det nu er) før.
Ja. Problemet er at selvom SSLSocket skal bruge en stream, så skal du bruge en string.
Workaround er er udtryk man bruger en del ihvertfald nogen steder til at beskrive en løsning der ikke løser det egentlig eproblem men som ved at gøre tingene lidt anderledes gør at man kan komme videre.
Okey :o) Nu er jeg så selvfølgelig stødt ind i nye problemer.... jeg kan ikke helt få programmet til at hente filen ud af jar-filen (kopiere den). Jeg har forsøgt med:
if((new File("settings\\truststore.dat")).exists()){//findes truststore.dat i settingsbiblioteket }//Gør ingen ting. else{ try{ File myFile = new File(getClass().getResource("settings\\truststore.dat").toString()); FileInputStream is = new FileInputStream(myFile); byte[] contents = new byte[is.available()]; is.read(contents); is.close(); if (contents!=null) { File aCopy = new File("settings\\truststore.dat"); FileOutputStream os = new FileOutputStream(aCopy); os.write(contents); os.close(); } else{System.out.println("truststore.dat indeholder ingen data!");} } catch(Exception e){System.out.println("Fejl under backup: "+e);} }
Det compiler fint nok, men filen bliver bare ikke kopieret :o( Jeg har formodninger om at det er i forbindelse med File myFile = new File(getClass()..... der er problemer. Men jeg har bare ingen ide om hvad det er.. Hiver jeg fat i truststore i jar filen på den helt forkerte måde?
Jeg er så PC way, så jeg fatter ikke at det ikke virker.
Her er lige lidt om opbygningen af jar filen: test.jar -Meta-inf -ssl -keystore.dat -truststore.dat .. .. diverse class's
Mit kald ser således ud (og sker i construktoren): m.tjekForSSLFil("truststore.dat"); m.tjekForSSLFil("keystore.dat");
Min metode ser således ud (anden fil derfor instancen m i metode kaldene):
public void tjekForSSLFil(String filnavn) { if((new File("settings\\"+filnavn)).exists()){//findes fil i settings-biblioteket (uden for jar-fil) }//Gør ingen ting. else{ try{ InputStream is = getClass().getResource("ssl\\"+filnavn).openStream(); //indlæsning af fil fra jar-fil byte[] contents = new byte[is.available()]; is.read(contents); is.close(); if (contents!=null) { File aCopy = new File("settings\\"+filnavn); FileOutputStream os = new FileOutputStream(aCopy); os.write(contents); os.close(); } else{System.out.println("truststore.dat eller keystore.dat indeholder ingen data!");} } catch(Exception e){System.out.println("Fejl under kopering af filer (tjekForSSLFil()) ved brug af ssl i metoder.java: "+e);} } }
Okey, det så virkede koperingen :o) Men den er ikke helt tilfreds med at man kopierer keystore.dat ud af filen. "Keystore was tampered with, or password was incorrect". Det er jo et sikkerheds hensyn, så det kan vel ikke overkomme :o(
"hex dump" er at vise indholdet af filens bytes i hexadecimal.
Og det løser ikke problemet men kan enten af eller bekræfte min hypotese om at filen er blever korrumperet p.g.a. noget med at LF (0x0A) er blevet til CRLF (0x0D 0x0A) fordi Java har troet at det var en tekst-fil.
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.