So lesen Sie den öffentlichen und privaten Schlüssel aus KeyStore. Meine Anwendung läuft auf IBM Web Sphere, ich möchte öffentlichen und privaten Schlüssel aus dem Schlüsselspeicher lesen. Ich möchte wissen, gibt es eine API, mit der ich auf Schlüsselspeicher zugreifen kannSo lesen Sie den privaten und öffentlichen Schlüssel aus dem Schlüsselspeicher in Java
Antwort
Sie können nicht. Der private Schlüssel ist nicht im Zertifikat enthalten. Es ist im KeyStore. Es ist das erste, was Sie gemacht haben, bevor das Zertifikat existierte.
Sie können Ikeyman oder ikeycmd in IBM JRE verwenden, um die * .kdb-Datei in eine PKCS12-Datei zu konvertieren. Sie können dann die privaten Schlüssel und die zugehörigen Zertifikate trivialer extrahieren:
# Client Certificate
openssl pkcs12 -nokeys -in $MYP12 -clcerts -nokeys -out clientcert.pem $PKCSARGS
#Private Key
openssl pkcs12 -in $MYP12 -nocerts -out client_privkey.pem -nodes $PKCSARGS
#Public Key
openssl x509 -in clientcert.pem -pubkey -noout > client_pubkey.pem
Aber wenn Ihr Endziel das Zertifikat und den Schlüssel in WebSphere zu verwenden ist, sind Sie besser konvertiert es nur mit IKEYCMD oder ikeyman zu einem nativen Java Format.
Schließlich, wenn Sie wirklich eine API wollen Ihr eigenes Zertifikat/Schlüsselspeicher-Management-Tool zu schreiben, genau das zu tun, was bestehende GUIs und Tools bereits für Sie tun:
Verwenden java.security.KeyStore und Freunde mit der "IBMCMSKS" Typ. Wenn Sie verwenden kein WAS/IHS JRE, fügen Sie diesen Anbieter: com.ibm.security.cmskeystore.CMSProvider
Danke für Hilfe. – user3797766
Beim Start der Anwendung denken wir darüber nach, den privaten Schlüssel und den öffentlichen Schlüssel aus dem Websphere-SSL-Zertifikat zu lesen, im Wesentlichen aus dem Schlüsselspeicher, der sich innerhalb von SSL befindet. Dazu müssen wir CMSProvider wie oben erwähnt verwenden? – user3797766
Wenn es eine * .kdb ist, ja. – covener
Wenn Sie nicht über RACF Schlüsselspeicher auf Z kümmern, gibt es einfache Anweisungen in der java.security.KeyStore javadoc: https://docs.oracle.com/javase/7/docs/api/java/security/KeyStore.html
import java.security.KeyStore;
import java.io.FileInputStream;
....
KeyStore ks = KeyStore.getInstance("JKS");
FileInputStream fis = null;
try {
fis = new FileInputStream("keyStoreName");
ks.load(fis, ksPassword.toCharArray());
} finally {
if (fis != null) {
fis.close();
}
}
Key myKey = ks.getKey(alias,password.toCharArray());
Wenn Sie Schlüssel von einem zentralen Schlüsselspeicher lesen möchten, können Sie das Kennwort für den Schlüsselspeicher nicht benötigen, aber Sie können den Verwaltungsbereich brauchen, um herauszufinden des Keystores. Zum Beispiel:
(Zelle): myCell: (node): myNode
Die Ersetzungen sind myCell und myNode. Manchmal kann man ohne den Verwaltungsbereich davonkommen und manchmal nicht. Versuchen Sie, getJavaKeyStore mit null für den Verwaltungsbereich aufzurufen, um zu sehen, ob er für Sie funktioniert. Wenn nicht, müssen Sie den Verwaltungsbereich definieren.
import com.ibm.ws.ssl.config.KeyStoreManager;
import java.security.KeyStore;
import java.security.Key;
...
String mgmtScopeString="(cell):"+myCell+":(node):"+myNode;
KeyStore keystore =
KeyStoreManager.getInstance().getJavaKeyStore("NodeDefaultKeyStore",
mgmtScopeString);
Key myKey = keystore.getKey(alias,password.toCharArray());
Dieser Code funktioniert bei mir den Inhalt einer *.kdb
Datei zu lesen. Natürlich benötigen Sie das Passwort, das mit geschützt ist. Erstes Argument ist der Dateiname, zweites Argument der Schlüssel.
import java.io.FileInputStream;
import java.security.Key;
import java.security.KeyStore;
import java.security.Security;
import java.security.cert.Certificate;
import java.text.SimpleDateFormat;
import java.util.Enumeration;
public class KdbReaderTest {
public static void main(String[] args) {
String certFile=args[0];
String password=args[1];
KeyStore ks;
Security.addProvider(new com.ibm.security.cmskeystore.CMSProvider());
try {
ks=KeyStore.getInstance("IBMCMSKS");
System.out.println("got instance");
ks.load(new FileInputStream(certFile), password.toCharArray());
Enumeration<String> alias=ks.aliases();
while (alias.hasMoreElements()) {
Certificate cert=null;
String aliasName=alias.nextElement();
System.out.printf("%-20s ", aliasName);
if (ks.isKeyEntry(aliasName)) {
Key key=ks.getKey(aliasName, password.toCharArray());
// do whatever you want with the key here
}
if (ks.isKeyEntry(aliasName)
|| ks.isCertificateEntry(aliasName)) {
cert=ks.getCertificate(aliasName);
java.security.cert.X509Certificate x509=(java.security.cert.X509Certificate)cert;
SimpleDateFormat iso = new SimpleDateFormat("yyyy-MM-dd");
System.out.print(iso.format(x509.getNotBefore())+ " - "+iso.format(x509.getNotAfter()));
if (!x509.getSubjectDN().getName().equals(aliasName))
System.out.println(" "+x509.getSubjectDN().getName());
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
System.out.println("done");
}
}
Die nur zwei Elemente, die aus einer .jks Datei verschieden sind
aus der LektüreSecurity.addProvider(new com.ibm.security.cmskeystore.CMSProvider());
KeyStore.getInstance("IBMCMSKS");
zu
Für diese (Sie auch die CMSProvider in $JAVA_HOME/lib/security/java.security
statt Aufruf addProvider eingeben) arbeiten, benötigen Sie ibmpkcs.jar
und ibmcmsprovider.jar
in Ihrem Klassenpfad.
- 1. Lesen Sie den öffentlichen Schlüssel aus der Datei in Schlüsselspeicher
- 2. So lesen Sie den öffentlichen Schlüssel aus der PFX-Datei in Java
- 3. Wie man privaten Schlüssel und öffentlichen Schlüssel in KeyStore speichert
- 4. Lesen des öffentlichen/privaten Schlüssels aus dem Speicher mit OpenSSL
- 5. So laden Sie den privaten RSA-Schlüssel aus der Datei
- 6. parsen und lesen Sie einen öffentlichen Schlüssel in Java
- 7. generieren privaten und öffentlichen Schlüssel OpenSSL
- 8. Speichern von öffentlichen und privaten Schlüsseln in einer Datenbank oder einem Schlüsselspeicher
- 9. Befehl ssh-keygen in Java zum Extrahieren des öffentlichen Schlüssels aus dem privaten Schlüssel
- 10. Generieren privaten Schlüssel & öffentlichen Schlüssel in meinem Fall
- 11. Überprüfen Sie den privaten Schlüssel in signierten XML mit öffentlichen Schlüssel
- 12. Kann ich privaten Schlüssel aus dem letzten öffentlichen Schlüssel mit Puttygen
- 13. Java - wie ein Schlüssel in Schlüsselspeicher speichern
- 14. So finden Sie den privaten Schlüssel eines Zertifikats in Windows
- 15. Java-JWT mit öffentlichen/privaten Schlüsseln
- 16. Wie Skript sftp mit PSFTP.exe mit privaten und öffentlichen Schlüssel
- 17. So pinnen Sie den öffentlichen Schlüssel eines Zertifikats unter iOS
- 18. ist .SNK enthält sowohl privaten Schlüssel als auch öffentlichen Schlüssel?
- 19. Java Last öffentlichen Schlüssel
- 20. Kann den Schlüssel aus KeyStore nicht lesen
- 21. Verschlüsseln mit RSA privaten Schlüssel in Java
- 22. Wie öffentlichen und privaten Schlüssel für API generieren
- 23. RSA privaten Schlüssel aus dem Modul und privaten Exponenten in JavaScript
- 24. Berechne die Primzahlen p und q aus dem privaten Exponenten (d), dem öffentlichen Exponenten (e) und dem Modul (n)
- 25. Wie mit privaten Schlüssel zu verschlüsseln und mit öffentlichen Schlüssel in C# RSA
- 26. privaten und öffentlichen Variablen in einer Methode Java
- 27. So überprüfen Sie die Signatur und laden den öffentlichen Schlüssel aus der PEM-Datei?
- 28. So überprüfen Sie die Signatur und laden den öffentlichen Schlüssel aus der CRT-Datei?
- 29. So speichern Sie den privaten Schlüssel für Android Cordova App
- 30. Warum muss SFTP-Client nur den privaten Schlüssel kennen, benötigt keinen öffentlichen Schlüssel?
Ja, ich weiß, im Web-Bereich ist mein Keystore konfiguriert Von meiner Back-End-Anwendung auf IBM Web-Sphäre, möchte ich öffentliche und private Schlüssel aus dem Schlüsselspeicher lesen. Ich möchte wissen, gibt es eine API, mit der ich Schlüsselspeicher zugreifen kann – user3797766
Ja, es heißt, err, 'KeyStore'.Erstaunlicherweise. Ich schlage vor, dass Sie Ihre Frage bearbeiten, um zu reflektieren, wonach Sie wirklich fragen. – EJP