【发布时间】:2017-07-02 22:22:39
【问题描述】:
我正在尝试从我创建的 .keystore 文件中获取私钥。
到目前为止,这是有效的:
try {
FileInputStream is = new FileInputStream("C:\\Program Files\\Java\\...mykeystore.keystore");
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
keystore.load(is, "mypassword".toCharArray());
Key privKey = keystore.getKey("alias", "mypassword".toCharArray());
StringWriter stringWriter = new StringWriter();
JcaPEMWriter pemWriter = new JcaPEMWriter(stringWriter);
pemWriter.writeObject(privKey);
pemWriter.close();
System.out.println(stringWriter);
对于 System.out.println(stringWriter) 我得到以下输出:
-----开始 RSA 私钥--
这里有私钥
-----结束 RSA 私钥-----
我现在想使用这个私钥创建一个到 Unix 服务器的 ssh 连接。在 unix 服务器端,我已经将公钥放入了 authorized_key 文件中。
对于 ssh 连接,我使用 JSch。 根据JSCH - Invalid private key,我现在需要将此密钥转换为 PEM 格式。我用 Abdelhameed Mahmoud 的例子做到了这一点:
StringWriter stringWriter = new StringWriter();
JcaPEMWriter pemWriter = new JcaPEMWriter(stringWriter);
pemWriter.writeObject(privKey);
pemWriter.close();
System.out.println(stringWriter);
byte[] privateKeyPEM = stringWriter.toString().getBytes();
这就是我卡住的地方。
如何使用 privateKeyPEM 字节对象? 我想将它与 jsch.addIdentity() 一起使用
但我不太明白如何使用这个 byte[] privateKeyPEM 变量来设置身份?
这是我的 JSch 部分的示例:
JSch jsch = new JSch();
jsch.addIdentity(**What to put here??**);
session = jsch.getSession(user, getIP(), getPort());
session.setConfig("PreferredAuthentications", "publickey");
//session.setPassword(pwd);
session.setConfig("StrictHostKeyChecking", "no");
session.connect(3000);
有人有这方面的经验吗?
对缺少的 cmets 感到抱歉,因为我仍在研究如何让这个工作,所以我还没有添加任何 cmets。
在此先感谢您提供任何有用的意见。
干杯 阿明
【问题讨论】: