как загрузить хранилище ключей pkcs12, используя python - PullRequest
0 голосов
/ 24 марта 2020

я использовал java для создания хранилища ключей pkcs12, где я хранил два ключа, теперь я хочу получить эти ключи, используя python. java Я загружаю хранилище ключей и использую keystore.getkey (keyalias). как я могу сделать это с python?

  • l сначала попробовал pyjks, но он не поддерживал хранилища ключей pkcs12
  • затем я попробовал pyopenssl но документация не упоминала метод для фактической загрузки существующего хранилища ключей.
  • Я также нашел этот фрагмент кода из старого поста здесь:
# load OpenSSL.crypto
from OpenSSL import crypto

# open it, using password. Supply/read your own from stdin.
p12 = crypto.load_pkcs12(open("/path/to/cert.p12", 'rb').read(), passwd)

# get various properties of said file.
# note these are PyOpenSSL objects, not strings although you
# can convert them to PEM-encoded strings.
p12.get_certificate()     # (signed) certificate object
p12.get_privatekey()      # private key.
p12.get_ca_certificates() # ca chain.

но get_privatekey () не принимает аргументы, что означает, что нельзя установить псевдоним ключа, который я хочу получить, так же, как я делаю в java:

public static SecretKey getEntry(KeyStore keyStore, String keyAlias, Optional<String> password) {
        SecretKey key = null;

        try {
            key = (SecretKey) keyStore.getKey(keyAlias, password.orElse("").toCharArray());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return key;
    }

1 Ответ

0 голосов
/ 31 марта 2020

Один вопрос, прежде чем я начну, это два ключа, которые вы начинаете с «секретных ключей» (он же симметрия c), или это «личные ключи»?

Если ваши ключи «личные» keys ", вы должны иметь возможность преобразовать хранилище ключей PKCS12 в хранилище ключей JKS и прочитать закрытые ключи, используя pyjks.

Чтобы преобразовать формат хранилища ключей из командной строки на RHEL7, используйте следующее:

keytool -importkeystore -srckeystore <path_to_your_pkcs12_keystore> -srcstoretype PKCS12 -deststoretype JKS -destkeystore <path_to_new_jks_keystore>

Если ваши ключи являются «секретными ключами», формат JKS не поддерживает типы записей «секретных ключей». Поэтому попытайтесь преобразовать хранилище ключей из формата PKCS12 в хранилище ключей формата JCEKS. Формат JCEKS - это формат, который оба

  • поддерживают типы записей "секретный ключ"
  • Заявлено, что он поддерживается pyjks

Для преобразования формата хранилища ключей из командной строки на RHEL7 используйте следующее:

keytool -importkeystore -srckeystore <path_to_your_pkcs12_keystore> -srcstoretype PKCS12 -deststoretype JCEKS -destkeystore <path_to_new_jceks_keystore>

Теперь это новое хранилище ключей формата JCEKS должно иметь возможность считывания через python с использованием pyjks

...