使用来自.keystore文件的私有RSA密钥和Jsch

时间:2017-02-14 14:58:50

标签: java ssh keystore jsch

我正在尝试从我创建的.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私钥-----

私人密钥在这里

----- END RSA私钥-----

我现在想使用这个私钥来创建一个到Unix服务器的ssh连接。在unix服务器端,我已经将公钥放入authorized_key文件中。

对于ssh连接,我使用JSch。 根据{{​​3}}我现在需要将此密钥转换为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);

有没有人经历过这个?

对于遗失的评论感到抱歉,因为我仍然在想如何让这个工作起来我还没有添加任何评论。

提前感谢任何有用的输入。

干杯 阿明

1 个答案:

答案 0 :(得分:3)

在jsch文档中没有这个内容吗?

参数是:

JSch.addIdentity(String name, byte[] prvkey, byte[] pubkey, byte[] passphrase) 

在你的情况下(未加密的PEM):

jsch.addIdentity(user, privateKeyPEM, null, null);