【发布时间】:2016-04-12 17:31:27
【问题描述】:
我正在编写一个工具来使用 AWS Java API 创建新的 Amazon Web Services 服务器。创建服务器时,您必须从 AWS 存储在您的账户中的公钥中指定要使用的 SSH 密钥对。您可以自己生成密钥对并导入公钥,也可以让 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”。虽然我找到了使用 OpenSSL 工具从该格式转换为 pem 格式的参考资料,但我还没有找到任何关于如何在 Java 中实际执行此操作的任何内容。
如何以 pem 格式导出密钥以便 Puttygen 可以读取?
【问题讨论】: