Yve*_*tin 14 java websphere ejb kerberos java-ee
由于经典的JNDI查找和RMI-IIOP方法调用,我的应用程序是一个独立的Swing客户端调用EJB无状态会话bean.它作为Java WebStart应用程序启动.我的目标是从获取客户端用户的身份EJBContext与getCallerPrincipal感谢的Kerberos SSO在Windows工作站,ActiveDirectory中和在Linux上运行的WebSphere服务器之间的方法.
由于信息中心文档,我已经在网络部署模式下成功配置了我的WebSphere单元以支持Kerberos身份验证.
这两个krb5.conf和krb5.keytab文件都OK,并在Linux测试kinit,klist并且wsadmin,$AdminTask validateKrbConfig解答true.
在客户端安装不只是指JAAS login.config文件,以实现与指挥系统属性.我的直觉告诉我这可能还不够.
但现在,我找不到更多信息来完成测试用例:
更新
由于没有运行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"/>
Run Code Online (Sandbox Code Playgroud)
我wsjaas_client.config是针对Oracle Java的,因此它包含:
WSKRB5Login{
com.sun.security.auth.module.Krb5LoginModule required
debug=true useTicketCache=true doNotPrompt=true;
};
Run Code Online (Sandbox Code Playgroud)
我的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
Run Code Online (Sandbox Code Playgroud)
目前,没有触发Kerberos身份验证:WAS/myserver.mydomain.com我的kerberos缓存(来自Windows或Linux工作站)中的SPN没有TGS,并且仍然匿名建立JNDI连接.
没有错误消息,没有警告,最后没有委托人.我如何诊断错误或缺乏?
更新2012/06/20
这是向前迈出的一步.在我的应用程序JNLP中运行Oracle Java,我已设置以下属性以使用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"/>
Run Code Online (Sandbox Code Playgroud)
该文件TraceSettings.properties包含
traceFileName=c:\\temp\\traces.log
ORBRas=all=enabled
SASRas=all=enabled
com.ibm.*=all=enabled
Run Code Online (Sandbox Code Playgroud)
即使在阅读了大量IBM 7安全性IBM RedBook之后,我仍然无法从客户端获得CSIv2触发Kerberos身份验证.
根据GSS-API/Kerberos v5身份验证指南,您必须在调用JNDI上下文之前对Kerberos进行身份验证.执行Kerberos配置后,您可以按如下方式配置初始上下文:
我曾经处理过让Java客户端使用Kerberos(尽管没有使用JNDI).这是我在客户端删除对JVM选项和本地配置文件的需求的方法(在客户端尝试进行身份验证之前调用此代码):
public static void initKerberosConfig()
{
System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");
System.setProperty("java.security.krb5.kdc", "host.name:88");
System.setProperty("java.security.krb5.realm", "REALM");
System.setProperty("sun.security.krb5.debug", "false");
Configuration progConfig = getProgramaticLoginConfig();
Configuration.setConfiguration(progConfig);
}
private static Configuration getProgramaticLoginConfig()
{
HashMap<String, String> options = new HashMap<String, String>();
options.put("useTicketCache", "true");
options.put("doNotPrompt", "true");
AppConfigurationEntry krb5LoginModule = new AppConfigurationEntry("com.sun.security.auth.module.Krb5LoginModule", LoginModuleControlFlag.REQUIRED, options);
final AppConfigurationEntry[] aces = new AppConfigurationEntry[]{krb5LoginModule};
Configuration progConfig = new Configuration()
{
@Override
public AppConfigurationEntry[] getAppConfigurationEntry(String arg0)
{
return aces;
}
};
return progConfig;
}
Run Code Online (Sandbox Code Playgroud)
你可能需要根据你的上下文调整这个(java.security.krb5.kdc并且java.security.krb5.realm不正确) - 但我希望它有所帮助.转向sun.security.krb5.debug true大量的伐木.
总结一下上下文:我们的部署多年来一直在生产中使用在 Linux 上运行的 IBM WebSphere,并通过在 Sun JavaSE 6 上运行的 Java WebStart(包含 IBM ORB 并配置为无需任何身份验证即可进行连接)来部署应用程序。现在我们希望通过 RMI-IIOP 启用 Kerberos 身份验证和单点登录,从 WebSphere 6 开始就支持(我认为)。
现在是一些答案。
从 WebSphere 7 开始,引入了一个新概念来在每个服务器的基础上配置安全方面:安全域。理论上,安全域中任何未更改的选项都会继承全局安全部分。
在测试 Kerberos 设置时,我们为测试服务器创建了一个专用的安全域,以避免单元中运行的其他服务器出现问题。
但是,即使在全局安全中启用了 Kerberos,配置有自己的安全域的服务器也不会继承/启用它。
一旦我们使用默认的全局安全性(其中 Kerberos 选项可见并启用)运行测试服务器,Kerberos 身份验证就开始与IBM JavaSE 6一起使用,该脚本通过cmd bat 脚本执行,并具有常用的 ClassPath 和文档中声明的所有属性。
请注意:JNDIContext.SECURITY_AUTHENTICATION选项从未设置。反编译后,IBM ORB 的唯一可用值是、和none,但尚未实现。simplestrongstrong
另一点:根据生成的日志,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 部分:
相同的原始 JNLP,没有任何安全性,也没有 Kerberos 设置,可以与 Oracle JavaSE 6 和 IBM Java 6 完美配合
启用 WebSphere 安全性并在 JNLP 中使用 Kerberos(并且仅更改集)后,在 IBM Java 6 上运行的 IBM ORB 抱怨NoClassDefFoundErrorClassPath 中(仍然/始终)可用的 ffdc 日志管理器实现。这听起来确实像是代码与 Java WebStart 受保护的类加载器层次结构不兼容。
借助 Kerberos JNLP,在 Oracle JavaSE 6 上运行的 IBM ORB 似乎只是忽略安全设置并像往常一样进行匿名连接。
因此,第一步现已开始实施:IBM Java 6 从命令行启动,但为了实现我们的目标,调查尚未结束:Java WebStart 上下文中的 Kerberos 与 Oracle JavaSE 6。