2017-02-14 40 views
0

我试图从我创建的.keystore文件获取私钥。使用.keystore文件中的私有RSA密钥与Jsch

到目前为止,这是工作:

 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的)我得到以下输出:

----- BEGIN RSA私钥--- -

私钥这里

----- END 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); 

有没有人经历这件事?

对不起,缺少评论,因为我仍然在弄清楚如何使这个工作,我没有添加任何评论呢。

在此先感谢您提供任何有用的信息。

干杯 阿明

回答

2

是在jsch文档中没有谈到这个?

的参数是:

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

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

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

嗨Omikron。非常感谢您的反馈。我只是对可以使用的字符串/字节pubkey/passphrase params感到困惑。由于某些原因,我很困惑。在开始时,我总是收到一些奇怪的错误,可能是我把错误的用户当作字符串。无论如何,非常感谢您的反馈。有了这一切,现在正在工作。干杯 – ArBei