it-swarm-eu.dev

Jak mohu exportovat svůj soukromý klíč z klíčového skladu klíčů = Java Keytool?

Chtěl bych exportovat svůj soukromý klíč z úložiště klíčů Java Keytool Keystore), abych ho mohl použít s openssl. Jak to mohu udělat?

117
Jonas

Použijte Java keytool pro převod z JKS na P12 ...

Export z proprietárního formátu keytool (nazývaného „JKS“) do standardizovaného formátu PKCS # 12 :

keytool -importkeystore \
    -srckeystore keystore.jks \
    -destkeystore keystore.p12 \
    -deststoretype PKCS12 \
    -srcalias <jkskeyalias> \
    -deststorepass <password> \
    -destkeypass <password>

... pak použijte openssl pro export z P12 do PEM

Exportujte certifikát pomocí openssl:

openssl pkcs12 -in keystore.p12  -nokeys -out cert.pem

Export nešifrovaného soukromého klíče:

openssl pkcs12 -in keystore.p12  -nodes -nocerts -out key.pem
135
Jaime Hablutzel

Protože Java 6), můžete importovat/exportovat soukromé klíče do PKCS # 12 (.p12) soubory používající keytool, s možností -importkeystore (není k dispozici v předchozích verzích).

Například:

keytool -importkeystore -srckeystore existing-store.jks -destkeystore new-store.p12 -deststoretype PKCS12

The PKCS12 typ úložiště klíčů je také podporován jako standardní typ úložiště klíčů ve výchozím poskytovateli zabezpečení Oracle/Sun.

62
Bruno

Vyzkoušejte „Keystore Explorer“

Souhlasím s Brunem. Keytool je dokonalý nástroj při práci s klíčovým úložištěm Java keystore), ale existuje jeden fantastický a poměrně výkonný bezplatný nástroj: Průzkumník Keystore

Používám to hodně a nikdy jsem neměl potřebu něčeho jiného.

23
Tiho

Pokud se někdo ocitne zde a snaží se získat soukromý klíč z úložiště klíčů typu JCEKS, zjistil jsem, že instrukce keytool a openssl popsané v jiných odpovědích nefungují. Abych dostal klíč ven, musel jsem použít třídu Java).

import Sun.misc.BASE64Encoder;

import Java.io.File;
import Java.io.FileInputStream;
import Java.io.FileWriter;
import Java.security.*;

public class ExportPrivateKey
{
    private File keystoreFile;
    private String keyStoreType;
    private char[] keyStorePassword;
    private char[] keyPassword;
    private String alias;
    private File exportedFile;

    public void export() throws Exception {
        KeyStore keystore = KeyStore.getInstance(keyStoreType);
        BASE64Encoder encoder = new BASE64Encoder();
        keystore.load(new FileInputStream(keystoreFile), keyStorePassword);
        Key key = keystore.getKey(alias, keyPassword);
        String encoded = encoder.encode(key.getEncoded());
        FileWriter fw = new FileWriter(exportedFile);
        fw.write("---BEGIN PRIVATE KEY---\n");
        fw.write(encoded);
        fw.write("\n");
        fw.write("---END PRIVATE KEY---");
        fw.close();
    }

    public static void main(String args[]) throws Exception {
        ExportPrivateKey export = new ExportPrivateKey();
        export.keystoreFile = new File(args[0]);
        export.keyStoreType = args[1];
        export.keyStorePassword = args[2].toCharArray();
        export.alias = args[3];
        export.keyPassword = args[4].toCharArray();
        export.exportedFile = new File(args[5]);
        export.export();
    }
}

Používání:

javac ExportPrivateKey.Java
java ExportPrivateKey <path_to_keystore> JCEKS <keystore_password> “<key_alias>” <key_password> <output_file_name>
6
cjbooms

Existuje formát, který umožňuje přesun soukromých klíčů, se nazývá PKCS # 12. Tento formát se objevil později ve vývoji certifikátů PKI a souvisejících úložišť klíčů podle potřeby. Pokud vezmete v úvahu řetězec problémů důvěry vytvořený přístupem a transportem soukromého klíče, uvidíte, proč nebyl zahrnut v počátečních funkcích, ale spíše přišel pod tlakem provozní potřeby. To je hlavní důvod této výzvy.

Sklady klíčů Java byly jedním z počátečních uživatelů formátu PKCS # 12, ale jako dovozci, nikoli vývozci. Zdá se, že návrh zabezpečení úložiště klíčů Java stále nepodporuje export soukromých klíčů jako standardní funkce. Opět existují dobré bezpečnostní důvody pro tuto skutečnost. To znamená, že soukromé rutiny byly psány tak, jak je zde uvedeno: http://www.startux.de/index.php/Java/44-dealing-with-Java-keystoresyvComment44

Pokud je to možné, uvažoval bych spíše o vytvoření nového úložiště klíčů v OpenSSL a nových klíčích, než o pokus o vyřazení soukromého klíče z úložiště klíčů Java. Otevřením úložiště klíčů Java a vyjmutím soukromého klíče se jeden pohybuje za navržené bezpečnostní funkce. Funkce exportu PKCS # 12 byla požadována po mnoho let, ale v Javě stále není podporována. Myslím, že to je z velmi dobrých kryptologických důvodů, a tak bych se naučil učinit tento krok, pokud to není nezbytně nutné.

2
zedman9991