SAP CPI:使用公钥身份验证通过Groovy进行SFTP连接

2020-08-14 04:43发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中) 已解决的问题:通过groovy...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


已解决的问题:通过groovy(JSch)在SFTP连接中访问和使用私钥(id_rsa)

已改造的问题::通过常规脚本而不使用SFTP适配器连接到SFTP服务器时,如何使用公钥身份验证。

业务案例::我的客户有多个带有多个SFTP服务器的第三方系统。 我需要开发一个中央CPI接口,该接口将充当中间人,以将文件从任何来源传输到任何目的地。

解决方案设计:我的设计如下

1。 维护一个配置文件,其中包含源->目标和计划组合的各种列表。

2。 接口将使用SFTP适配器从默认的SFTP服务器读取此配置文件,获取源和目标组合,并开始一个接一个地处理它。

3。 现在,一旦有了源和目标,就需要在iFlow的中间进行另一个SFTP调用。 可以在脚本中轻松使用JSch类来完成此操作。 https: //blogs.sap.com/2018/04/17/access-file-from-sftp-server-in-middle-of-an-iflow/-感谢Shashank Kesarwani

4。 但是,如果使用公共密钥身份验证,如何从密钥库中获取公共密钥并将其添加到JSch隧道中。

到目前为止的进展:

1。 我设法获得了KeystoreService

com.sap.it.api.keystore.KeystoreService ks = com.sap.it.api.ITApiFactory.getApi(com.sap.it.api.keystore.KeystoreService.class,空)

2。 当我使用getKey方法时,

def privateKey = ks.getKey(" id_rsa");

我得到的原始X.509格式的密钥是这样的:(这就是我想的那样!)

RSA私钥(2048位):

模量:

公共指数:10001

私有指数:

primeP:

primeQ:

primeExponentP:

primeExponentQ:

crt_coefficient:

3。 但是,如果必须使用JSch类通过Groovy使用公共密钥身份验证,则需要添加密钥 IN OPENSSH FORMAT 作为身份

jsch.addIdentity(" id_rsa", private_key.getBytes(),public_key.getBytes(),emptyPassPhrase);

所需格式:

-RSA私钥的开始-

-RSA私钥的结尾-

问题:如何在脚本本身中将 原始X.509格式的私钥转换为OPENSSH格式?

6条回答
SAP小菜
2020-08-14 05:05

面对新问题。 将私钥标识添加到JSch连接时,我还需要添加公钥。 因此,我目前正在尝试从密钥对中获取公钥和私钥,并将它们添加到JSch连接中。

未经测试的代码:

1。 获取密钥对并从中获取公钥和私钥

//获取密钥对
 def keyPair = ks.getKeyPair(" id_rsa");

//** ----------------------------------------------  ------------------------------------------- **
//获取公钥
 publicKey = keyPair.getPublic();
 getEncoded = publicKey.getEncoded()
 publicKeyPem = Base64.getEncoder()。encode(getEncoded);
 publicKeyPemStr =新的String(publicKeyPem);
 publicKeyPemStrFinal =" ----- BEGIN RSA公钥-----";
 int列= 0;
 for(int n = 0; n 
 

2。 将两个密钥都添加到JSch会话中

 jsch.addIdentity(" id_rsa",privateKeyPemStrFinal.getBytes(),publicKeyPemStrFinal.getBytes(),emptyPassPhrase)

一周热门 更多>