一、創建證書
證書是單點登錄認證系統中很重要的一把鑰匙,客戶端於服務器的交互安全靠的就是證書;由於是個人學習測試所以就直接用JDK自帶的keytool工具生成證書;如果以後真正在產品環境中使用肯定要去證書提供商去購買,證書認證一般都是由VeriSign認證,中文官方網站:http://www.verisign.com/cn/
- 打開命令行,進入
${JAVA_HOME}\bin
目錄,輸入keytool -genkey -alias tomcat -keypass changeit -keyalg RSA -keystore server.keystore
- 根據提示輸入口令
changeit
並確認 - 輸入名字與姓氏
localhost
(服務器域名,一般輸入localhost或ip地址) - 其他可不填,最後輸入
y
確認。結束後${JAVA_HOME}\bin
下會有一個server.keystore
文件
二、導出證書
- 輸入
keytool -export -alias tomcat -keypass changeit -file server.crt -keystore server.keystore
- 輸入口令
changeit
;結束後${JAVA_HOME}\bin
下會有一個server.crt
文件
三、將證書導入jre可信任區
- 由於空格問題,我這裏先將jre目錄
'C:\Program Files\Java\jre1.8.0_152\lib\security\'
下的cacerts
文件複製出來放到了C盤根目錄 - 輸入
keytool -import -alias tomcat -file server.crt -keypass changeit -keystore C:/cacerts
- 輸入口令
changeit
- 輸入
y
確認 - 將
C:/cacerts
文件重新放到'C:\Program Files\Java\jre1.8.0_152\lib\security\'
目錄下
四、cas服務器搭建
- 什麼是Overlay
overlay可以將多個項目war合併成爲一個項目,並且如果項目存在同名文件,那麼主項目中的文件將覆蓋掉其他項目的同名文件。下面使用maven 的Overlay配置實現無侵入的改造cas.
-
打開全球最大的同性交友網站下載
cas-overlay-template-5.3.zip
-
解壓
cas-overlay-template-5.3.zip
並重命名爲sso-cas-server
(隨意,也可以不用重命名) -
idea
導入項目sso-cas-server
-
鼠標右鍵點擊項目
pom.xml
,單擊'Add as Maven Project'
-
打開
idea
中的Terminal
,輸入build.cmd debug
,由於沒有配置ssl證書的key-store
所以運行中是會有錯誤提示的,運行完成後會在項目中生成target
目錄。 -
打開
/target/cas/WEB-INF/classes
文件夾,會發現裏面有一個熟悉的application.properties
文件,下面我們要覆蓋這個文件
-
分別新建文件夾
/src/main/java
和/src/main/resources
。右鍵/src/main/java
,並Mark Directory as
選擇Sources Root
;右鍵/src/main/resources
,並Mark Directory as
選擇Resources Root
。新建包org.apereo.cas
(後面改造cas要求文件名一致);複製/target/cas/WEB-INF/classes/application.properties
到/src/main/resources
,將上面生成的server.keystore
複製到/src/main/resources
-
編輯
/src/main/resources/application.properties
,將server.ssl.key-store
設置爲classpath:server.keystore
-
在
/src/main/resources/application.properties
中追加如下配置開啓http
協議支持cas.server.http.port=8080 cas.server.http.protocol=org.apache.coyote.http11.Http11NioProtocol cas.server.http.enabled=true cas.server.http.attributes.attributeName=attributeValue
-
編輯
pom.xml
,找到overlays
節點,改爲如下配置使我們的application.properties
生效<overlays> <overlay> <groupId>org.apereo.cas</groupId> <artifactId>cas-server-webapp${app.server}</artifactId> <!-- 排除被覆蓋的文件 --> <excludes> <exclude>WEB-INF/class/application.properties</exclude> </excludes> </overlay> </overlays>
-
重新輸入輸入
build.cmd debug
,啓動完成後輸入https://localhost:8443/cas/login和http://localhost:8080/cas/login均能訪問到統一認證中心.
五、在外部tomcat中部署cas服務
上一步中搭建cas服務是以springboot內置tomcat服務器啓動的,若要在外部tomcat中部署cas服務則又有不同.
-
將第四步中
target
文件夾下的cas.war
複製到tomcat的webapps
文件夾下 -
下面有兩種訪問方式
http訪問
- 雙擊tomcat的
bin
目錄下的startup.bat
文件 - 瀏覽器輸入http://localhost:8080/cas/login可進入統一認證中心
https訪問
-
修改tomcat的
conf
目錄下的server.xml
文件將下列兩項註釋掉
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
添加下面代碼片段(
keystoreFile
、truststoreFile
、keystorePass
對應修改)<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" sslImplementationName="org.apache.tomcat.util.net.jsse.JSSEImplementation" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" keystoreFile="C:/Program Files/Java/jdk1.8.0_152/bin/server.keystore" truststoreFile="C:/Program Files/Java/jre1.8.0_152/lib/security/cacerts" keystorePass="changeit" clientAuth="false" sslProtocol="TLS" />
-
保存server.xml後回到tomcat的
bin
目錄下,雙擊startup.bat文件 -
瀏覽器輸入https://localhost:8443/cas/login可進入統一認證中心
- 雙擊tomcat的
-----參考https://apereo.github.io/cas/5.3.x/installation/Configuration-Properties.html#http-web-requests