не удалось загрузить закрытый ключ (нераспознанный тип данных) при попытке импортировать файл pem, созданный с помощью PKCS8Generator

2

Я создаю KeyPair с нижеуказанной спецификацией, используя Java (KeyPairGenerator)

  1. Формат открытого ключа OpenSSH
  2. Формат DER в кодировке Base64
  3. Формат файла открытого ключа SSH, как указано в RFC4716

Публичный сгенерированный является валидным, а закрытый ключ хранится в файле pem с использованием PKCS8Generator - недопустим. Когда я пытаюсь импортировать файл pem в puttygen, я получаю сообщение об ошибке «Не удалось загрузить закрытый ключ (нераспознанный тип данных)», Ниже приведен пример кода


KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(2048, new SecureRandom());
KeyPair kp = kpg.generateKeyPair();
Key publicKey =  kp.getPublic();

String publicKeyEncoded = "---- BEGIN SSH2 PUBLIC KEY ----" + "\n" +
                       new String(Base64.getEncoder().encode(publicKey.getEncoded())) + "\n"+
                           "---- END SSH2 PUBLIC KEY ----";


//Get Private Key and store to pem file.
Key privateKey = kp.getPrivate();
PKCS8Generator encryptorBuilder = new PKCS8Generator((PrivateKey) privateKey);
PEMWriter writer = new PEMWriter(new FileWriter(new File("D:/pk.pem")));
PemObject obj = encryptorBuilder.generate();
writer.writeObject(obj);
writer.flush();
writer.close();

Не могли бы вы помочь мне в этом. В

user576748
источник
1
не знаю, но это, вероятно, следует перейти к StackOverflow ...
Jakuje

Ответы:

4

PuTTY не поддерживает формат PKCS # 8 - только «сырые» ключи PEM (PKCS # 1) и SSH.com «RFC4716-подобные» закрытые ключи. (Последние версии также поддерживают новый формат OpenSSH "bcrypt".)

Другими словами, файл должен иметь один из следующих заголовков:

  • PuTTY-User-Key-File-2: <key_type> (PuTTY .ppk)
  • -----BEGIN RSA PRIVATE KEY-----
  • -----BEGIN DSA PRIVATE KEY-----
  • -----BEGIN EC PRIVATE KEY-----
  • ---- BEGIN SSH2 ENCRYPTED PRIVATE KEY ---- (SSH.com)
  • -----BEGIN OPENSSH PRIVATE KEY----- (OpenSSH)

Смущает, что люди используют одно и то же расширение .pem для PKCS # 1 и PKCS # 8.

(Возможная причина отсутствия поддержки PuTTYgen в том, что ssh-keygen в OpenSSH всегда записывает PKCS # 1, поэтому до сих пор никто не нуждался в поддержке PKCS # 8.)

grawity
источник
Это, вероятно, причина моей ошибки. Есть ANSIBLE скрипт, который генерирует новые ключи для наших пользователей. Только иногда этот ключ может быть импортирован с использованием puttygen. Каждый раз, когда это не удавалось, я проверял правильность пароля с помощью openssh. ssh-keygen -p -f <private_key>К сожалению, я не вижу способа сказать ansible для генерации ключей PKCS # 1 ...
oneindelijk
Создайте ключи Ed25519, которые всегда используют пользовательский формат OpenSSH - и PuTTY поддерживает его.
Гравитация