Как я могу экспортировать закрытый ключ (PKCS # 8?) В формате Putty или Puttygen для чтения?

Я пишу инструмент для создания новых серверов Amazon Web Services, используя API-интерфейс AWS. Когда вы создаете сервер, вы должны указать, какую пару ключей SSH использовать из открытых ключей, которые AWS хранит в вашей учетной записи. Вы можете сгенерировать пару ключей самостоятельно и импортировать открытый ключ, или вы можете настроить AWS для создания пары ключей и загрузить закрытый ключ.

Я пытаюсь сгенерировать пару ключей самостоятельно, импортировать открытый ключ в AWS, запустить новый сервер с использованием только что зарегистрированной записи пары ключей и сохранить закрытый ключ локально. Затем я хочу использовать Putty для ssh на моем новом сервере, используя закрытый ключ, возможно, сначала пропустив его через Puttygen для его преобразования.

До сих пор я дошел до генерации своей пары ключей, успешного импорта открытого ключа в AWS и запуска нового сервера. Тем не менее, я не могу, по всей видимости, экспортировать закрытый ключ в любом формате, который может принять Putty или Puttygen.

Вот мой код для генерации пары ключей и сохранения закрытого ключа:

SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
random.nextBytes(new byte[]{}); //toss out the first result to ensure it seeds randomly from the system.

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(KEY_LENGTH, random);
KeyPair keyPair = keyGen.genKeyPair();

BASE64Encoder encoder = new BASE64Encoder();

FileOutputStream out =  null;
File keyPath = new File(_keyStorageDir, "private.pem");
try
{
    out = new FileOutputStream(keyPath);
    out.write(encoder.encode(keyPair.getPrivate().getEncoded()).getBytes());
}
finally
{
    if(out != null)
        out.close();
}

Однако, когда я пытаюсь импортировать ключ в PuttyGen, я получаю «Не удалось загрузить ключ (не закрытый ключ)». Если я пытаюсь добавить ----- BEGIN PRIVATE KEY ----- и соответствующий ему нижний колонтитул, я получаю «Не удалось загрузить закрытый ключ (нераспознанный тип ключа). Если я пытаюсь получить RSA PRIVATE KEY, я получаю» Не удалось загрузить приватный ключ (ошибка декодирования ASN.1) ".

призваниеkeyPair.getPrivate().getFormat() дает "PKCS # 8". Хотя я нашел ссылки на преобразование этого формата в формат pem с помощью инструментов OpenSSL, я не нашел ничего о том, как на самом деле сделать это самому в Java.

Как я могу экспортировать ключ в формате pem, чтобы Puttygen мог его прочитать?

Ответы на вопрос(2)

Ваш ответ на вопрос