1. 程式人生 > >CAS單點登錄的配置

CAS單點登錄的配置

eight drive app clas 應用程序 失敗 jdk1 cal 提示符

1.生成安全證書

Cas server默認的安全認證是基於https協議的,這就要求在應用程序和CAS Server端配置SSL協議。(當然也可以在cas server中配置讓其可以用http訪問)

要使用https協議,就需要使用安全證書,這裏我們通過JDK自帶的應用keytool來制作。這種自用的證書是不受瀏覽器信任的。(會提示,但是選擇高級選項,直接訪問就行)

生成安全證書使用keytool,keytool是一個Java數據證書的管理工具。

keytool將密鑰(key)和證書(certificates)存在一個稱為密鑰庫keystore的文件中,在keystore裏,

包含兩種數據:
密鑰實體(Key entity)——密鑰(secret key)又或者是私鑰和配對公鑰(采用非對稱加密)

可信任的證書實體(trusted certificate entries)——只包含公鑰

步驟:

1)用keytool生成密鑰庫keystore

2)用keytool在密鑰庫keystore中導出證書cer文件

3)將證書導入到jdk中的信任的證書庫cacerts

前兩個網上搜索方法,下面只說第三步如何操作:

Win7及以上系統的話請在管理員模式下運行命令提示符窗口。修改對應內容後在命令提示符執行以下命令:

cd D:\jdk1.7.0_21\jre\lib\security

keytool -import -alias localhost -file D:\localhost.cer -noprompt -trustcacerts -storetype jks -keystore cacerts -storepass 123456

其中,

D:\jdk1.7.0_21\jre\lib\security是jdk安裝路徑及其下面的對應目錄,

-alias localhost是選擇密鑰別名,

D:\localhost.cer是導入的cer公鑰證書文件路徑,

-storepass 123456是設置密鑰密碼。

:如果導入失敗,可以先把security目錄下的cacerts刪掉。

如果出現“Caused by: sun.security.validator.ValidatorException: PKIX path building failed:”很大概率是證書導入失敗(即使是顯示導入成功了)或者程序運行的JDK不是導入證書的JDK

(一定要註意這個問題,被坑過!!)

2.在tomcat中配置端口使用ssl協議

註意哪個端口配置了ssl協議,就只有哪個端口可以使用sll鏈接(同樣的在cas客戶端配置的時候踩坑提醒!

配置說明:

在Tomcat目錄下conf/server.xml文件中,將以下命令的對應內容修改後拷貝到<Connector>同級的位置(可以看到有和以下命令類似的被註釋掉的代碼)。紅色字為需要按照實際情況修改的內容,下同。

Tomcat 7:

<Connector SSLEnabled="true" clientAuth="false" maxThreads="150" port="8443" protocol="org.apache.coyote.http11.Http11Protocol" scheme="https" secure="true" sslProtocol="TLS" keystoreFile="E:\localhost.keystore" keystorePass="123456"/>

Tomcat 6:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="E:\localhost.keystore" keystorePass="123456"/>

其中,

keystoreFile="E:\localhost.keystore" keystorePass="123456",指的是所密鑰的位置和密鑰的密碼(安全密鑰為目錄下的localhost.keystore文件,密碼已經設置為123456)。

port="8443"指的是https端口號,建議使用8843。

3.部署cas server服務器

在github上下載cas server 的4.1.1的版本(大家可以嘗試別的版本),但是在使用4.0.0的過程中發現一個bug,困擾我很久,就是有時候登錄和退出需要操作兩次,網上有人說可能是請求異步的原因,後來換成4.1.1版本後就好了 。

技術分享圖片

將這個文件夾導入eclipse,在tomcat上部署運行即可。

然後訪問該項目https://localhost:8443/cas-server-webapp,跳轉到登錄頁面

技術分享圖片

到這裏,我們的需求是輸入用戶名密碼,然後cas server去數據庫查詢比對,正確就登錄成功。那麽數據庫的查詢配置在哪呢?

找到src/main/webapp/web-inf//cas-server-webapp/src/main/webapp/WEB-INF/deployerConfigContext.xml

<!--配置查詢的數據源,這個bean是自己添加的-->    
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/shirotest"/> <property name="username" value="root"/> <property name="password" value="root"/> </bean>
<!--註意原來就有這個bean,提供了一個測試的用戶名和密碼,現在修改它。--> <bean id="primaryAuthenticationHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"> <property name="dataSource" ref="dataSource" /> <property name="sql" value="select password from account where name=?" /> </bean>

這樣數據數據庫中的用戶名和密碼就能訪問成功了。

CAS單點登錄的配置