Подтвердить что ты не робот

Keytool - просмотр открытых и закрытых ключей

Я создал Java keystore программным способом типа jks (т.е. тип по умолчанию).
Он изначально пуст, поэтому я создал сертификат DSA.

keytool -genkey -alias myCert -v -keystore trivial.keystore

Как я могу просмотреть общедоступные и закрытые ключи?
То есть есть ли команда, которая печатает закрытый ключ моего сертификата?
Я мог найти только keytool -certreq, который в моем понимании печатает сертификат в целом:

-----BEGIN NEW CERTIFICATE REQUEST-----
MIICaTCCAicCAQAwZTELMAkGA1UEBhMCR1IxDzANBgNVBAgTBkdyZWVjZTEPMA0GA1UEBxMGQXRo
BQADLwAwLAIUQZbY/3Qq0G26fsBbWiHMbuVd3VICFE+gwtUauYiRbHh0caAtRj3qRTwl
-----END NEW CERTIFICATE REQUEST-----

Я предполагаю, что это весь сертификат. Как я могу увидеть частный (или открытый ключ) через keytool?

4b9b3361

Ответ 1

Вы создали закрытый (и связанный с ним общедоступный) ключ в хранилище ключей. Для того, чтобы это было действительно полезно, вы можете получить его, подписанное сертификационным агентством (CA), поскольку это команда -certreq (вы отправляете результат в это агентство по сертификации, а также некоторую другую информацию и немного денег, и они отправляют обратно сертификат, который затем можно импортировать в хранилище ключей.)

Просмотр закрытого ключа не предназначен... вам это обычно не нужно, поскольку вы используете хранилище ключей в своей программе Java, и это знает, как его использовать.


Изменить: поскольку вы хотите посмотреть на свое хранилище ключей, вот быстрая программа Java, которая делает это:

import java.io.*;
import java.security.*;
import java.security.cert.Certificate;

public class KeyPrinter {

    /**
     * to be invoked with these parameters:
     * 
     * [0]:  keystore-password
     * [1]:  filename
     * [2]:  alias
     * [3]:  entry-Password (if necessary)
     */
    public static void main(String[] params)
        throws IOException, GeneralSecurityException
    {
        char[] storePass = params[0].toCharArray();
        String fileName = params[1];
        String alias = params[2];
        KeyStore.ProtectionParameter entryPass;
        if(params.length > 3) {
        entryPass=new KeyStore.PasswordProtection(params[3].toCharArray());
        } else {
            entryPass = null;
        }

        KeyStore store = KeyStore.getInstance("JKS");
        InputStream input = new FileInputStream(fileName);
        store.load(input, storePass);

        KeyStore.Entry entry = store.getEntry(alias, entryPass);
        System.out.println(entry);

    }
}

Сначала вызовите keytool -list -keystore myStore, чтобы узнать, какой псевдоним искать, затем вызовите эту программу с паролями и параметрами. В случае записи секретного ключа он показывает сам ключ и, кроме того, самозаверяющий сертификат, содержащий открытый ключ, в читаемой форме. В случае "доверенного сертификата" он показывает только открытый ключ.

Ответ 2

Нет, ты не можешь. Вы можете получить доступ к закрытому ключу из кода, но его нельзя экспортировать с помощью keytool.
Используйте OpenSSL, если вам нужно экспортировать закрытый ключ.

Другой вариант: вы можете создать хранилище ключей в формате PKCS12. Затем вы можете импортировать его в браузер, а затем экспортировать закрытый ключ.

Ответ 3

(Portecle) - очень удобный графический интерфейс для управления хранилищами ключей. И, кроме всего прочего, он имеет возможность экспортировать закрытый ключ и связанный с ним сертификат.

Общим способом совместного использования открытого ключа является совместное использование сертификата для вашей ключевой пары (он содержит ваш открытый ключ внутри)

Ответ 4

keytool -list -v -alias myCert -storepass 123456 -keystore file.jks

или

keytool -list -rfc -alias myCert -storepass 123456 -keystore file.jks

как указано в

keytool -help