3

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

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

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


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();

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

1 ответ1

3

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.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .