`
雨辰RainTime
  • 浏览: 113653 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

CAS采用Spnego认证方式通过Kerberos与AD域整合

    博客分类:
  • cas
阅读更多

一:前言

这次主要是介绍如何通过配置,使已经登录到域的域用户,在访问CAS_Client的时候,不需要再次去CAS服务端认证的配置文档。是只针对已经掌握如何配置Windows_ADCAS_SSO的相关人员。配置Windows_ADCAS_SSO的方法请参考其它手册,本文不再讲述如何配置Windows_ADCAS_SSO

本人所讲述的配置都是在Windows_ADCAS_SSO已经配置完成的基础上。

       经过测试,无配置经历的开发人员通过此文档都可顺利配置成功。

 

       因时间问题,关于环境的网络拓扑结构就没有画,在这简单描述一下具体的环境:

域控制器一台,CAS服务器一台,客户机一台,如果有条件,可以单独设立一台业务系统主机(CAS_Client),所有机器均加入域控制器中。

 

具体效果如下:

 

1:用户使用客户机登录到域中,首次访问业务系统(Cas_Client),无需认证,直接进入业务系统,身份为登录域的账号。

 

2:用户使用客户机登录到本机,首次访问业务系统(Cas_Client),转向CAS的认证界面(默认的认证方式为表单认证),输入账号口令后进入业务系统。

 

从这个效果中就可以看出来,CASAD集成后,用户只需要认证一次。

CAS版本:3.4.2

 

二:配置域信息

1:域控制器版本

 

本文所提到的AD域环境为WINDOWS2003版本的域控制器

2:Windows AD中创建用户

A、启动域用户管理:开始管理工具Active Director用户和计算机。

B、创建用户:Users右键新建用户。

C、添入要创建的用户信息,比如是“RainTime”姓:RainTime;姓名:RainTime;用户登录名:HTTP/RainTime;用户登录名(Windows 2000以前版本):RainTime”

D、输入密码,并选择密码永不过期,比如是:111111

E、点击确定,完成用户创建。

 

三:配置CAS服务端

1:修改login-webflow.xml配置文件

Alogin-webflow.xmlCAS目录下的WEB-INF文件夹下。

B、在此配置文件中加入以下两个标签

 

<action-state id="startAuthenticate">

  <action bean="negociateSpnego" />

  <transition on="success" to="spnego" />

</action-state>

 

<action-state id="spnego">

  <action bean="spnego" />

  <transition on="success" to="sendTicketGrantingTicket" />

  <transition on="error" to="viewLoginForm" />

</action-state>

 

 

 

需要注意的是:如果你使用的是spring-webflow-2.0.xsd,那么应该将<action bean="" />替换为<evaluate expression="" />

 

 C、修改login-webflow.xml<decision-state id="gatewayRequestCheck"><decision-state id="renewRequestCheck">两个标签,将两个标签属性中的“viewLoginForm”修改为“startAuthenticate”

 

2:修改CAScas-servlet.xml配置文件

Acas-servlet.xmlCAS目录下的WEB-INF文件夹下。

B、在cas-servlet.xml文件加入如下图所示的两个标签:

<bean id="negociateSpnego" class="org.jasig.cas.support.spnego.web.flow.SpnegoNegociateCredentialsAction" />

 

<bean id="spnego" class="org.jasig.cas.support.spnego.web.flow.SpnegoCredentialsAction">

                        <property name="centralAuthenticationService" ref="centralAuthenticationService"/>

</bean>

  

 3:修改CASdeployConfigContextxml配置文件

AdeployerConfigContext.xmlCAS目录下的WEB-INF文件夹下。

B、修改该文件bean标签“authenticationManager”的两个属性“credentialsToPrincipalResolvers”“authenticationHandlers”

首先在“credentialsToPrincipalResolvers”属性的list标签中加入一个bean标签:

<bean class="org.jasig.cas.support.spnego.authentication.principal.SpnegoCredentialsToPrincipalResolver" />

 然后在“authenticationHandlers”属性list标签中也加入一个bean标签:

<bean class="org.jasig.cas.support.spnego.authentication.handler.support.JCIFSSpnegoAuthenticationHandler">

                        <property name="authentication">

                          <bean class="jcifs.spnego.Authentication" />

                        </property>

                        <property name="principalWithDomainName" value="false" />

                        <property name="NTLMallowed" value="true"/>

      </bean>

 

c、退出authenticationManager在外层加入一个标签bean:"jcifsConfig "

<bean name="jcifsConfig" class="org.jasig.cas.support.spnego.authentication.handler.support.JCIFSConfig">

  <property name="jcifsServicePrincipal" value="HTTP/your.server.name.here@YOUR.REALM.HERE" />

  <property name="jcifsServicePassword" value="the.service.password.here" />

  <property name="kerberosDebug" value="false" />

  <property name="kerberosRealm" value="YOUR.REALM.HERE" />

  <property name="kerberosKdc" value="THE.KDC.IP.HERE" />

  <property name="loginConf" value="/path/to/WEB-INF/login.conf" />

</bean>

 

 

 jcifsServicePrincipal登录域控制器的完整登录名

 jcifsServicePassword:登录域控制器的密码

  kerberosDebug:是否输出DEBUG信息

 kerberosRealm:域名

 kerberosKdc:Kdc地址(域控制器地址)

 loginconf:login.conf文件的绝对路径

 

  4:创建login.conf配置文件 

jcifs.spnego.initiate {

   com.sun.security.auth.module.Krb5LoginModule required storeKey=true;

};

jcifs.spnego.accept {

   com.sun.security.auth.module.Krb5LoginModule required storeKey=true;

};

 

5:添加所需要的JAR 

Acas-server-3.4.2-release\cas-server-3.4.2\modules目录的cas-server-support-spnego-3.4.2.jar复制到cas\WEB-INF\lib

B、还需要有两个外部包的支持,“jcifs-1.1.11.jarjcifs-ext-0.9.4.jar”,将这两个jar包也拷贝到cas\WEB-INF\lib

 

四:配置客户机

A   CAS服务地址配置成可信任站点:“Internet选项安全本地Internet站点高级输入CAS服务地址,如http://cas.test.com,点击确定即可。

 

五:测试

使用客户机登录到域中,账号为"RainTime",密码是“111111”,然后访问业务系统,如果无需认证直接进入业务系统,表明SPNEGO认证已经通过,否则请重新检查整个配置是否无误。

 

 

下一步的工作是配置CAS的X509证书认证和基于CAS认证的FreeRadius认证

 

写这篇文章浪费了一上午时间,不知是这个在线编辑器的问题还是我的浏览器问题,在插入代码后,就不能修改,否则格式就乱了套了,没办法,凑合着看吧。 

 

 

注:罪过罪过,官方提供的资料是在Linux下部署成功的,而CAS的一些配置也是针对linux系统使用的,如果CAS部署在WINDOWS下全完可以不这么麻烦

6
0
分享到:
评论
23 楼 nishiufo 2012-08-02  
张小宇 写道
我看了org.jasig.cas.support.spnego.web.flow.SpnegoCrede
ntialsAction中的源码,应该是因为这一串乱码导致后边的认证无法进行,这一串乱码是从什么地方取到的呢?应该怎么处理一下呢?请指教一二~多谢

       我碰到了和你一样的问题,如何解决的呢?
22 楼 张小宇 2011-10-27  
我看了org.jasig.cas.support.spnego.web.flow.SpnegoCrede
ntialsAction中的源码,应该是因为这一串乱码导致后边的认证无法进行,这一串乱码是从什么地方取到的呢?应该怎么处理一下呢?请指教一二~多谢
21 楼 张小宇 2011-10-27  
对了  还有 我这边找到的token是这些东西:
2011-10-27 18:37:02,484 DEBUG [org.jasig.cas.support.spnego.web.flow.SpnegoCrede
ntialsAction] - <SPNEGO Authorization header found with 1672 bytes>
2011-10-27 18:37:02,484 DEBUG [org.jasig.cas.support.spnego.web.flow.SpnegoCrede
ntialsAction] - <Obtained token: `??+爞??袪$0"  *咹傳      *咹嗺

+?
????       *咹嗺


额。。。复制不上来,就是很长的一串乱码,不知道是从哪里取到的,求解答。
20 楼 张小宇 2011-10-27  
您好!按照您的步骤配置好了,但是tomcat后台报错 具体错误如下:
>>> KdcAccessibility: add 10.133.96.36
jcifs.spnego.AuthenticationException: Error performing Kerberos authentication:
java.lang.reflect.InvocationTargetException
        at jcifs.spnego.Authentication.processKerberos(Authentication.java:447)
        at jcifs.spnego.Authentication.processSpnego(Authentication.java:346)
        at jcifs.spnego.Authentication.process(Authentication.java:235)
        at org.jasig.cas.support.spnego.authentication.handler.support.JCIFSSpne
goAuthenticationHandler.doAuthentication(JCIFSSpnegoAuthenticationHandler.java:5
7)
        at org.jasig.cas.authentication.handler.support.AbstractPreAndPostProces
singAuthenticationHandler.authenticate_aroundBody2(AbstractPreAndPostProcessingA
uthenticationHandler.java:72)
        at org.jasig.cas.authentication.handler.support.AbstractPreAndPostProces
singAuthenticationHandler.authenticate_aroundBody3$advice(AbstractPreAndPostProc
essingAuthenticationHandler.java:44)
        at org.jasig.cas.authentication.handler.support.AbstractPreAndPostProces
singAuthenticationHandler.authenticate(AbstractPreAndPostProcessingAuthenticatio
nHandler.java:1)
        at org.jasig.cas.authentication.AuthenticationManagerImpl.authenticateAn
dObtainPrincipal(AuthenticationManagerImpl.java:78)
        at org.jasig.cas.authentication.AbstractAuthenticationManager.authentica
te_aroundBody0(AbstractAuthenticationManager.java:42)
        at org.jasig.cas.authentication.AbstractAuthenticationManager.authentica
te_aroundBody1$advice(AbstractAuthenticationManager.java:44)
        at org.jasig.cas.authentication.AbstractAuthenticationManager.authentica
te(AbstractAuthenticationManager.java:1)
        at org.jasig.cas.CentralAuthenticationServiceImpl.createTicketGrantingTi
cket_aroundBody10(CentralAuthenticationServiceImpl.java:406)
        at org.jasig.cas.CentralAuthenticationServiceImpl.createTicketGrantingTi
cket_aroundBody11$advice(CentralAuthenticationServiceImpl.java:44)
        at org.jasig.cas.CentralAuthenticationServiceImpl.createTicketGrantingTi
cket(CentralAuthenticationServiceImpl.java:1)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflecti
on(AopUtils.java:307)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJo
inpoint(ReflectiveMethodInvocation.java:183)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
ReflectiveMethodInvocation.java:150)
        at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.p
roceed(MethodInvocationProceedingJoinPoint.java:80)
        at org.perf4j.aop.AbstractTimingAspect.doPerfLogging(AbstractTimingAspec
t.java:71)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMet
hodWithGivenArgs(AbstractAspectJAdvice.java:622)
        at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMet
hod(AbstractAspectJAdvice.java:611)
        at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAro
undAdvice.java:65)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
ReflectiveMethodInvocation.java:161)
        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invok
e(ExposeInvocationInterceptor.java:89)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
ReflectiveMethodInvocation.java:172)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynami
cAopProxy.java:202)
        at $Proxy13.createTicketGrantingTicket(Unknown Source)
        at org.jasig.cas.web.flow.AbstractNonInteractiveCredentialsAction.doExec
ute(AbstractNonInteractiveCredentialsAction.java:84)
        at org.springframework.webflow.action.AbstractAction.execute(AbstractAct
ion.java:188)
        at org.springframework.webflow.execution.ActionExecutor.execute(ActionEx
ecutor.java:51)
        at org.springframework.webflow.action.EvaluateAction.doExecute(EvaluateA
ction.java:79)
        at org.springframework.webflow.action.AbstractAction.execute(AbstractAct
ion.java:188)
        at org.springframework.webflow.execution.AnnotatedAction.execute(Annotat
edAction.java:145)
        at org.springframework.webflow.execution.ActionExecutor.execute(ActionEx
ecutor.java:51)
        at org.springframework.webflow.engine.ActionState.doEnter(ActionState.ja
va:101)
        at org.springframework.webflow.engine.State.enter(State.java:194)
        at org.springframework.webflow.engine.Transition.execute(Transition.java
:227)
        at org.springframework.webflow.engine.impl.FlowExecutionImpl.execute(Flo
wExecutionImpl.java:391)
        at org.springframework.webflow.engine.impl.RequestControlContextImpl.exe
cute(RequestControlContextImpl.java:214)
        at org.springframework.webflow.engine.TransitionableState.handleEvent(Tr
ansitionableState.java:119)
        at org.springframework.webflow.engine.Flow.handleEvent(Flow.java:555)
        at org.springframework.webflow.engine.impl.FlowExecutionImpl.handleEvent
(FlowExecutionImpl.java:386)
        at org.springframework.webflow.engine.impl.RequestControlContextImpl.han
dleEvent(RequestControlContextImpl.java:210)
        at org.springframework.webflow.engine.ActionState.doEnter(ActionState.ja
va:105)
        at org.springframework.webflow.engine.State.enter(State.java:194)
        at org.springframework.webflow.engine.Transition.execute(Transition.java
:227)
        at org.springframework.webflow.engine.DecisionState.doEnter(DecisionStat
e.java:51)
        at org.springframework.webflow.engine.State.enter(State.java:194)
        at org.springframework.webflow.engine.Transition.execute(Transition.java
:227)
        at org.springframework.webflow.engine.DecisionState.doEnter(DecisionStat
e.java:51)
        at org.springframework.webflow.engine.State.enter(State.java:194)
        at org.springframework.webflow.engine.Flow.start(Flow.java:535)
        at org.springframework.webflow.engine.impl.FlowExecutionImpl.start(FlowE
xecutionImpl.java:364)
        at org.springframework.webflow.engine.impl.FlowExecutionImpl.start(FlowE
xecutionImpl.java:222)
        at org.springframework.webflow.executor.FlowExecutorImpl.launchExecution
(FlowExecutorImpl.java:140)
        at org.springframework.webflow.mvc.servlet.FlowHandlerAdapter.handle(Flo
wHandlerAdapter.java:193)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(Dispatch
erServlet.java:771)
        at org.springframework.web.servlet.DispatcherServlet.doService(Dispatche
rServlet.java:716)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(Frame
workServlet.java:647)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServl
et.java:552)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
        at org.jasig.cas.web.init.SafeDispatcherServlet.service_aroundBody2(Safe
DispatcherServlet.java:115)
        at org.jasig.cas.web.init.SafeDispatcherServlet.service_aroundBody3$advi
ce(SafeDispatcherServlet.java:44)
        at org.jasig.cas.web.init.SafeDispatcherServlet.service(SafeDispatcherSe
rvlet.java:1)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:304)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:210)
        at com.github.inspektr.common.web.ClientInfoThreadLocalFilter.doFilter(C
lientInfoThreadLocalFilter.java:46)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:224)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:175)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authentica
torBase.java:472)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:164)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:100)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:
929)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
a:405)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:279)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(
AbstractProtocol.java:515)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoin
t.java:302)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExec
utor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
.java:908)
        at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at jcifs.spnego.Authentication.processKerberos(Authentication.java:426)
        ... 91 more
Caused by: javax.security.auth.login.LoginException: Receive timed out
        at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Kr
b5LoginModule.java:700)
        at com.sun.security.auth.module.Krb5LoginModule.login(Krb5LoginModule.ja
va:542)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at javax.security.auth.login.LoginContext.invoke(LoginContext.java:769)
        at javax.security.auth.login.LoginContext.access$000(LoginContext.java:1
86)
        at javax.security.auth.login.LoginContext$4.run(LoginContext.java:683)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:6
80)
        at javax.security.auth.login.LoginContext.login(LoginContext.java:579)
        ... 96 more
Caused by: java.net.SocketTimeoutException: Receive timed out
        at java.net.PlainDatagramSocketImpl.receive0(Native Method)
        at java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java
:145)
        at java.net.DatagramSocket.receive(DatagramSocket.java:725)
        at sun.security.krb5.internal.UDPClient.receive(UDPClient.java:77)
        at sun.security.krb5.KrbKdcReq$KdcCommunication.run(KrbKdcReq.java:352)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.security.krb5.KrbKdcReq.send(KrbKdcReq.java:266)
        at sun.security.krb5.KrbKdcReq.send(KrbKdcReq.java:174)
        at sun.security.krb5.KrbKdcReq.send(KrbKdcReq.java:147)
        at sun.security.krb5.KrbAsReq.send(KrbAsReq.java:433)
        at sun.security.krb5.Credentials.sendASRequest(Credentials.java:400)
        at sun.security.krb5.Credentials.acquireTGT(Credentials.java:350)
        at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Kr
b5LoginModule.java:662)
        ... 107 more
2011-10-27 18:16:46,500 DEBUG [org.jasig.cas.support.spnego.web.flow.SpnegoCrede
ntialsAction] - <Unable to obtain the output token required.>
2011-10-27 18:16:46,500 DEBUG [org.jasig.cas.support.spnego.web.flow.SpnegoCrede
ntialsAction] - <Setting HTTP Status to 401>
不知道您能给解答下不?
19 楼 zdx3578 2011-03-09  
后续错误记录到我博客看吧
18 楼 雨辰RainTime 2011-03-08  
zdx3578 写道
C:\Users\Administrator>ktpass.exe /out spn.keytab /princ HTTP/test.zdxcas.com@BQ
.TEST /pass * /mapuser spn@BQ.TEST /ptype KRB5_NT_PRINCIPAL /crypto RC4-HMAC-NT


C:\Users\Administrator>ktpass.exe /out spn.keytab /princ HTTP/test.zdxcas.com@BQ
.TEST /pass 123qweGHJOII /mapuser spn@BQ.TEST /ptype KRB5_NT_PRINCIPAL /crypto RC4-HMAC-NT


每个命令生成的文件传到linux给cas的kerberos使用都ok(前提是2008 ad上使用下面的命令。。。/pass 123qweGHJOII /。。。。。。),ad上只要是上面的命令执行 就都不行 kerberos 24   KRB Error: error code is 24 error Message is Pre-authentication information was invalid  错误

这两个命令对生成的文件是一样的,但是对ad的结果却不同!

17 楼 zdx3578 2011-03-08  
C:\Users\Administrator>ktpass.exe /out spn.keytab /princ HTTP/test.zdxcas.com@BQ
.TEST /pass * /mapuser spn@BQ.TEST /ptype KRB5_NT_PRINCIPAL /crypto RC4-HMAC-NT


C:\Users\Administrator>ktpass.exe /out spn.keytab /princ HTTP/test.zdxcas.com@BQ
.TEST /pass 123qweGHJOII /mapuser spn@BQ.TEST /ptype KRB5_NT_PRINCIPAL /crypto RC4-HMAC-NT


每个命令生成的文件传到linux给cas的kerberos使用都ok(前提是2008 ad上使用下面的命令。。。/pass 123qweGHJOII /。。。。。。),ad上只要是上面的命令执行 就都不行 kerberos 24   KRB Error: error code is 24 error Message is Pre-authentication information was invalid  错误

这两个命令对生成的文件是一样的,但是对ad的结果却不同!
16 楼 zdx3578 2011-03-07  
C:\Users\Administrator>ktpass.exe /out spn.keytab /princ HTTP/test.zdxcas.com@BQ
.TEST /pass * /mapuser spn@BQ.TEST /ptype KRB5_NT_PRINCIPAL /crypto RC4-HMAC-NT

--
这样的命令手动输入密码就24 错误

--
C:\Users\Administrator>ktpass.exe /out spn.keytab /princ HTTP/test.zdxcas.com@BQ
.TEST /pass 123qweGHJOII /mapuser spn@BQ.TEST /ptype KRB5_NT_PRINCIPAL /crypto RC4-HMAC-NT
密码在命令里写好不手动输入后生产的keytab文件就ok,使用这样的文件就完成ok,一起顺利,域用户打开firefox后ie后cas server 自动登录完成。

zdx3578 写道
KRB Error: error code is 24 error Message is Pre-authentication information was invalid ?


问题原因应该是
Cause 2: If you are using the keytab to get the key (e.g., by setting the useKeyTab option to true in the Krb5LoginModule entry in the JAAS login configuration file), then the key might have changed since you updated the keytab.

    Solution 2: Consult your Kerberos documentation to generate a new keytab and use that keytab.

    Cause 4: The Kerberos realm name is not all uppercase.

    Solution 4: Make the Kerberos realm name all uppercase. Note: It is recommended to have all uppercase realm names. For details, refer to the Naming Conventions for the Realm Names and Hostnames section of this tutorial.
15 楼 zdx3578 2011-03-07  
http://www.xioxu.com/?p=325006
# javax.security.auth.login.LoginException: KrbException: Pre-authentication information was invalid (24) - Preauthentication failed

    Cause 1: The password entered is incorrect.

    Solution 1: Verify the password.

    Cause 2: If you are using the keytab to get the key (e.g., by setting the useKeyTab option to true in the Krb5LoginModule entry in the JAAS login configuration file), then the key might have changed since you updated the keytab.

    Solution 2: Consult your Kerberos documentation to generate a new keytab and use that keytab.

    Cause 3: Clock skew - If the time on the KDC and on the client differ significanlty (typically 5 minutes), this error can be returned.

    Solution 3: Synchronize the clocks (or have a system administrator do so).
    Cause 4: The Kerberos realm name is not all uppercase.

    Solution 4: Make the Kerberos realm name all uppercase. Note: It is recommended to have all uppercase realm names. For details, refer to the Naming Conventions for the Realm Names and Hostnames section of this tutorial.


还是没解决掉!
  
14 楼 zdx3578 2011-03-07  
KRB Error: error code is 24 error Message is Pre-authentication information was invalid ?
13 楼 zdx3578 2011-03-07  
官方例子:
https://wiki.jasig.org/display/CASC/Saml11TicketValidationFilter+Example
https://wiki.jasig.org/display/CASC/JA-SIG+Java+Client+Simple+WebApp+Sample
12 楼 zdx3578 2011-03-05  
-rwxr-xr-x 1 zdx zdx 86635 2011-03-05 03:10 cas-client-core-3.2.0.jar*
-rwxr-xr-x 1 zdx zdx 12160 2011-03-05 03:10 cas-client-integration-tomcat-common-3.2.0.jar*
-rwxr-xr-x 1 zdx zdx 20191 2011-03-05 03:10 cas-client-integration-tomcat-v6-3.2.0.jar*
-rwxr-xr-x 1 zdx zdx 52915 2011-03-05 03:10 commons-logging-1.1.jar*
11 楼 zdx3578 2011-03-04  
http://192.168.245.139:8443/          第二次犯这个傻了
10 楼 zdx3578 2011-03-04  
http://192.168.245.139:8443/   
9 楼 zdx3578 2011-03-04  
 
zdx3578 写道
8443 ssl 访问出现:  页面左上角几个乱码 



啥原因?


使用http 访问 8443端口!!!! 
8 楼 zdx3578 2011-03-04  
8443 ssl 访问出现:



啥原因?
7 楼 zdx3578 2011-03-04  
tomcat 证书:::::::::的一种方式

Tomcat can use two different implementations of SSL:

    * the JSSE implementation provided as part of the Java runtime (since 1.4)
    * the APR implementation, which uses the OpenSSL engine by default.





[系统维护] Linux 生成SSL证书 供 nginx使用
这里说下Linux 系统怎么通过openssl命令生成 证书。

首先执行如下命令生成一个key

openssl genrsa -des3 -out ssl.key 1024

然后他会要求你输入这个key文件的密码。不推荐输入。因为以后要给nginx使用。每次reload nginx配置时候都要你验证这个PAM密码的。

由于生成时候必须输入密码。你可以输入后 再删掉。

mv ssl.key xxx.key
openssl rsa -in xxx.key -out ssl.key
rm xxx.key

然后根据这个key文件生成证书请求文件

openssl req -new -key ssl.key -out ssl.csr

以上命令生成时候要填很多东西 一个个看着写吧(可以随便,毕竟这是自己生成的证书)

最后根据这2个文件生成crt证书文件

openssl x509 -req -days 365 -in ssl.csr -signkey ssl.key -out ssl.crt

这里365是证书有效期 推荐3650哈哈。这个大家随意。最后使用到的文件是key和crt文件。

在需要使用证书的nginx配置文件的server节点里加入以下配置就可以了。

ssl on;
ssl_certificate /home/ssl.crt;
ssl_certificate_key /home/ssl.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;

然后重启nginx就大功告成了。
6 楼 zdx3578 2011-03-04  
zdx3578 写道
keytool生成根证书时出现如下错误:

keytool错误:java.io.IOException:keystore was tampered with,or password was incorrect

原因是在你的home目录下是否还有.keystore存在。如果存在那么把他删除掉,后再执行

或者删除"%JAVA_HOME%/JRE/LIB/SECURITY/CACERTS 再执行

这个方法有效


使用keytool工具删除证书时出现java.io.IOException: Keystore was tampered with, or password was incorrect 异常的解决办法:

对于很多服务器比如glassfish或者tomcat之类的,在证书过期,我们需要删除时,需要输入保护密码,默认的就是changeit,输入这个密码就可以了。

密码就是changeit
5 楼 zdx3578 2011-03-04  
keytool生成根证书时出现如下错误:

keytool错误:java.io.IOException:keystore was tampered with,or password was incorrect

原因是在你的home目录下是否还有.keystore存在。如果存在那么把他删除掉,后再执行

或者删除"%JAVA_HOME%/JRE/LIB/SECURITY/CACERTS 再执行

这个方法有效
4 楼 zdx3578 2011-03-04  
zdx3578 写道
cas-server-uber-webapp-3.4.6 部署这个包应该不错,这个里面包含东西多

A、将cas-server-3.4.2-release\cas-server-3.4.2\modules目录的cas-server-support-spnego-3.4.2.jar复制到cas\WEB-INF\lib下

B、还需要有两个外部包的支持,“jcifs-1.1.11.jar、jcifs-ext-0.9.4.jar”,将这两个jar包也拷贝到cas\WEB-INF\lib下

包括这3个包等等其他包   cas-server-uber-webap

相关推荐

    cas spnego认证方式(即加ad域的windows主机应用免登录)高可用集群方案(目前来看国内第一份资料,本人探索出来的)

    通过本文档介绍的方案,可以在AD域环境下的Windows主机上成功实现CAS SPNEGO认证方式的高可用集群部署。该方案不仅解决了传统CAS集群中的常见问题,还针对SPNEGO认证模式下特有的技术难题提供了详尽的解决思路与实践...

    CAS+windows AD域实现单点登录免身份认证.docx

    cas集成window AD 域实现免身份认证单点登录,cas部署为centos系统,window server 2012 R2

    kerberos:启用KDC和SPNEGO的Nginx

    已启用KDC和SPNEGO的Nginx 先决条件 已在以下环境中进行了测试 kdc:Ubuntu 20.04 Intel + Docker稳定版,kerberos客户端:Ubuntu 20.04 Intel kdc:Ubuntu 20.04 Intel + Docker稳定版,kerberos客户端:Macos ...

    spnego配置一键审批

    6. **邮件服务器与域的关系**:邮件服务器应被添加到AD域中,以防止因同一IP地址发送大量邮件而被视为攻击,导致邮箱被锁定。同时,可能需要在IP Ranges中排除禁止的IP,确保邮件正常收发。 7. **NTLM登录**:NT ...

    cas-server-support-spnego-3.4.2.jar

    cas3.4用到的jar

    Tomcat SPNEGO/Active Directory Authnz:Tomcat SPNEGO / Kerberos身份验证器和Active Directory领域-开源

    这意味着该工具允许用户通过其在AD域中的凭证进行无痛的单点登录(SSO)认证。 **描述解析:** "适用于Apache Tomcat的功能齐全的一流SPNEGO / Kerberos(和当前Windows身份)身份验证器和Active Directory(和...

    cas-server-support-spnego-4.0.0-RC3.zip

    【标题】"cas-server-support-spnego-4.0.0-RC3.zip" 提供的是CAS(Central Authentication Service)服务器的一个扩展模块,专门支持SPNEGO(Simple and Protected GSS-API Negotiation Mechanism)协议的4.0.0-RC3...

    cas sso server page

    CAS支持多种认证机制,包括基于数据库、LDAP、AD域、SPNEGO、X.509证书等。开发者可以根据组织的需求选择合适的认证策略,并在CAS配置中进行设置。 6. 安全与扩展性: CAS提供了一些安全特性,如SSL/TLS加密通信...

    griffin集成Livy kerberos.docx

    2. 配置Kerberos相关参数,允许Livy服务通过Kerberos与Yarn交互,以及客户端通过Kerberos访问Livy: - Livy服务启动的keytab和principal:`livy.server.launch.kerberos.keytab` 和 `livy.server.launch.kerberos....

    CAS自定义加密和登录验证

    CAS(Central Authentication Service,中央认证服务)是一种广泛使用的开源身份验证框架,主要用于实现单点登录(Single Sign-On,SSO)。在本主题中,我们将深入探讨如何在CAS中进行自定义加密和登录验证。 首先...

    cas-server-3.4.11-release

    4. **认证模块**:CAS支持多种认证模块,如JDBC、LDAP、SPNEGO(Kerberos)、X.509证书等。在3.4.11版本中,用户可以根据需求选择合适的认证源,并在配置文件中指定相关参数。 5. **服务管理**:CAS Server维护一个...

    Administering SPNEGO within WebSphere Application Server

    Administering SPNEGO within WebSphere Application Server

    Yelu 大学 cas 单点登录实例

    这个版本的CAS客户端支持Spring框架,可以方便地与Spring Security整合。 - 客户端集成主要包括配置CasFilter和CasServerLoginUrlProcessor,以便在用户访问受保护资源时重定向到CAS服务器进行认证。 3. **SSO流程...

    java源码:Java单点登录系统 JA-SIG CAS.rar

    CAS支持多种认证方式,如基于用户名/密码的认证、LDAP目录服务认证、SPNEGO(Kerberos)等。开发者可以根据需求选择或扩展认证模块。 6. **CAS扩展性**: 除了基本的SSO功能,CAS还提供了许多可扩展的功能,例如...

    kerberos 5

    JSP文件(list.jsp和page.jsp)可能展示了如何在Web应用中整合Kerberos 5的身份验证,利用Kerberos的SPNEGO(Simple and Protected GSS-API Negotiation Mechanism)机制,实现在浏览器和Web服务器之间的无感知认证...

    sso.rar_IIS ad java_iis_sso_sso IIS_单点登录

    在Java应用端,可能需要配置LDAP连接以查询AD用户信息,或者使用Java的SPNEGO库来处理Kerberos票据。 7. **安全性考虑**:SSO虽带来便利,但也会增加攻击面。因此,实现时必须确保通信安全,例如使用HTTPS,以及...

    Tomcat中访问AD Server的配置方法

    本文将详细介绍如何在 Tomcat 中配置 SPNEGO 基于 SSO 的方式与 Active Directory (AD) 服务器进行集成,从而实现自动化的用户认证过程。 #### 二、编译 为了实现 SPNEGO 基于 SSO 的功能,需要编写并编译一系列...

    mod_spnego:在 Windows 上运行的 Apache HTTP Server 的 Kerberos 身份验证-开源

    mod_spnego 允许使用 Kerberos 对在 Windows 上的 Apache HTTP 服务器 (httpd) 上运行的网站的用户进行身份验证。 然后,经过身份验证的用户在服务器变量 AUTH_USER 中可用。 sourceforge 上仅托管下载,来源位于 ...

Global site tag (gtag.js) - Google Analytics