Hallo,
ich schreibe gerade ein kleines Java-Programm, welches mir aus einer XML-Datei den modulus eines SSL-Zertifikats auslesen soll und diesen dann mit dem modulus eines Zertifikats vergleicht, dass ich in meine Java-Anwendung über eine Datei lade. Den Eintrag in die XML-Datei habe ich manuell hinzugefügt, indem ich das Zertifikat in Firefox importiert habe und ihn daraus kopiert habe. Das importiere Zertifikat im Firefox stimmt natürlich mit dem überein, das ich in meine Java-Anwendung laden möchte.
Der XML-Eintrag sieht folgendermaßen aus:
[xml]<rsa:RSAPublicKey>
<cert:identity rdf:resource="#thing" />
<rsa:modulus cert:hex="ae 4a ff 22 b6 94 37 9e d0 5e 5b 33 46 ff ee 4c
5b 69 be 56 61 b8 83 10 a3 19 1f 44 46 7f 8d cd
e7 cb 02 4b db 24 ab a6 5c 0b 57 a3 28 22 98 dc
4b 1c 60 1b cd a8 69 07 27 84 44 bd d9 3a 1d 21
7a e0 17 ce fc 95 b7 37 85 2c fc 19 24 f0 bf 7d
7d a3 47 00 fb 9b 22 f2 8c 1b ab f6 2a 0d 07 5f
a4 18 aa bc 24 a3 40 5c 16 18 53 e5 b3 d4 0d 83
ea 20 bb a5 09 11 0c 57 d7 87 42 8a 82 ba b9 d5" />
<rsaublic_exponent cert:decimal="65537" />
</rsa:RSAPublicKey>
[/xml]
Und mein Java-Code sieht so aus (das Auslesen des modulus aus der XML-Datei fehlt, da das wunderbar funktioniert) :
http://www.google.com/search?hl=en&q=allinurl:keystore+java.sun.com&btnI=I'm Feeling Lucky
Die Ausgabe der Variable modulus lautet so: 122392675650615617839048276106761560466803693108686979061459190430525133710497558213777604662727205981277376145916850227111622692729217629860579246290753232825097436649067807499111270500277165695945432047095130398463209647773144352972682560276964720832762375056982616951723146308482657833238677929094761069013
Scheint eine sehr lange Dezimalzahl zu sein. Diese passt gerade so in den Wertebereich eines Doubles, also hab ich mir gedacht, ich wandel das ganze in Hexadezimal um und vergleich die beiden Strings, natürlich den modulus aus der XML-Datei entsprechenden angepasst.
Die Umwandlung habe ich so versucht:
Java Code:
http://www.google.com/search?hl=en&q=allinurl:double+java.sun.com&btnI=I'm Feeling Lucky
In der Variable test steht dann dieser Wert: 0x1.5c95fe456d287p1023
Der Vergleich mit equals des Hex-Werts aus der XML-Datei und meinem umgewandelten erbrachten natürlich false.
Meine Frage ist nun, wie ich den modulus des Zertifikats in meiner Java-Andwendung so umgewandelt oder noch besser direkt geliefert bekomme, dass ein Vergleich mit dem modulus aus der XML-Datei ein true zurückliefert, denn sie müssten ja eigentlich identisch sein.
Über Antworten und Tipps bedanke ich mich schon einmal ;-)
Viele Grüße,
Andi
ich schreibe gerade ein kleines Java-Programm, welches mir aus einer XML-Datei den modulus eines SSL-Zertifikats auslesen soll und diesen dann mit dem modulus eines Zertifikats vergleicht, dass ich in meine Java-Anwendung über eine Datei lade. Den Eintrag in die XML-Datei habe ich manuell hinzugefügt, indem ich das Zertifikat in Firefox importiert habe und ihn daraus kopiert habe. Das importiere Zertifikat im Firefox stimmt natürlich mit dem überein, das ich in meine Java-Anwendung laden möchte.
Der XML-Eintrag sieht folgendermaßen aus:
[xml]<rsa:RSAPublicKey>
<cert:identity rdf:resource="#thing" />
<rsa:modulus cert:hex="ae 4a ff 22 b6 94 37 9e d0 5e 5b 33 46 ff ee 4c
5b 69 be 56 61 b8 83 10 a3 19 1f 44 46 7f 8d cd
e7 cb 02 4b db 24 ab a6 5c 0b 57 a3 28 22 98 dc
4b 1c 60 1b cd a8 69 07 27 84 44 bd d9 3a 1d 21
7a e0 17 ce fc 95 b7 37 85 2c fc 19 24 f0 bf 7d
7d a3 47 00 fb 9b 22 f2 8c 1b ab f6 2a 0d 07 5f
a4 18 aa bc 24 a3 40 5c 16 18 53 e5 b3 d4 0d 83
ea 20 bb a5 09 11 0c 57 d7 87 42 8a 82 ba b9 d5" />
<rsaublic_exponent cert:decimal="65537" />
</rsa:RSAPublicKey>
[/xml]
Und mein Java-Code sieht so aus (das Auslesen des modulus aus der XML-Datei fehlt, da das wunderbar funktioniert) :
http://www.google.com/search?hl=en&q=allinurl:keystore+java.sun.com&btnI=I'm Feeling Lucky
Java:
KeyStore keyStore = KeyStore.getInstance("PKCS12");
keyStore.load(new FileInputStream("test.p12"), "1337"
.toCharArray());
X509Certificate cert = (X509Certificate) keyStore
.getCertificate("1");
String modulus = cert.getPublicKey().toString().split("modulus: ")[1]
.split("public exponent")[0];
Die Ausgabe der Variable modulus lautet so: 122392675650615617839048276106761560466803693108686979061459190430525133710497558213777604662727205981277376145916850227111622692729217629860579246290753232825097436649067807499111270500277165695945432047095130398463209647773144352972682560276964720832762375056982616951723146308482657833238677929094761069013
Scheint eine sehr lange Dezimalzahl zu sein. Diese passt gerade so in den Wertebereich eines Doubles, also hab ich mir gedacht, ich wandel das ganze in Hexadezimal um und vergleich die beiden Strings, natürlich den modulus aus der XML-Datei entsprechenden angepasst.
Die Umwandlung habe ich so versucht:
Java Code:
Java:
Double d = Double.parseDouble(pk);
String test = Double.toHexString(d);
Der Vergleich mit equals des Hex-Werts aus der XML-Datei und meinem umgewandelten erbrachten natürlich false.
Meine Frage ist nun, wie ich den modulus des Zertifikats in meiner Java-Andwendung so umgewandelt oder noch besser direkt geliefert bekomme, dass ein Vergleich mit dem modulus aus der XML-Datei ein true zurückliefert, denn sie müssten ja eigentlich identisch sein.
Über Antworten und Tipps bedanke ich mich schon einmal ;-)
Viele Grüße,
Andi
Zuletzt bearbeitet von einem Moderator: