# Jar Signatur in Java überprüfen



## mccae (16. Oktober 2011)

Hallo,

Folgende Situation:
Ein Java Programm lädt aus dem Internet signierte JAR Dateien herunter deren Code ausgeführt werden soll.

Diese JAR Dateien wurden von mir mit einem von einem CA ausgestellten Zertifikat signiert.

Gibt es nun innerhalb von Java die Möglichkeit auf Gültigkeit der Archive zu prüfen?
Es soll neben der Konsistenz der Dateien auch die Gültigkeit des Zertifikats geprüft werden.

Da ich immer noch nicht weiß wie Java die Zertifikate handled, wollte ich fragen wie ich vorgehen soll.
Wie werden denn in Java Zertifikate auf Gültigkeit überprüft?
Hat das JRE eine eigene Liste mit CAs und Keys, oder greift Java auf das Betriebssystem zurück?
Oder muss ich vertrauenswürdige Zertifikate mit der Anwendung selbst ausliefern?!

Kennt sich jemand aus?

mfg,


----------



## SE (16. Oktober 2011)

Was das Nachladen von signierten Java-Files angeht brauchst du dir über Gültigkeitsprüfungen keine Sorgen machen. Java erkennt automatisch dass das Jar signiert wurde und prüft vor dem Laden die Gültigkeit der Signatur. Damit wird auch gleichzeitig die Konsistenz geprüft da nur bei Fehlerfreiheit eine gültige Signatur entsteht. Natürlich kann es manchmal nervig sein wenn man eine Meldung kommt dass das Überprüfen auf Grund eines Zertifikatfehlers fehlgeschlagen sei obwohl eigentlich das File "kaputt" ist.

Was die Liste mit CA-Zertifikaten angeht : Java macht beides : einmal verwendet es die List der CA-Cert vom OS ... und zum anderen hat es zusätzliche CA-Certs ... und auch eine eigene Verwaltung über diese. So kannst du z.B. ein eigenes Zertifikat für Java installieren welches dem restlichen System jedoch unbekannt bleibt.

Ein Zertifikat mitliefern solltest du nur falls es ein sog. self-signed-certificate ist ... es also nicht von einer CA geprüft wurde.


----------



## mccae (16. Oktober 2011)

Huhu,

Vielen Dank für deine Antwort.

Bist du dir auch sicher, dass diese Checks (vor allem die Prüfung auf CA Signatur) durchgeführt werden wenn ich die Jar Datei per Reflection in den Systemklassenloader einbinde (über die private Methode 'addUrl')?

Gibt es denn auch die Möglichkeit einen solchen Check manuell anzustoßen?

mfg,


----------



## SE (17. Oktober 2011)

Hmm .. also warum man mit Reflection am SystemClassLoader rumspielen sollte versteh ich zwar nicht ganz ... aber ok. Ich würde hier einen normalen URLClassLoader bevorzugen und über diesen weiterarbeiten. Hat einige Vorteile.
Was den Check der CA-Chain angeht : ich glaube dieser wird so explizit nur vom Applet-Browser-Plugin und von WebStart durchgeführt ... der Rest der VM prüft lediglich die Gültigkeit der Signatur ...
Es gibt aber glaube ich eine Möglichkeit über JarFile.MANIFEST an das verwendet Cert zu kommen und dies mit Hilfe des security-Packages zu prüfen ... dabei hat man dann auch die Möglichkeit die CA-Cert-Chain zu checken und auch die CRL um zu prüfen ob das Cert zurückgezogen wurde.

Wie genau das nun alles funktioniert weis ich leider auch nicht da ich mich so in der Form noch nicht all zu intensiv mit Crypto in Java beschäftigt habe ... aber ich bin mir sicher das es geht da ja wie gesagt WebStart und das Applet-Plugin dies tun ... und die haben ja nun auch nur die VM zur verfügung ... also sollte man das wohl sicher nachbauen können. Vielleicht hilft ja "The Realy Big Index" ... aber dazu habe ich grad nicht mal den Link =D.


----------



## mccae (17. Oktober 2011)

Hm,

Also ich werde nun versuchen alles noch einmal näher anzuschauen und zu experimentieren.
Leider habe ich im Rahmen meiner Ausbildung eben dieses Thema nicht durchgenommen - zusammen mit NIO und dem Verwenden verbreiteter Frameworks (Spring, etc.).
Irgendwann muss ich ja meine Wissenslücken stopfen 

Sollte noch jemand interessante Links/Literatur für mich haben: Bitte immer her damit.

mfg,


----------

