Как я могу экспортировать закрытый ключ (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 мог его прочитать?