Problem mit .java.policy

Genau. Vielleicht noch als Nachtrag: Maven verwendet eine spezielle Verzeichnisstruktur, das kann anfangs etwas ungewohnt sein.

In die pom.xml gehört alles, was zum Projekt gehört. Entsprechend wird die pom.xml ggf. auch mit in die (öffentliche) Versionsverwaltung eingepflegt. Private Dinge, wie etwa Passwörter, gehören deshalb projektübergreifend in die settings.xml im Home Verzeichnis (.m2/settings.xml).

Nach einem “mvn clean install” findest du das Ergebnis im target Verzeichnis (MeinAppletProjekt/target/).

Viele Grüße
Fancy

Eine Frage zu dem Zertifikat habe ich: Wenn ich das richtig verstanden habe ist auf Nutzerseite der entscheidende Schritt der Import des Wurzelzertifikats in die Java cacerts, damit Java das Zertifikat auch anerkennt. Richtig?
Mal angenommen, auf Nutzerseite wären Menschen, die mit Kommandozeile nichts anfangen können.
Deshalb würde ich diesen Schritt gern über das Java Control Panel / Sicherheit / Zertifikate verwalten nachvollziehen.
Welchen Zertifikatstyp muss man da wählen und welche Datei wäre das dann?

*** Edit ***

Und noch eine kleine technische Frage:
Auf Windows 7 64Bit hab ich mit dem Kommando mvn install -e folgende Meldung:

[INFO] — maven-surefire-plugin:2.12.4:test (default-test) @ Automatikspeicherung —
[INFO]
[INFO] — maven-jar-plugin:2.4:jar (default-jar) @ Automatikspeicherung —
[INFO] Building jar: s:\Arbeit\java_softzerti_test\Automatikspeicherung.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.432 s
[INFO] Finished at: 2014-04-30T12:44:46+01:00
[INFO] Final Memory: 6M/16M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-jar-plugin:2.4:jar (default-jar) on project Automatikspeicherung: Error assembling JAR: A zip file cannot include itself → [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-jar-plugin:2.4:jar (default-jar) on project Automatikspeicherung: Error assembling JAR
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:108)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:76)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:116)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:361)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:155)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:213)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:157)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.MojoExecutionException: Error assembling JAR
at org.apache.maven.plugin.jar.AbstractJarMojo.createArchive(AbstractJarMojo.java:237)
at org.apache.maven.plugin.jar.AbstractJarMojo.execute(AbstractJarMojo.java:255)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:133)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
… 19 more
Caused by: org.codehaus.plexus.archiver.ArchiverException: A zip file cannot include itself
at org.codehaus.plexus.archiver.zip.AbstractZipArchiver.zipFile(AbstractZipArchiver.java:549)
at org.codehaus.plexus.archiver.zip.AbstractZipArchiver.addResources(AbstractZipArchiver.java:387)
at org.codehaus.plexus.archiver.zip.AbstractZipArchiver.createArchiveMain(AbstractZipArchiver.java:312)
at org.codehaus.plexus.archiver.zip.AbstractZipArchiver.execute(AbstractZipArchiver.java:211)
at org.codehaus.plexus.archiver.AbstractArchiver.createArchive(AbstractArchiver.java:897)
at org.apache.maven.archiver.MavenArchiver.createArchive(MavenArchiver.java:582)
at org.apache.maven.plugin.jar.AbstractJarMojo.createArchive(AbstractJarMojo.java:230)
… 22 more
[ERROR]
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] MojoExecutionException - Apache Maven - Apache Software Foundation

Oben hab ich abgeschnitten, unten ist vollständig. Das ist die Ausgabe mit Schalter -e
Automatikspeicherung ist der Name, den ich dem Projekt gegeben habe.
Wo muss ich den Fehler suchen?

[QUOTE=fischauge]Deshalb würde ich diesen Schritt gern über das Java Control Panel / Sicherheit / Zertifikate verwalten nachvollziehen.
Welchen Zertifikatstyp muss man da wählen und welche Datei wäre das dann?[/quote]

Ich habe es nicht (bis zu Ende) ausprobiert, aber Certificate Type sollte Signer CA und die Datei die ca.cer sein (vorher auf All Files umstellen).

Sobald man seine Nutzer aber nicht mehr kennt, sollte man sich überlegen ob sich die ~80 Dollar / Jahr für ein kommerzielles Zertifikat nicht doch lohnen.

Das sieht falsch aus. Hast Du versucht das target Verzeichnis umzubiegen? Bei Maven herrscht Convention Over Configuration und das sollte man nach Möglichkeit auch nicht verletzen.

Viele Grüße
Fancy

OK, danke dir. Muss ich dann später mal testen, wenn der Ablauf rund ist.

Meine Recherchen haben ergeben, dass es das nicht unter 200 Dollar pro Jahr gibt. Wo bekommt man das für 80? Das würde ich mir tats. überlegen.

Das ist sozusagen mein Basedir.

Wenn ich das richtig übersetzt habe heißt es darin, dass die Unterverzeichnisse nicht geändert werden sollten. Das tue ich auch nicht.
s:\Arbeit\java_softzerti_test\ ist mein Basedir, und darunter gibt es /src, /maven-status, /test-classes usw. auch mit Unterverästelungen. Darin findet auch die ganze Vorarbeit mit der Zertifizierung statt. Wäre gut, wenn man das alles zusammen belassen könnte.
Hab ich das falsch verstanden? Wo sollte es denn stattdessen liegen?
Die Fehlermeldung „Error assembling JAR: A zip file cannot include itself“ hab ich nicht so verstanden, als wären die Verzeichnisse falsch. Aber das Thema aussagekräftige Meldungen kennt man ja von Windows :slight_smile:
Wo sollte es denn stattdessen liegen? Ich muss ja irgendwas angeben.
Achso, ich musste auch die pom.xml etwas ändern, weil sonst noch viel mehr Fehler viel früher kommen und ich außerdem all-permissions anstatt sandbox brauche. Bei mir sieht die so aus:
[XML]<?xml version="1.0" encoding="UTF-8"?>

4.0.0
sig1
Automatikspeicherung
0.0.1-SNAPSHOT

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>


Automatikspeicherung
s:/Arbeit/java_softzerti_test
s:/Arbeit/java_softzerti_test
s:/Arbeit/java_softzerti_test
s:/Arbeit/java_softzerti_test


org.apache.maven.plugins
maven-compiler-plugin
3.1

1.7
1.7



org.apache.maven.plugins
maven-jar-plugin
2.4


false

true


true
all-permissions
*





org.apache.maven.plugins
maven-jarsigner-plugin
1.3.2


sign
package

sign






[/XML]
Liegt hier vielleicht der Fehler? Da ich nicht weiß, was ich da tue habe ich aus dem Master pom.xml und dem von Fancy alles zusammengemischt, was irgendwie gut und sinnvoll aussieht :slight_smile:

*** Edit ***

Ich glaub, ich habs. Braucht keiner mehr suchen im Moment. Mache den Feinschliff, dann melde ich mich nochmal.

*** Edit ***

Hab ein Problem mit dem Inhalt der JAR Datei. Was muss da alles rein? Ich kann das maven ja nur in dem Verzeichnis starten, dessen Inhalt in die JAR soll. Da muss aber auch gleichzeitig die POM drin liegen. Aber die enthält in das Passwort für die Schlüssel. Der Endbenutzer kann das JAR einfach entpacken und das Passwort anschauen.
Ist das so ok?

    <directory>s:/Arbeit/java_softzerti_test</directory>
    <outputDirectory>s:/Arbeit/java_softzerti_test</outputDirectory>
    <sourceDirectory>s:/Arbeit/java_softzerti_test</sourceDirectory>
    <scriptSourceDirectory>s:/Arbeit/java_softzerti_test</scriptSourceDirectory>

Damit hast du sämtliche Verzeichnisse umgebogen. Das sollte man nicht machen! Man fährt wirklich gut damit wenn man sich an die Standards von Maven hält: Maven – Introduction to the Standard Directory Layout

Dann liegen alle deine Source Dateien im src/ Ordner. Die erstellten Class/Jar Dateien landen in target/
Machst du das so, landet auch keine pom.xml im jar file.

OK, Eike aber wie sage ich ihm denn den Basispfad? Ich musste diese ganzen Parameter ja nur einfügen, weil mit der POM von Fancy dauernd Fehlermeldungen kamen, das dies und das und jenes nicht gefunden wird. Also nicht etwa, weil ich ihm meine Pfade aufdrücken will. Im Grunde ist mir Wurscht wo das Zeugs liegt, wenn ich den Pfad weiß. Aber wie sieht eine POM ohne Fehlermeldungen aus?

Meine POM ist vollständig und sollte keine Fehlermeldungen werfen, wenn alle Dateien am passenden Ort liegen, siehe den Beitrag von EikeB. Wenn Fehlermeldungen geworfen werden, liegen die Dateien entweder falsch oder bei der Maven Installation ist etwas schief gelaufen.

Wenn Du die JAR von Hand signieren möchtest, lautet der Befehl (korrektes JAR mit Manifest vorausgesetzt):

jarsigner -keystore X:\CA\foobar.jks -storepass testtest -keypass mypass target\applet.jar foobar

Bezüglich eines kommerziellen Zertifikates kannst Du in diesem Thread etwas dazu finden.

Viele Grüße
Fancy

Sooo, neuer Stand: Ich habe nun ein JAR erzeugt und signiert.
Erzeugung indem ich eine manifest.mf erzeuge und diese zusammen mit meinem CLASS File mittels jar cvfm … in eine JAR packe.
Danach signieren mit jarsigner so wie es Fancy in Beitrag #47 gezeigt hat.
Das Applet funktioniert auch im Browser.

ABER: Java erkennt das importierte ca.cer in den Zertifikaten nicht.
Es kommt weiterhin das Popup:

Ich hätte aber gern das Bild aus Beitrag #35 ganz unten
Woran kann das liegen, was muss ich checken?

Die ca.cer wurde erzeugt ganz exakt wie es in Beitrag #35 beschrieben ist. Ist das vlt. die falsche Datei?
Was mich wundert ist, dass man bei den Zertifikaten im Java Control Panel nur *.csr und *.p12 angeboten bekommt. Die kann ich dort aber beide nicht importieren, weil das Kennwort nicht akzeptiert wird. Und der Import der ca.cer glückt zwar aber Java erkennt nicht, dass das signierte JAR gegen dieses Zertifikat geprüft werden soll.
Was kann ich noch machen?

Hast du die crl.pem mit in das Verzeichnis, wie oben von Fancy beschrieben, kopiert?

Hab ich nicht gesehen, wo steht das?
Aber es ändert auch nichts. Hab extra wieder einen ganz neuen Browser verwendet, um Caching auszuschließen.
Datei ist mit drin, JAR ist auch ein bisschen größer geworden aber es ändert leider garnichts.
Obwohl das JAR eigentlich ganz gut aussieht für mein Empfinden:

Hab ich nochwas vergessen?

Und ich muss dazu sagen, ich teste ohne diese JNLP Datei. Einfach nur eine HTML mit einem
Brauch ich diese JNLP Datei, wenn ich nicht mit Maven arbeite?
Wofür ist die gut?

Hab es jetzt mal mit JNLP Datei versucht:
[XML]<?xml version="1.0" encoding="UTF-8"?>


Automatikspeicherung
foobar











[/XML]
Hab ich den Abschnitt richtig gesetzt?

Die HTML:

<!DOCTYPE HTML>
<html>
<head>
</head>
<body text="#4E8DB3" bgcolor="#FFFFFF" style="padding: 0px; margin: 0px;">

    <script src="https://www.java.com/js/deployJava.js"></script>
    <script> 
        var attributes = {
			code:	'will.be.ignored',
			width:	300,
			height:	300
		}; 
        var parameters = { jnlp_href: 'localfile.jnlp' }; 
        deployJava.runApplet(attributes,parameters,'1.7'); 
    </script>

</body>
</html>

Ergebnis:

Was mache ich falsch?

Zuerst solltest Du prüfen, ob das Wurzelzertifikat tatsächlich in der cacert angekommen ist:

X:\>keytool -list -v -keystore "C:\Program Files (x86)\Java\jre8\lib\security\cacerts" -alias foobarenterprise
Enter keystore password: changeit
Alias name: foobarenterprise
Creation date: 25.04.2014
Entry type: trustedCertEntry

Owner: CN=Foobar Enterprise CA
Issuer: CN=Foobar Enterprise CA
Serial number: d2ffe1bd47c64742
Valid from: Fri Apr 25 13:03:24 CEST 2014 until: Mon Apr 22 13:03:24 CEST 2024
Certificate fingerprints:
         MD5:  89:CA:1F:DA:E1:5D:AE:FC:00:21:87:5F:6E:E0:77:18
         SHA1: 1F:CD:EB:93:07:63:53:6F:A0:D8:8C:AA:9D:44:51:A0:D7:B3:82:42
         SHA256: 3D:C1:C9:88:71:B5:51:E3:27:D9:43:E1:82:EC:13:B5:40:C3:A2:49:2C:C7:01:0C:41:FA:87:66:A8:FF:CE:B4
         Signature algorithm name: SHA1withRSA
         Version: 3

Extensions:

#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: F8 08 EF D8 AA D9 EA A7   06 2D 29 26 82 5E 18 C7  .........-)&.^..
0010: AE BA 2B 73                                        ..+s
]
[CN=Foobar Enterprise CA]
SerialNumber: [    d2ffe1bd 47c64742]
]

#2: ObjectId: 2.5.29.19 Criticality=false
BasicConstraints:[
  CA:true
  PathLen:2147483647
]

#3: ObjectId: 2.5.29.31 Criticality=false
CRLDistributionPoints [
  [DistributionPoint:
     [URIName: http://mschorn.net/crl.pem]
]]

#4: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: F8 08 EF D8 AA D9 EA A7   06 2D 29 26 82 5E 18 C7  .........-)&.^..
0010: AE BA 2B 73                                        ..+s
]
]
  • aufpassen, das es sich um die cacert handelt die auch der Browser verwendet
  • dieser Datensatz muss vorhanden sein
  • BasicConstraints: CA:true muss vorhanden sein
  • CRLDistributionPoints…URIName: http://(url) muss vorhanden sein
  • die crl.pem muss unter dieser http(s) Adresse verfügbar sein

Dann solltest Du dir den Signaturschlüssel genauer ansehen:

X:\>keytool -list -v -keystore "X:\CA\foobar.jks" -alias foobar
Enter keystore password: testtest
Alias name: foobar
Creation date: 25.04.2014
Entry type: PrivateKeyEntry
Certificate chain length: 2
Certificate[1]:
Owner: CN=Foobar Development
Issuer: CN=Foobar Enterprise CA
Serial number: 1
Valid from: Fri Apr 25 13:24:10 CEST 2014 until: Mon Apr 24 13:24:10 CEST 2017
Certificate fingerprints:
         MD5:  5E:C6:9A:23:4C:C2:66:2F:10:E1:10:97:EB:32:15:64
         SHA1: 15:37:74:8E:F8:41:D0:DB:A4:5A:FF:6E:F8:8F:0B:14:26:D8:84:D8
         SHA256: FB:5A:B0:52:11:5A:BB:DB:54:EC:8C:75:35:ED:06:5D:33:4E:AB:5D:75:A1:05:59:16:EC:34:80:61:AB:F2:56
         Signature algorithm name: SHA512withRSA
         Version: 3

Extensions:

#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: F8 08 EF D8 AA D9 EA A7   06 2D 29 26 82 5E 18 C7  .........-)&.^..
0010: AE BA 2B 73                                        ..+s
]
[CN=Foobar Enterprise CA]
SerialNumber: [    d2ffe1bd 47c64742]
]

#2: ObjectId: 2.5.29.19 Criticality=false
BasicConstraints:[
  CA:false
  PathLen: undefined
]

#3: ObjectId: 2.5.29.31 Criticality=false
CRLDistributionPoints [
  [DistributionPoint:
     [URIName: http://mschorn.net/crl.pem]
]]

#4: ObjectId: 2.5.29.37 Criticality=false
ExtendedKeyUsages [
  codeSigning
  1.3.6.1.4.1.311.2.1.21
  1.3.6.1.4.1.311.2.1.22
]

#5: ObjectId: 2.5.29.15 Criticality=false
KeyUsage [
  DigitalSignature
]

#6: ObjectId: 2.16.840.1.113730.1.1 Criticality=false
NetscapeCertType [
   SSL client
   S/MIME
   Object Signing
]

#7: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: E2 76 B9 68 4A 8B CD 08   C0 13 40 A6 FC 33 BE 9A  .v.hJ.....@..3..
0010: 8A 12 8C 78                                        ...x
]
]

Certificate[2]:
Owner: CN=Foobar Enterprise CA
Issuer: CN=Foobar Enterprise CA
Serial number: d2ffe1bd47c64742
Valid from: Fri Apr 25 13:03:24 CEST 2014 until: Mon Apr 22 13:03:24 CEST 2024
Certificate fingerprints:
         MD5:  89:CA:1F:DA:E1:5D:AE:FC:00:21:87:5F:6E:E0:77:18
         SHA1: 1F:CD:EB:93:07:63:53:6F:A0:D8:8C:AA:9D:44:51:A0:D7:B3:82:42
         SHA256: 3D:C1:C9:88:71:B5:51:E3:27:D9:43:E1:82:EC:13:B5:40:C3:A2:49:2C:C7:01:0C:41:FA:87:66:A8:FF:CE:B4
         Signature algorithm name: SHA1withRSA
         Version: 3

Extensions:

#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: F8 08 EF D8 AA D9 EA A7   06 2D 29 26 82 5E 18 C7  .........-)&.^..
0010: AE BA 2B 73                                        ..+s
]
[CN=Foobar Enterprise CA]
SerialNumber: [    d2ffe1bd 47c64742]
]

#2: ObjectId: 2.5.29.19 Criticality=false
BasicConstraints:[
  CA:true
  PathLen:2147483647
]

#3: ObjectId: 2.5.29.31 Criticality=false
CRLDistributionPoints [
  [DistributionPoint:
     [URIName: http://mschorn.net/crl.pem]
]]

#4: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: F8 08 EF D8 AA D9 EA A7   06 2D 29 26 82 5E 18 C7  .........-)&.^..
0010: AE BA 2B 73                                        ..+s
]
]
  • mit obrigem vergleichen,
  • besonders auf CRLDistributionPoints, ExtendedKeyUsages, KeyUsage und NetscapeCertType achten

Das signierte JAR genauer ansehen:

jarsigner -verify -certs -verbose target\applet.jar

s        378 Thu May 01 10:13:20 CEST 2014 META-INF/MANIFEST.MF

      X.509, CN=Foobar Development
      [certificate is valid from 25.04.14 13:24 to 24.04.17 13:24]
      X.509, CN=Foobar Enterprise CA
      [certificate is valid from 25.04.14 13:03 to 22.04.24 13:03]

         325 Thu May 01 10:13:20 CEST 2014 META-INF/FOOBAR.SF
        2999 Thu May 01 10:13:20 CEST 2014 META-INF/FOOBAR.RSA
           0 Thu May 01 10:11:48 CEST 2014 META-INF/
           0 Thu May 01 10:11:48 CEST 2014 foobar/
sm       521 Thu May 01 10:11:48 CEST 2014 foobar/HelloWorld.class

      X.509, CN=Foobar Development
      [certificate is valid from 25.04.14 13:24 to 24.04.17 13:24]
      X.509, CN=Foobar Enterprise CA
      [certificate is valid from 25.04.14 13:03 to 22.04.24 13:03]


  s = signature was verified
  m = entry is listed in manifest
  k = at least one certificate was found in keystore
  i = at least one certificate was found in identity scope

jar verified.
  • das sollte ziemlich genau so aussehen

Viele Grüße
Fancy

[QUOTE=Fancy]Zuerst solltest Du prüfen, ob das Wurzelzertifikat tatsächlich in der cacert angekommen ist:

X:\>keytool -list -v -keystore "C:\Program Files (x86)\Java\jre8\lib\security\cacerts" -alias foobarenterprise

[/QUOTE]
Daran scheitert es leider schon.

Keytool-Fehler: java.lang.Exception: Alias ist nicht vorhanden

Welcher Befehl aus Beitrag #35 ist dafür zuständig, das zu machen?

P.S.: Bei mir heißt das Verzeichnis jre7, nicht 8

Wenn Du das Wurzelzertifikat über die Kommandozeile in die cacerts importiert hast, konntest Du dabei den Alias frei wählen:

keytool -import -keystore "C:\Program Files\Java\jre8\lib\security\cacerts" -trustcacerts -alias foobarenterprise -file ca.cer

Wenn Du das Wurzelzertifikat über das Java Control Panel importiert hast, hast Du erstmal kein Alias. Dann musst Du dir alle Zertifikate ausgeben lassen:

X:\>keytool -list -v -keystore "C:\Program Files (x86)\Java\jre8\lib\security\cacerts" > ca.txt
Enter keystore password:  changeit

Und dann in der ca.txt dein Wurzelzertifikat suchen.

Viele Grüße
Fancy

Habe das Zertifikat über das Control Panel installiert.

keytool -list -v -keystore "C:\Program Files (x86)\Java\jre7\lib\security\cacerts" > ca.txt

erzeugt auch eine große Datei aber ich finde mein Zertifikat nicht. Alle Suchen bringen keine Ergebnisse.
Hab aber extra nochmal nachgeschaut, im Java Control Panel unter Sicherheit / Zertifikate verwalten / Benutzer / CA für sichere Site ist es definitiv vorhanden.
Wieso erscheint es nicht in der ca.txt?
Kann es sein, dass das Kommando nicht die vom Benutzer importieren Zertis anzeigt?

Ich habe keine deutsche JRE, in der englischen gibt es unter anderem: „Signer CA“ und „Secure Site CA“, erstes ist richtig, zweites falsch. „CA für sichere Site“ hört sich nach Zweitem an.

Die unter Benutzer abgelegen Zertifikate landen außerdem woanders, das kannst Du mit Folgendem nachsehen:

X:\>keytool -list -v -keystore "C:\Users\Fancy\AppData\LocalLow\Sun\Java\Deployment\security	rusted.cacerts"
  • Pfad anpassen, kein Passwort

Wenn Du damit nicht weiterkommst, kannst Du auch erstmal wie oben beschrieben das Wurzelzertifikat über die Kommandozeile importieren (cacert ggf. vorher sichern). Wenn es dann geht, kann man sich diesen Punkt immer noch genauer ansehen.

Viele Grüße
Fancy

OK, es geht bergauf!!! :slight_smile:

Check! Das hatte ich in die falsche Sparte importiert.

[QUOTE=Fancy;93221]Die unter Benutzer abgelegen Zertifikate landen außerdem woanders, das kannst Du mit Folgendem nachsehen:

X:\>keytool -list -v -keystore "C:\Users\Fancy\AppData\LocalLow\Sun\Java\Deployment\security	rusted.cacerts"

[/QUOTE]
Check! Da isser!

Weiß ich nicht. Wie kann ich das feststellen?

[QUOTE=Fancy;93045]- dieser Datensatz muss vorhanden sein

  • BasicConstraints: CA:true muss vorhanden sein
  • CRLDistributionPoints…URIName: http://(url) muss vorhanden sein
  • die crl.pem muss unter dieser http(s) Adresse verfügbar sein[/quote]
    Alle Check! Die crl.pem hatte ich natürlich vergessen SCHLUMPF :slight_smile:

[QUOTE=Fancy;93045]- mit obrigem vergleichen,

  • besonders auf CRLDistributionPoints, ExtendedKeyUsages, KeyUsage und NetscapeCertType achten[/quote]
    Alle Check, ist alles drin!

Hier hab ich Abweichungen, meins sieht so aus:

jarsigner -verify -certs -verbose localfile.jar

s        298 Sun May 04 08:29:12 CEST 2014 META-INF/MANIFEST.MF

      X.509, CN=FIRMENNAME
      [certificate is valid from 04.05.14 08:29 to 03.05.17 08:29]
      [CertPath not validated: Path does not chain with any of the trust anchors]

         396 Sun May 04 08:29:12 CEST 2014 META-INF/SIGALIAS.SF
        1576 Sun May 04 08:29:12 CEST 2014 META-INF/SIGALIAS.RSA
           0 Sun May 04 08:29:12 CEST 2014 META-INF/
sm       873 Sun May 04 08:29:06 CEST 2014 crl.pem

      X.509, CN=FIRMENNAME
      [certificate is valid from 04.05.14 08:29 to 03.05.17 08:29]
      [CertPath not validated: Path does not chain with any of the trust anchors]

sm      7527 Wed Dec 14 15:09:26 CET 2011 localfile.class

      X.509, CN=FIRMENNAME
      [certificate is valid from 04.05.14 08:29 to 03.05.17 08:29]
      [CertPath not validated: Path does not chain with any of the trust anchors]


  s = signature was verified 
  m = entry is listed in manifest
  k = at least one certificate was found in keystore
  i = at least one certificate was found in identity scope

jar verified.

Warning: 
This jar contains entries whose certificate chain is not validated.
This jar contains signatures that does not include a timestamp. Without a timestamp, users may not be able to validate this jar after the signer certificate's expiration date (2017-05-03) or after any future revocation date.

Da ist immer dieses CertPath not validated: Path does not chain with any of the trust anchors drin, wo kommt das her, warum ist das so?

Ich hab jetzt folgende Situation: Die Browser stellen halt ihre obligatorische Frage, ob das Java Plugin ausgeführt werden soll. Das kann man vermutlich nicht verhindern, oder doch?

Java führt mein Applet jetzt sauber aus, aber: Jetzt kommt weder das Warn-Popup noch das blaue Popup wie in Beitrag #35. Das Ziel wieder knapp verfehlt aber wir nähern uns :lol:
Und wenn ich den URL im Java Control Panel aus den Ausnahmen für sichere Sites rausnehme geht garnichts mehr und es kommt das hier:

Aber müsste sich die Aufnahme in diese Liste nicht durch das importierte Zertifikat erübrigen? Oder muss man immer zwingend beides machen?

Da stimmt etwas nicht:

Dort sollten eigentlich (mindestens) zwei Zertifikate gelistet sein. Zuerst Dein Signaturzertifikat und dann Dein Wurzelzertifikat, also so:

      X.509, CN=Foobar Development
      [certificate is valid from 25.04.14 13:24 to 24.04.17 13:24]
      X.509, CN=Foobar Enterprise CA
      [certificate is valid from 25.04.14 13:03 to 22.04.24 13:03]

Ist Dein Zertifikat mit dem CN=FIRMENNAME Dein Signatur- oder Dein Wurzelzertifikat?

Was genau gibt

X:\>keytool -list -v -keystore "X:\CA\foobar.jks" -alias foobar

aus? Insbesondere tauchen dort beide Zertifikate auf, also:

  • für das Signaturzertifikat:
Certificate chain length: 2
Certificate[1]:
Owner: CN=Foobar Development
Issuer: CN=Foobar Enterprise CA
  • für das Wurzelzertifikat:
Certificate[2]:
Owner: CN=Foobar Enterprise CA
Issuer: CN=Foobar Enterprise CA

Viele Grüße
Fancy

Sehe ich auch so :slight_smile:

Ja, genau diesen Unterschied meinte ich.

Hab jetzt echt 'ne Weile gesucht aber ich weiß es nicht. Ich kann die Frage nicht beantworten.
Wie kann ich das denn erkennen/ermitteln?

Das hier:

Aliasname: sigalias
Erstellungsdatum: 04.05.2014
Eintragstyp: PrivateKeyEntry
Zertifikatkettenlänge: 1
Zertifikat[1]:
Eigentümer: CN=FIRMENNAME
Aussteller: CN=FIRMENNAME
Seriennummer: 1
Gültig von: Sun May 04 08:29:09 CEST 2014 bis: Wed May 03 08:29:09 CEST 2017
Zertifikat-Fingerprints:
	 MD5:  6D:D5:24:1F:3B:4E:62:D4:2A:19:4A:93:FB:30:79:34
	 SHA1: 02:5E:4C:FE:8E:58:2B:24:53:FC:E6:35:C5:C1:1B:C3:F6:24:0D:39
	 SHA256: D2:70:0B:53:7C:32:30:AB:F5:24:A9:09:6E:E4:35:91:DF:4E:26:05:62:CE:66:73:0D:A5:ED:6F:17:7B:2C:52
	 Signaturalgorithmusname: SHA512withRSA
	 Version: 3

Erweiterungen: 

#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: E4 6C 55 D1 D9 BE BB BD   F6 3A 73 FD BE 78 78 25  .lU......:s..xx%
0010: 1E 45 F8 9E                                        .E..
]
[CN=FIRMENNAME]
SerialNumber: [    dc0ceebd 3a73b234]
]

#2: ObjectId: 2.5.29.19 Criticality=false
BasicConstraints:[
  CA:false
  PathLen: undefined
]

#3: ObjectId: 2.5.29.31 Criticality=false
CRLDistributionPoints [
  [DistributionPoint:
     [URIName: https://www.meinurl.de/crl.pem]
]]

#4: ObjectId: 2.5.29.37 Criticality=false
ExtendedKeyUsages [
  codeSigning
  1.3.6.1.4.1.311.2.1.21
  1.3.6.1.4.1.311.2.1.22
]

#5: ObjectId: 2.5.29.15 Criticality=false
KeyUsage [
  DigitalSignature
]

#6: ObjectId: 2.16.840.1.113730.1.1 Criticality=false
NetscapeCertType [
   SSL client
   S/MIME
   Object Signing
]

#7: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: B3 5F E7 72 18 96 D5 00   CF 3A 49 7D 78 03 60 10  ._.r.....:I.x.`.
0010: 22 CD D9 4C                                        "..L
]
]

[QUOTE=Fancy;93249]Insbesondere tauchen dort beide Zertifikate auf

  • für das Signaturzertifikat[/quote]
    Nein, dieses Certificate chain taucht nirgendwo auf.

Wörter Owner und Issuer kommen nur in der 01.pem und certificate.pem sowie openssl.conf vor.

Was läuft da falsch?

Owner = Eigentümer, Issuer = Aussteller und Certificate chain length = Zertifikatkettenlänge.

Das Wurzelzertifikat ist das Zertifikat, das unter dem Punkt “Schlüssel und Wurzelzertifikat der CA erzeugen” generiert wurde (ca.key, ca.pem, ca.cer, Common Name = Foobar Enterprise CA). CA steht für Certification Authority = Zertifizierungsstelle = Inhaber des Wurzelzertifikates.

Das Signaturzertifikat ist das Zertifikat, das aufbauend auf dem Zertifikatrequest unter dem Punkt “Schlüssel und Zertifikatrequest erstellen” erzeugt wurde (foobar.key, foobar.csr, foobar.pem, foobar.p12, foobar.jks, Common Name = Foobar Development). Mit diesem Zertifikat wird das JAR signiert.

Ein Wurzelzertifikat ist immer selbst signiert (Eigentümer = Aussteller), das Signaturzertifikat sollte hingegen mit dem Wurzelzertifikat signiert werden (Austeller = Wurzelzertifikat). Bei Dir ist das aber nicht so.

In der openssl.conf, die ich gepostet habe, kommen die Wörter Owner und Issuer zudem nicht vor.

Ich vermute, dass Du beim Abarbeiten der einzelnen Befehle irgendwo durcheinandergeraten bist.

Eine Zertifikatskette ist ein sehr diffiziler Prozess, bei dem mehrere Schritte aufeinander aufbauen. Schon die kleinste Abweichung kann dazu führen, dass das Zertifikat am ende als ungültig eingestuft wird.

Am besten wäre es vermutlich, wenn Du alle Dateien noch mal löschst und dann Zeile für Zeile noch mal alle Dateien neu erzeugst.

Viele Grüße
Fancy