成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

javaSSL

cas 改造隨筆Sso doc關鍵字:sso 域名:cas.server .com登陸地址(spring web flow):https://cas.server.com/cas/login 登陸地址

cas 改造隨筆

Sso doc

關鍵字:

sso 域名:cas.server .com

登陸地址(spring web flow):https://cas.server.com/cas/login 登陸地址(直接):https://cas.server.com/cas/directLogin 退出地址:https://cas.server.com/cas/logout

語言參數(shù):locale=zh_CN,locale=en

環(huán)境篇

一、所需軟件

Jdk :jdk1.6.0_13

Apache :httpd-2.2.15-win32-x86-openssl-0.9.8m-r2

Tomcat :apache-tomcat-6.0.10

jks2pfx :證書導出工具http://www.myssl.cn/download/jks2pfx.zip memcache :memcached-1.2.1-win32(需要memcache 集群環(huán)境)

二、安全證書生成

,

1、keytool

Apache 、tomcat 、jdk 需要使用安全證書,進windows command窗口生成證書,命令如下: --生成證書庫

keytool -genkey -alias 800jit -keyalg RSA -keystore d:/cert/800jitkey

--從證書庫中到處證書

keytool -export -file d:/cert/800jit.crt -alias 800jit -keystore d:/cert/800jitkey --把證書導入jdk 的證書庫

keytool -import -keystore d: /jdk1.6.0_13/jre/lib/security/cacerts -file d:/cert/800jit.crt -alias 800jit

--生成Apache 服務器的SSL 連接需要配置私鑰文件和證書文件

D:?sexjks2pfx>JKS2PFX.bat .keystore 800jitkey tomcat server_dev00

生成的server_dev00.crt,server_dev00.key放到D:/work/Apache2.2/conf/

2、openssl

openssl req -config ..confopenssl.cnf -new -out olymtech.csr

openssl rsa -in privkey.pem -out olymtech.key

openssl x509 -in olymtech.csr -out olymtech.cert -req -signkey olymtech.key -days 3650

openssl x509 -in olymtech.cert -out olymtech.der.crt -outform DER

keytool -import -keystore d:/work/jdk1.6.0_13/jre/lib/security/cacerts -file d:/casex/ssl/olymtech.crt -alias olymtech

keytool -import -keystore D:/casex/800jitkey -file D:/casex/cas-doc/ssl/olymtech.crt -alias olymtech

三、Apache 配置

Apache ssl 虛擬機

--修改http.conf 文件

取消注釋 LoadModule ssl_module modules/mod_ssl.so

取消注釋 Include conf/extra/httpd-ssl.conf

取消注釋 Include conf/extra/httpd-vhosts.conf

ProxyPass /cas balancer://cas lbmethod=bytraffic stickysession=jsessionid

BalancerMember ajp://192.168.1.190:10009/cas loadfactor=1 route=jvm1 BalancerMember ajp://192.168.1.190:8009/cas loadfactor=1 route=jvm2

,

--修改httpd-ssl.conf

下增加

ProxyPass /cas balancer://cas/ lbmethod=bytraffic stickysession=jsessionid ProxyPassReverse /cas balancer://cas/

SSLProxyEngine On

修改

SSLCertificateFile "D:/work/Apache2.2/conf/server_dev00.crt"

SSLCertificateKeyFile "D:/work/Apache2.2/conf/server_dev00.key"

--修改httpd-vhosts.conf

下增加

ProxyPass /cas balancer://cas/ lbmethod=bytraffic stickysession=jsessionid ProxyPassReverse /cas balancer://cas/

四、Tomcat 配置

修改server .xml

--配置ssl

maxThreads="150" scheme="https" secure="true"

clientAuth="false" sslProtocol="TLS"

keystoreFile="d:/work/apache-tomcat-6.0.10/conf/800jitkey" keystorePass="111111" />

五、session 共享(Tomcat )

六、memcache 集群

CAS SERVER篇

,

一、CAS 原理介紹

訪問流程圖

主要原理:用戶第一次訪問一個CAS 服務的客戶web 應用時(訪問URL :http://192.168.1.90:8081/web1 ),部署在客戶web 應用的cas AuthenticationFilter ,會截獲此請求,生成service 參數(shù),然后redirect 到CAS 服務的login 接口,url 為https://cas:8443/cas/login?service=http://192.168.1.90:8081/web1/ ,認證成功后,CAS 服務器會生成認證cookie ,寫入瀏覽器,同時將cookie 緩存到服務器本地,CAS 服務器還會根據(jù)service 參數(shù)生成ticket,ticket 會保存到服務器,也會加在url 后面,然后將請求redirect 回客戶web 應用,url 為http://192.168.1.90:8081/web1/?ticket=ST-5-Sx6eyvj7cPPCfn0pMZuMwnbMvxpCBcNAIi6-20 。這時客戶端的AuthenticationFilter 看到ticket 參數(shù)后,會跳過,由其后面的TicketValidationFilter 處理,TicketValidationFilter 會利用httpclient 工具訪問cas 服務的/serviceValidate 接口, 將ticket 、service 都傳到此接口,由此接口驗證ticket 的有效性,TicketValidationFilter 如果得到驗證成功的消息,就會把用戶信息寫入web 應用的session 里。至此為止,SSO 會話就建立起來了,以后用戶在同一瀏覽器里訪問此web 應用時,AuthenticationFilter 會在session 里讀取到用戶信息,所以就不會去CAS 認證,如果在此瀏覽器里訪問別的web 應用時,AuthenticationFilter 在session 里讀取不到用戶信息,會去CAS 的login 接口認證,但這時CAS 會讀取到瀏覽器傳來的cookie ,所以CAS 不會要求用戶去登錄頁面登錄,只是會根據(jù)service 參數(shù)生成一個ticket ,然后再和web 應用做一個驗證ticket 的交互。

,

二、CAS 服務端的處理邏輯

CAS 服務端總共對外定義了9 個接口,客戶端通過訪問這9 個接口與服務端交互,這9個接口為: 接口

/login

/logout

/validate 說明 認證接口 備注 退出接口,負責銷毀認證cookie 驗證ticket 用的接口,CAS1.0 定

/serviceValidate 驗證ticket 用的接口,CAS2.0 定

義,返回xml 格式的數(shù)據(jù)

/proxy

/proxyValidate 支持代理認證功能的接口 支持代理認證功能的接口

/CentralAuthenticationService 用于和遠程的web services 交互

/remoteLogin(新增)

/directLogin(新增) 認證接口 認證接口

詳細說明:

/login:

登錄流程這部分要考慮到不同種類用戶憑證的獲取方案,以及客戶應用傳來的service 、gateway 、renew 參數(shù)的不同取值組合,CAS 為了實現(xiàn)流程的高度可配置性,采用了Spring Web Flow 技術。通過CAS 發(fā)布包里的login-webflow.xml 、cas-servlet.xml 、applicationContext.xml 這3 個文件,找出 了登錄有關的所有組件,畫出處理流程圖。

,

CAS 默認的登錄處理流程

,

第一次訪問Web 應用的流程走向

,

已經(jīng)登錄web1 后,訪問web1 的資源(web1 沒有啟動session ),或訪問web2 的資源

注:

1 : InitialFlowSetupAction: 是流程的入口。用 request.getContextPath() 的值來設置 cookie 的 Path 值, Cookie 的 path 值是在配置文件里定義的,但這個 Action 負責將

request.getContextPath() 的值設置為 Cookie 的 path 值,這是在 cas 部署環(huán)境改變的情況下,靈活地設置 cookie path 的方式;把 cookie 的值以及 service 參數(shù)的值放入

requestContext 的 flowscope 里。

2 : GenerateServiceTicketAction 此 Action 負責根據(jù) service 、 GTC cookie 值生成 ServiceTicket 對象, ServiceTicket 的 ID 就是返回給客戶應用的 ticket 參數(shù),如果成功創(chuàng)建 ServiceTicket ,則轉發(fā)到 WarnAction ,如果創(chuàng)建失敗,且 gateway 參數(shù)為 true ,則直接redirect 到客戶應用, 否則則需要重新認證。

3 : viewLoginForm 這是登錄頁面, CAS 在此收集用戶憑證。 CAS 提供的默認實現(xiàn)是 /WEB-INF/view/jsp/simple/ui/casLoginView.jsp 。

,

4 : bindAndValidate 對應 AuthenticationViaFormAction 的 doBind 方法,該方法負責搜集登錄頁面上用戶錄入的憑證信息(用戶名、密碼等),然后把這些信息封裝到 CAS 內部的 Credentials 對象中。用戶在 casLoginView.jsp 頁面上點擊提交后,會觸發(fā)此方法。

5:submit 對應 AuthenticationViaFormAction 的 submit 方法 , 如果 doBind 方法成功執(zhí)行完, 則觸發(fā) submit 方法,此方法負責調用centralAuthenticationService 的

grantServiceTicket 方法,完成認證工作,如果認證成功,則生成 TicketGrantingTicket 對象,放在緩存里, TicketGrantingTicket 的 ID 就是 TGC Cookie 的 value 值。

6 : warn CAS 提供了一個功能:用戶在一個 web 應用中跳到另一個 web 應用時, CAS 可以跳轉到一個提示頁面,該頁面提示用戶要離開一個應用進入另一個應用,可以讓用戶自己選擇。用戶在登錄頁面 viewLoginForm 上選中了 id=”warn ” 的復選框,才能開啟這個功能。

WarnAction 就檢查用戶有沒有開啟這個功能,如果開啟了,則轉發(fā)到showWarnView, 如果沒開啟,則直接redirect 到客戶應用。

7 :SendTicketGrantingTicketAction 此Action 負責為response 生成TGC Cookie ,cookie 的值就是 AuthenticationViaFormAction 的submit 方法生成的 TicketGrantingTicket 對象的 ID 。

8 : viewGenerateLoginSuccess 這是 CAS 的認證成功頁面。

/logout: ( 對應實現(xiàn)類 org.jasig.cas.web.LogoutController )

處理邏輯:

1) removeCookie

2) 在服務端刪除TicketGrantingTicket 對象(此對象封裝了cookie 的value 值) 3 )redirect 到退出頁面,有2 種選擇:

if(LogoutController 的followServiceRedirects 屬性為true 值,且url 里的service 參數(shù)非空){

redirect 到 sevice 參數(shù)標識的url

}

else{

redirect 到內置的casLogoutView

(cas/WEB-INF/view/jsp/default/ui/casLogoutView.jsp ),如果url 里有url 參數(shù),則此url 參數(shù)標識的鏈接會顯示在casLogoutView 頁面上。

}

/serviceValidate: (對應實現(xiàn)類 org.jasig.cas.web.ServiceValidateController ) 處理邏輯:

如果service 參數(shù)為空或ticket 參數(shù)為空,則轉發(fā)到failureView

(/WEB-INF/view/jsp/default/protocol/2.0/casServiceValidationFailure.jsp )

驗證ticket 。以ticket 為參數(shù),去緩存里找ServiceTicketImpl 對象,如果能找到,且沒有過期,且ServiceTicketImpl 對象對應的service 屬性和service 參數(shù)對應,則驗證通過,驗證通過后,請求轉發(fā)至casServiceSuccessView

,

(cas/WEB-INF/view/jsp/default/protocol/2.0/casServiceValidationSuccess.jsp ),驗證不通過,則轉發(fā)到failureView 。

三、認證相關的概念及流程

概念 ? Credentials 用戶提供的用于登錄用的憑據(jù)信息,如用戶名/ 密碼、證書、IP 地址、Cookie 值等。比如 UsernamePasswordCredentials ,封裝的是用戶名和密碼。CAS 進行認證的第一步,就是把從UI 或request 對象里取到的用戶憑據(jù)封裝成Credentials 對象,然后交給認證管理器去認證。

? AuthenticationHandler 認證Handler , 每種AuthenticationHandler 只能處理一種Credentials ,如AbstractUsernamePasswordAuthenticationHandler 只負責處理 U sernamePasswordCredentials 。

?

? Principal 封裝用戶標識,比如 SimplePrincipal, 只是封裝了用戶名。認證成功后, CredentialsToPrincipalResolvers 負責由 Credentials 生成 Principal 對象,每種

只處理 一種

負Credentials 責從, 比如 U credentialsToPrincipalResolvers 負責由Credentials 生成 Principal 對象。 CredentialsT oPrincipalResolvers UsernamePasswordCredentialsToPrincipalResolver

性。

?

?

?

? sernamePasswordCredentials 中取出用戶名,然后將其賦給生成的 SimplePrincipal 的 ID 屬AuthenticationMetaDataPopulators 負責將 Credentials 的一些屬性賦值給 Authentication Authentication 是認證管理器的最終處理結果, Authentication 封裝了 AuthenticationManager 認證管理器得到 Credentials 對象后,負責調度CentralAuthenticationService CAS 的服務類,對 Web 層提供了一些方法。該類還負Authentication 的 attributes 屬性。 Principal ,認證時間,及其他一些屬性(可能來自 Credentials )。 AuthenticationHandler 去完成認證工作,最后返回的結果是 Authentication 對象。 責調用 AuthenticationManager 完成認證邏輯。

序列圖

標簽: