我的应用程序是一个独立的Swing客户端调用EJB无状态会话bean得益于经典的JNDI查找和RMI-IIOP方法调用。 它开始作为一个Java应用程序Webstart的。 我的目标是从客户端检索用户的身份EJBContext
使用getCallerPrincipal
方法感谢的Kerberos SSO在Windows工作站,ActiveDirectory中和在Linux上运行的WebSphere服务器之间。
我已经成功地配置网络部署模式我WebSphere单元,以支持Kerberos身份验证多亏了信息中心的文档 。
双方krb5.conf
和krb5.keytab
文件确定,并与在Linux测试kinit
, klist
和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身份验证被触发:没有TGS的SPN WAS/myserver.mydomain.com
在我的Kerberos缓存(无论是从Windows或Linux工作站)和JNDI连接仍然是匿名成立。
没有错误消息,没有警告,终无本金。 如何诊断出了什么问题或缺乏?
更新2012/06/20
这里有一些步骤前进。 在与甲骨文的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安全性IBM红皮书我还轮不到从客户端CSIv2的触发Kerberos身份验证。
按照GSS-API /使用Kerberos v5认证指导你必须进行Kerberos验证,使您的调用JNDI上下文之前。 一旦你已经完成了Kerberos配置在配置方面INTIAL如下:
- 当创建初始上下文,设置Context.SECURITY_AUTHENTICATION(在API参考文档)环境属性字符串“GSSAPI”。
我处理过得到一个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;
}
您可能需要调整这个为您的上下文( java.security.krb5.kdc
和java.security.krb5.realm
不会是正确的) -但我希望它能帮助。 打开sun.security.krb5.debug
true
用于记录的大量的数量。
既然你没有具体的步骤中提到你跟着,你配置了sas.client.props作为客户端安装链接您提供?
您可以检查红皮书实现的Kerberos的WebSphere Application Server环境 ,了解如何进行此配置,以及为应用程序客户端剩余的配置实例。
13.5节(13.5配置Java EE应用程序客户端)给出的例子为设置你的胖客户端运行时,包括sas.client.props文件。
综上所述背景:我们的部署是在生产多年以来与IBM的WebSphere运行在Linux以及Sun的JavaSE 6运行的应用程序部署由于Java的Webstart的与IBM ORB包括和配置没有任何身份验证连接。 现在,我们要启用Kerberos认证和单点登录通过RMI-IIOP,从WebSphere 6(我认为)的支持。
这是我们目前的答案件。
由于WebSphere 7,一个新的概念已被引入到在每个服务器的基础上配置安全问题: 安全域 。 理论上还没有一个安全域被更改的任何选项从全球安全部分继承。
当测试Kerberos设置,我们已经创建了一个专门的安全域对我们的测试服务器,以避免在单元中运行其他服务器的麻烦。
但即使是Kerberos的全球安全启用,它是不能继承/与它自己的安全域配置的服务器启用。
只要我们运行与默认的全局安全 Kerberos的选项是可见和启用测试服务器,然后Kerberos身份验证已开始与IBM的JavaSE 6从通常的类路径CMD脚本蝙蝠在文档中声明的所有属性执行工作。
要注意的是:JNDI Context.SECURITY_AUTHENTICATION
选项从未设置。 反编译后,对IBM ORB唯一可用的值是none
, simple
和strong
,但strong
有没有实现呢。
另一点:根据生成的日志,IBM ORB不能一起工作file:/C:/temp/sas.client.config
作为值com.ibm.CORBA.ConfigURL
。 它必须是一个URI,而不是文件路径。 我们甚至得到了DNS查找故障解决C
主机名! ARFF。 基于与所有文件的例子是Unix的file:/path/to/sas.client.config
所以我们从一个HTTP服务器提供该文件之前做了很多试验。
现在部署了Java Webstart的一部分 :
没有任何安全和无Kerberos设置相同的原始JNLP完美的作品有两个Oracle的JavaSE 6和IBM的Java 6
启用WebSphere安全性和Kerberos在JNLP(并且只有更改集),IBM ORB上IBM的Java 6的运行环境与抱怨NoClassDefFoundError
有关可用FFDC日志管理器实现,它是(仍然/总是)在类路径中。 听起来真是与Java WebStart安全类加载器层次结构中的代码不兼容。
使用Kerberos JNLP,IBM ORB在Oracle的JavaSE 6运行似乎简单地忽略安全设置和匿名连接如常。
所以第一步是现在的工作:IBM的Java 6的命令行启动,但调查还没有结束,达到我们的目标:Kerberos的与Oracle的JavaSE 6中的Java Webstart的背景。