SSL Zertifikat - modulus auslesen und vergleichen

Status
Nicht offen für weitere Antworten.

andi1337

Mitglied
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" />
<rsa:public_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);
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
 
Zuletzt bearbeitet von einem Moderator:

andi1337

Mitglied
Hallo nochmal,

ich habe das Problem soeben selbst gelöst. Theoretisch lautet der Lösungsweg so:

Aus dem Zertifikat der PublicKey lesen, diesen aber in einen RSAPublicKey casten. Hier bekommt man den encodierten Key als Byte-Array, den man dann nur noch in Hexadezimal umwandeln muss und die entsprechenden Bytes auslesen kann.
Der zugehörige Code lautet:

Java:
KeyStore keyStore = KeyStore.getInstance("PKCS12");
keyStore.load(new FileInputStream("test.p12"), "1337"
                    .toCharArray());

X509Certificate cert = (X509Certificate) keyStore
                    .getCertificate("1");

RSAPublicKey pkey = (RSAPublicKey) cert.getPublicKey();
byte[] bKey = pkey.getEncoded();
String hexKeyCert = "";
for (int i = 0; i < bKey.length; i++) {
                hexKeyCert += Integer.toString((bKey[i] & 0xff) + 0x100, 16)
                        .substring(1);
}
            
hexKeyCert = hexKeyCert.substring(58, hexKeyCert.length()-10);

Vielleicht hilft es ja nochmal jemanden, der vor einem ähnlichen Problem steht. Vielen Dank trotzdem und viele Grüße,
Andi
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Axis2 Webservice mit Client Zertifikat Authentifizierung Netzwerkprogrammierung 3
T Jetty mit Client-Zertifikat nur bei spezifischer URL Netzwerkprogrammierung 1
x46 Java SSLContext erstellen mit SSL-Zertifikat Netzwerkprogrammierung 1
F HTTP HTTP Rest Client mit TLS1.2 und selbst signiertem Zertifikat Netzwerkprogrammierung 2
H p12 zertifikat in eigenen KeyStore importieren Netzwerkprogrammierung 2
K HTTPS Zertifikat Netzwerkprogrammierung 3
Weiti HTTP Zertifikat-Probleme - InstallCert.java Netzwerkprogrammierung 2
U HTTP Zertifikat automatisch akzeptieren Netzwerkprogrammierung 6
musiKk SSL-Verbindung mit Client-Zertifikat (Private Key) scheitert Netzwerkprogrammierung 13
P JNDI LDAP-SSL Verbindung, Zertifikat wird nicht angezeigt ? Netzwerkprogrammierung 2
P HTTPS - öffentliches Zertifikat - ermitteln Netzwerkprogrammierung 5
G SSL Verbindung ohne Zertifikat Netzwerkprogrammierung 9
G file download über https mit p12 Zertifikat Netzwerkprogrammierung 4
M Html Auslesen Netzwerkprogrammierung 6
x46 byte[] über BufferedReader auslesen Netzwerkprogrammierung 18
E Socket Parameter über Sockets übergeben und auslesen ! Netzwerkprogrammierung 5
J WLAN-Signalstärke in dbm auslesen Netzwerkprogrammierung 1
C IFrame mit java auslesen Netzwerkprogrammierung 1
DeathsGun Zeile von Streamcloud auslesen Netzwerkprogrammierung 1
Z HTTP HTML Element auslesen in Java Netzwerkprogrammierung 1
D Webseite(mit JavaScript-Element) mit Java auslesen Netzwerkprogrammierung 0
J Webformular auslesen Netzwerkprogrammierung 2
D Einfache Verbindung zu Linux Server und Datei auslesen Netzwerkprogrammierung 13
B XMLRPC-Schnittstelle. Einzelne Felder aus dem Object auslesen Netzwerkprogrammierung 2
F Daten aus Internetseiten auslesen Netzwerkprogrammierung 56
precoc IP Auslesen Netzwerkprogrammierung 4
S HTML mit AJAX auslesen Netzwerkprogrammierung 2
S HTTP Pakete Auslesen Netzwerkprogrammierung 22
B Authentifikation und anschliesendes auslesen von JSON Netzwerkprogrammierung 2
M lokale Benutzer auslesen Netzwerkprogrammierung 28
H Verzeichnis auf Server auslesen Netzwerkprogrammierung 13
S Bluetooth -Gerätename -Geräteadresse auslesen Netzwerkprogrammierung 4
M Proxy Einstellungen auslesen Netzwerkprogrammierung 2
B FTP Datei auslesen ohne einloggen möglich? Netzwerkprogrammierung 19
Geese HTML Quelltext auslesen ergibt -null- Netzwerkprogrammierung 2
A HTTP Binärdaten über PHP-Skript in Datenbank schreiben bzw auslesen Netzwerkprogrammierung 2
N Systemeinstellung Proxyserver auslesen Netzwerkprogrammierung 2
V Quelltaxt einer Website auslesen funktioniert nicht Netzwerkprogrammierung 2
E HTTP Problem beim Auslesen von Websiten Netzwerkprogrammierung 6
M IP-Auslesen und ändern Netzwerkprogrammierung 25
B Globale IP-Adresse auslesen - Java Applet Netzwerkprogrammierung 2
S Port auf einer bestimmten IP-Adresse auslesen? Netzwerkprogrammierung 6
S website auslesen schlägt fehl Netzwerkprogrammierung 20
L Body eines http Request auslesen Netzwerkprogrammierung 2
P URL Parameter auslesen Netzwerkprogrammierung 5
G Kryptische Zeichen beim Auslesen einer Website Netzwerkprogrammierung 11
S Subnetzaddresse auslesen Netzwerkprogrammierung 34
S redirected html auslesen Netzwerkprogrammierung 10
F Timestamp aus IP-Header auslesen Netzwerkprogrammierung 2
L Größe einer Datei auslesen die im Netz liegt Netzwerkprogrammierung 4
S Mehrere Attachments mit JavaMail API auslesen Netzwerkprogrammierung 3
F URL geordnet auslesen Netzwerkprogrammierung 3
E ordnerberechtigungen auslesen Netzwerkprogrammierung 2
P Textdateien aus Oracle-DB mittels Java auslesen und öffnen Netzwerkprogrammierung 7
G push clientseitig auslesen Netzwerkprogrammierung 5
D Daten, die mit PHP erzeugt werden, mit Java auslesen Netzwerkprogrammierung 8
C PCAP Datei auslesen Netzwerkprogrammierung 8
M Rechner einer Domäne auslesen? Netzwerkprogrammierung 3
J Active Directory mit Java auslesen Netzwerkprogrammierung 1
M Öffentliche IP auslesen Netzwerkprogrammierung 13
S Verzeichnis auslesen (FTP Jakarta Commons Net) Netzwerkprogrammierung 2
L netzwerkkarte traffic auslesen Netzwerkprogrammierung 15
T Quelltext einer Website auslesen Netzwerkprogrammierung 3
C JSP Parameter auslesen Netzwerkprogrammierung 1
J Zeilenweises auslesen aus einer Datei über Server Netzwerkprogrammierung 6
J Client/Server vorhandene Textdatei auslesen Netzwerkprogrammierung 14
C IP adresse anhand einer domain adresse auslesen / ermitteln Netzwerkprogrammierung 3
D SOAP Message abfangen und auslesen Netzwerkprogrammierung 3
G IP auslesen, ändern Netzwerkprogrammierung 8
F IP-Adresse auslesen Netzwerkprogrammierung 7
N TCP Stream auslesen Netzwerkprogrammierung 7
A HTML code auslesen klappt nicht ganz Netzwerkprogrammierung 3
D Bekomme Dummyspace beim Internetseiten auslesen Netzwerkprogrammierung 2
B Netzwerktraffic auslesen Netzwerkprogrammierung 7
D Byte-Zähler des Netzwerkinterface auslesen Netzwerkprogrammierung 2
L Web-Seiten Inhalt auslesen und in textfile speichern Netzwerkprogrammierung 2
D txt Datei auslesen mittels URL Netzwerkprogrammierung 7
G binärwert aus 2 byte auslesen Netzwerkprogrammierung 7
G Verzeichnis eines Rechners übers Netzwerk auslesen Netzwerkprogrammierung 5
K SMB User auslesen Netzwerkprogrammierung 3
L Logingeschützte Website mit mehreren Accs auslesen Netzwerkprogrammierung 3
B Workgroup namen auslesen Netzwerkprogrammierung 4
J dynamische Router-IP auslesen Netzwerkprogrammierung 6
M IP Adressen auslesen und in Windows/Linux übergeben Netzwerkprogrammierung 5
G Ips auslesen Netzwerkprogrammierung 2
O [IRC] Userliste und Server Messages auslesen und anzeigen Netzwerkprogrammierung 4
C IRC CHAT auslesen -> Sockets/input und output Streams Netzwerkprogrammierung 9

Ähnliche Java Themen


Oben