当前位置: 首页 > 面试题库 >

如何在WebSphere上为远程EJB调用启用Kerberos身份验证?

松波
2023-03-14
问题内容

我的应用程序是一个独立的Swing客户端,它通过经典的JNDI查找和RMI-IIOP方法调用来调用EJB无状态会话bean。它作为Java
WebStart应用程序启动。我的目标是通过Windows工作站,ActiveDirectory和Linux服务器上运行的WebSphere服务器之间的Kerberos
SSO ,EJBContext使用getCallerPrincipal方法检索客户端用户的身份。

由于有了信息中心文档,我已经在网络部署模式下成功配置了我的WebSphere单元以支持Kerberos认证。

这两个krb5.confkrb5.keytab文件都OK,并在Linux测试kinitklist并且wsadmin$AdminTask validateKrbConfig解答true

在客户端安装不只是指JAAS
login.config文件,以实现与指挥系统属性。我的直觉告诉我,这可能还不够。

但是现在,我找不到更多信息来完成测试用例的确定:

  • 如何设置JNDI初始上下文环境以触发Kerberos协商?
  • 服务器端是否还有其他要求,例如用角色保护我的EJB(例如,JBoss不需要它)?

更新资料

由于未使用运行JavaEE客户端容器./launchClient,因此我在JNLP中设置了要读取的必需属性sas.client.props和JAAS登录配置:

<property name="java.security.auth.login.config" value="C:\temp\wsjaas_client.config"/>
<property name="com.ibm.CORBA.ConfigURL" value="C:\temp\sas.client.props"/>

wsjaas_client.config是针对Oracle Java的,因此它包含:

WSKRB5Login{
    com.sun.security.auth.module.Krb5LoginModule required
       debug=true useTicketCache=true doNotPrompt=true;
};

我的sas.client.props包含:

com.ibm.CORBA.securityEnabled=true
com.ibm.CORBA.authenticationTarget=KRB5
com.ibm.CORBA.loginSource=krb5Ccache
com.ibm.CORBA.loginUserid=
com.ibm.CORBA.loginPassword=
com.ibm.CORBA.krb5CcacheFile=
com.ibm.CORBA.krb5ConfigFile=C:\\temp\\krb5.conf

目前,没有触发Kerberos身份验证:WAS/myserver.mydomain.com我的kerberos高速缓存中(从Windows或Linux工作站)没有SPN的TGS,并且仍匿名建立JNDI连接。

没有错误消息,没有警告,最后也没有主体。我如何诊断出什么问题或不足?

更新2012/06/20

这是一些前进的步骤。在运行Oracle Java的应用程序JNLP中,我设置了以下属性以使用IBM ORB并启用完整的跟踪和调试信息:

<property name="org.omg.CORBA.ORBSingletonClass" value="com.ibm.rmi.corba.ORBSingleton"/>
<property name="org.omg.CORBA.ORBClass" value="com.ibm.CORBA.iiop.ORB"/>
<property name="traceSettingsFile" value="C:\temp\TraceSettings.properties"/>

该文件TraceSettings.properties包含

traceFileName=c:\\temp\\traces.log
ORBRas=all=enabled
SASRas=all=enabled
com.ibm.*=all=enabled

即使阅读了WebSphere 7 Security IBM
RedBook的大部分内容,我仍然无法从客户端获得CSIv2触发Kerberos认证。


问题答案:

总结一下上下文:多年来,我们的部署已经投入生产,而IBM WebSphere在Linux上运行,而应用程序的部署归功于Java WebStart在Sun
JavaSE 6上运行,并且包含IBM ORB,并且配置为无需任何身份验证即可连接。现在,我们想启用RMI-
IIOP上的Kerberos身份验证和单点登录,这是从WebSphere 6开始支持的(我认为)。

现在是答案。

从WebSphere 7开始,引入了一个新概念来基于每台服务器配置安全性方面: security domain
。从理论上讲,在安全域中未更改的任何选项都将从 全局安全性 部分继承。

在测试Kerberos设置时,我们为测试服务器创建了专用的安全域,以避免单元中运行的其他服务器出现问题。

但是, 即使在 全局安全性中 启用了Kerberos ,也不会为配置了自己的 安全域 的服务器继承/启用它。

只要我们使用默认的 全局安全性
运行测试服务器,即可看到并启用Kerberos选项,那么Kerberos身份验证便开始与从具有常规ClassPath和文档中声明的所有属性的 cmd
bat脚本* 执行的 IBM JavaSE 6 一起使用。
*

注意:Context.SECURITY_AUTHENTICATION永远不会设置JNDI 选项。反编译后,对IBM
ORB唯一可用的值nonesimple并且strong但是strong还没有实现呢。

另一点:根据生成的日志,IBM
ORB无法使用file:/C:/temp/sas.client.config作为的值com.ibm.CORBA.ConfigURL。它 必须
是URI,而不是文件路径。我们甚至无法通过DNS查找来解析C主机名!阿夫
所有文档示例均基于Unix,file:/path/to/sas.client.config因此在从HTTP服务器传送该文件之前,我们进行了多次试验。

现在是部署的 Java WebStart部分

  • 没有任何安全性且没有Kerberos设置的相同原始JNLP与Oracle JavaSE 6和IBM Java 6完美结合

  • 启用了WebSphere安全性并且在JNLP中启用了Kerberos(并且只有该更改集),在IBM Java 6上运行的IBM ORB抱怨NoClassDefFoundErrorffdc日志管理器实现(仍然/始终)在ClassPath中可用。听起来确实像与Java WebStart安全的ClassLoader层次结构不兼容。

  • 使用Kerberos JNLP,在Oracle JavaSE 6上运行的IBM ORB似乎只是忽略安全设置,并照常进行匿名连接。

因此,第一步正在工作:IBM Java 6从命令行启动,但调查尚未完成,无法实现我们的目标:Java WebStart上下文中具有Oracle JavaSE
6的Kerberos。



 类似资料:
  • 我正在运行一个squid代理服务器(CentOS 5),我正试图通过我们的AD服务器(Windows server 2008)使用kerberos。 我遵循了以下说明:http://wiki.squid-cache.org/ConfigExamples/Authenticate/Kerberos 为服务器设置一个keytab,这一切都运行良好。 当我尝试从客户端PC使用代理时,会出现问题,它会立即

  • 我正在使用spring security 5和spring boot 2.0.0 我有一个测试配置文件。 我有springBootApplication文件。 安全日志在下面

  • 15/02/06 15:17:12警告IPC.Client:连接到服务器时遇到异常:javax.security.sasl.saslexception:GSS initiate失败[由GSSException:未提供有效凭据(机制级别:找不到任何Kerberos tgt导致)]LS:本地异常失败:java.io.ioException:javax.security.sasl.saslexcepti

  • 我正在尝试从瘦客户端对WebSphere Liberty20.0.0.10(JDK 8)进行远程EJB 3调用。客户端不在EJB容器中运行。我谷歌了这个页面,并尝试按照说明进行操作:https://www.ibm.com/support/knowledgecenter/SSD28V_liberty/com.ibm.websphere.wlp.core.doc/ae/twlp_ejb_remote.

  • 我正在开发一个Web应用程序,它是rest客户端并使用rest服务(API)来执行任何操作。我集成了apache shiro以使用工作正常的jdbc领域执行身份验证。 现在,我正在寻找一种使用apacheDS LDAP执行身份验证的解决方案。我计划使用kerberos身份验证,但我没有找到任何有用的文章或示例来使用apache shiro实现kerberos身份验证。 我发现apache shir

  • 使用这个例子,我的连接几乎可以工作 http://blogs.nologin.es/rickyepoderi/index.php?/archives/105-oracle-driver-and-kerberos.html 我使用的是Java7,但使用另一个没有问题。有没有一种方法可以用jvm正确读取票证(参见jdk中的kinit不要创建正确的票证)