通过外部Java应用程序访问密钥库不会返回每个密钥库

2020-09-10 10:48发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)大家晚上好 我遇到有关SAP密...

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

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


大家晚上好

我遇到有关SAP密钥库和JNDI的问题。

首先,我们有一个与sap("独立")无关的Java应用程序,该应用程序试图访问SAP密钥库。

我们通过使用JNDI来实现

 jndiContext =新的InitialContext(属性); 

其属性如下:

 java.naming.provider.url = <主机名>:,java.naming.factory.initial = com.sap.engine.services.jndi.InitialContextFactoryImpl,java.naming.security.principal = <用户名>  ,java.naming.factory.url.pkgs = com.sap.engine.services,java.naming.security.credentials = <密码>,HTTPPORT = 50000
 

并获取KeystoreManager:

 ksManager =(KeystoreManager)jndiContext.lookup(" keystore"); 

然后,我们尝试列出以下所有密钥库:

字符串keystoreAliases [] = ksManager.getKeystoreViewAliases(); 

这将返回一些密钥库,但不是系统上的每个密钥库。

如果我随后尝试明确访问未列出的密钥库之一,则会出现以下错误。

无法检索
 别名的密钥库:java.rmi.RemoteException:com.sap.engine.services.keystore.exceptions.BaseRemoteException:
 远程通话失败
 。
 。
 。

 造成原因:
 java.security.KeyStoreException:用户来宾没有权限
 com.sap.engine.services.keystore.impl.security.KeystoreViewPermission与
 参数名称keystore-view.view.CTCView
 动作IS_VIEW_EXISTS
 实例全部
 

然后我尝试寻找一种解决方案,该解决方案是如何在我在initialContext属性中指定的用户访问密钥库的,但是找不到任何东西。

我偶然发现的是以下代码片段:

 managerPriviliged = com.sap.aii.af.service.resource.SAPSecurityResources.getInstance()。getKeyStoreManager(com.sap.aii.security.lib.PermissionMode.SYSTEM_LEVEL); 

应该可以为我提供具有正确用户权限的keystoremanager。

问题是我找不到使用JNDI进行这项工作的方法!

是否可以执行此操作?或者您是否有人对如何以访客用户身份访问其他密钥库有想法?

2条回答
宇峰Kouji
2020-09-10 11:37

很抱歉回到现在。

多亏了您的教程,我终于找到了我的错误。

我意识到,成功登录后不久,我的会话/用户就注销了,甚至在尝试访问任何密钥库之前。

因此,SAP系统似乎已默认返回给来宾用户。

我在代码中找不到任何显式的注销机制(应该完成所有操作后,连接已关闭)。

因此,通过反复试验,我发现,除了连接之外,还需要保持InitialContext Object在客户端保持打开状态。 否则,您的用户将立即注销。

在更改代码以在过程结束时关闭InitialContext以及它给我的连接后,一切正常!

一周热门 更多>