如何启用在WebSphere远程EJB调用Kerberos身份验证?(How to enable K

2019-06-24 07:10发布

我的应用程序是一个独立的Swing客户端调用EJB无状态会话bean得益于经典的JNDI查找和RMI-IIOP方法调用。 它开始作为一个Java应用程序Webstart的。 我的目标是从客户端检索用户的身份EJBContext使用getCallerPrincipal方法感谢的Kerberos SSO在Windows工作站,ActiveDirectory中和在Linux上运行的WebSphere服务器之间。

我已经成功地配置网络部署模式我WebSphere单元,以支持Kerberos身份验证多亏了信息中心的文档 。

双方krb5.confkrb5.keytab文件确定,并与在Linux测试kinitklistwsadmin$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身份验证。

Answer 1:

按照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.kdcjava.security.krb5.realm不会是正确的) -但我希望它能帮助。 打开sun.security.krb5.debug true用于记录的大量的数量。



Answer 2:

既然你没有具体的步骤中提到你跟着,你配置了sas.client.props作为客户端安装链接您提供?

您可以检查红皮书实现的Kerberos的WebSphere Application Server环境 ,了解如何进行此配置,以及为应用程序客户端剩余的配置实例。

13.5节(13.5配置Java EE应用程序客户端)给出的例子为设置你的胖客户端运行时,包括sas.client.props文件。



Answer 3:

综上所述背景:我们的部署是在生产多年以来与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唯一可用的值是nonesimplestrong ,但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的背景。



文章来源: How to enable Kerberos authentication for remote EJB call on WebSphere?