ich bin in diesem Augenblick vor einem Problem und ich kann nicht verstehen, warum ich nicht einen Schlüsselspeicher auf Java 6. Das Stück Code ist wie folgt lesen:Extrahierung Certficate von Schlüsselspeicher auf Java 6
KeyStore ks = KeyStore.getInstance("jks");
FileInputStream file = new FileInputStream(<path to file>);
ks.load(file, <password>);
String alias = (String)ks.aliases().nextElement();
PrivateKey key = (PrivateKey)ks.getKey(alias, ConstantsUtils.CERT_PASS.toCharArray());
Certificate[] chain = ks.getCertificateChain(alias);
I‘ m Verwenden dieses Zertifikats zum Signieren einer PDF aus Java-Code, aber Variablen Schlüssel und Kette bleiben null, damit der Keystore meinen privaten Schlüssel nicht abrufen kann.
Der Schlüsselspeicher wurde von keytool importiert ein Zertifikat mit der nächsten Zeile (Windows 7) erstellt:
C:\Program Files\Java\jdk1.6.0_37\bin>keytool -importcert -file "<path to cert>" -keystore <path to keystore -alias "<alias>" -keypass <password> -storepass <password>
importiertes Zertifikat von einer dritten Partei ist, und soll richtig funktionieren. Ich weiß nicht, ob etwas falsch ist, das Zertifikat zu importieren, oder ob ich etwas falsch schreibe.
Es ist nur ein Zertifikat, um ein PDF-Dokument zu signieren, das zuvor auf Java-Ebene erstellt wurde, ich brauche nur eine Möglichkeit, dieses Dokument zu lesen und auf dieses Dokument zu stempeln. –
Sie können damit nichts signieren, es sei denn, Sie haben einen privaten Schlüssel. Ihr ganzes Problem scheint radikal falsch zu sein. – EJP
Das Ding ist, dass ich das Zertifikat (also den privaten Schlüssel auch) in meinen KeyStore mit keytool importierte, dann möchte ich diesen privaten Schlüssel lesen, um es zu benutzen, um mein PDF zu unterzeichnen. Das Problem ist, dass ich diesen PrivateKey nicht lesen kann, obwohl ich den Keystore öffnen kann und in einem Debugger alle Daten sehen kann. –