SSO統(tǒng)一身份認(rèn)證——CAS Server6.3.x配置HTTPS與申請證書(三)
背景
單點登錄(SingleSignOn碍岔,SSO)漱竖,就是通過用戶的一次性鑒別登錄君珠。當(dāng)用戶在身份認(rèn)證服務(wù)器上登錄一次以后茅特,即可獲得訪問單點登錄系統(tǒng)中其他關(guān)聯(lián)系統(tǒng)和應(yīng)用軟件的權(quán)限枫疆,同時這種實現(xiàn)是不需要管理員對用戶的登錄狀態(tài)或其他信息進(jìn)行修改的爵川,這意味著在多個應(yīng)用系統(tǒng)中,用戶只需一次登錄就可以訪問所有相互信任的應(yīng)用系統(tǒng)息楔。這種方式減少了由登錄產(chǎn)生的時間消耗寝贡,輔助了用戶管理再登,是目前比較流行的岖研。
單點登錄的使用場景有很多巨坊,C/S氏捞、B/S架構(gòu)的系統(tǒng)均可使用酝静,通常是支持快速配置使用们颜。
業(yè)內(nèi)目前實現(xiàn)SSO的方式有很多種猾愿,在ToC場景下互聯(lián)網(wǎng)公司通常使用的是OAuth2協(xié)議突琳,而ToB場景下大家通常是囊括百家,既支持OAuth2又支持CAS澡匪,還滴支持LDAP熔任。其造成的原因主要是因為在ToB場景下需要對接SSO的系統(tǒng)通常僅支持某個協(xié)議,而這類系統(tǒng)又不是同一個協(xié)議導(dǎo)致唁情。
而我當(dāng)前境況下就是既有ToC場景又有ToB場景疑苔,在該種情況下,我開始對其業(yè)內(nèi)的各種協(xié)議進(jìn)行整合集成甸鸟,這一系列文章將對其業(yè)內(nèi)各個協(xié)議從基礎(chǔ)到深入惦费、從搭建到二次開發(fā)進(jìn)行記錄,同時將其整理出來分享給大家抢韭。
簡介
CAS是Central Authentication Service的縮寫薪贫,中央認(rèn)證服務(wù),一種獨(dú)立開放指令協(xié)議刻恭。CAS 是 耶魯大學(xué)(Yale University)發(fā)起的一個開源項目瞧省,旨在為 Web 應(yīng)用系統(tǒng)提供一種可靠的單點登錄方法,CAS 在 2004 年 12 月正式成為 JA-SIG 的一個項目鳍贾。
其主結(jié)構(gòu)由CAS Server鞍匾、CAS Client兩部分組成。下圖為官方提供的結(jié)構(gòu)圖骑科,大家可以作為參考進(jìn)行理解橡淑。
環(huán)境
本章節(jié)我們對上圖中的CAS Server進(jìn)行搭建。主要使用的環(huán)境如下
服務(wù)器系統(tǒng):windows 10
環(huán)境:OpenJDK 11
web中間件:tomcat9
CAS Server:6.3.x
數(shù)據(jù)庫:MariaDB 或 PostgreSQL
正文
在開始之前咆爽,我們需要準(zhǔn)備一個自己的域名梳码,最好對其已進(jìn)行備案,因為我們下面需要使用到外網(wǎng)伍掀,當(dāng)然如果你沒有這個域名掰茶,那請翻到本節(jié)的第二部分,在本地完成證書的生成與使用蜜笤,并在本地配置hosts進(jìn)行訪問濒蒋。
第一部分:
1、對其域名申請一個免費(fèi)的證書把兔。
單個子級域名的免費(fèi)證書申請有很多種沪伙,可以通過阿里云、騰訊云等進(jìn)行申請县好,具體使用哪個看你的域名托管在誰家围橡,例如域名在阿里云,那建議你使用阿里云平臺中的SSL證書產(chǎn)品模塊進(jìn)行申請缕贡。
如果有需要DV OV EV級別的通配符域名翁授,我可以給大家代購進(jìn)行辦理拣播,有需要的可以私信我,買兩年贈一年收擦。
1.1贮配、打開阿里云頁面
1.2、頁面顯示為購買DV單域名證書塞赂,購買費(fèi)用為0元泪勒,點擊立即購買。
1.3宴猾、此時我們進(jìn)入證書管理頁面——切換至免費(fèi)證書頁簽圆存,發(fā)現(xiàn)可創(chuàng)建證書數(shù)量變成了20個,點擊進(jìn)行創(chuàng)建仇哆。
1.4沦辙、點擊證書申請,填寫需要使用的子域名税产,這里如果是阿里托管的域名怕轿,則驗證方式自動變?yōu)樽詣覦NS驗證偷崩。
1.5辟拷、點擊下一步后,進(jìn)入如下頁面阐斜,這時因我們的域名是阿里云托管衫冻,因此1、2谒出、兩步已自動完成隅俘,我們直接跳過,點擊3笤喳、驗證为居,顯示下圖中域名驗證成功,表示已經(jīng)全部設(shè)置完畢杀狡,點擊提交審核蒙畴。
通常,提交審核后沒有問題馬上就會簽發(fā)呜象,個別有延遲的也是24小時以內(nèi)會有結(jié)果膳凝。
1.6、點擊下載恭陡,選擇tomcat證書蹬音,下載保存。
第二部分
這里是我們手里沒有合適的域名休玩,這時我們需要在本地進(jìn)行創(chuàng)建證書著淆,我們可以直接復(fù)用cas.example.org域名劫狠,這樣我們生成證書更方便一些。如果不使用該域名也可以牧抽,不過需要通過keytool創(chuàng)建自簽證書嘉熊,這里我們復(fù)用一下官方默認(rèn)的域名和證書的密碼。
默認(rèn)使用的域名:cas.example.org
默認(rèn)使用的證書密碼:changeit
打開IDEA底部的Terminal扬舒,輸入gradlew createKeystore
E:\IdeaProjects\cas-server>gradlew createKeystore
該方法會自動創(chuàng)建一個thekeystore證書文件阐肤,并存放在當(dāng)前項目目錄下的/etc/cas目錄下。這時我們直接使用該證書讲坎,是可以使用的孕惜,但是頁面上會顯示不安全,如果想要安全需要執(zhí)行如下代碼晨炕,添加到j(luò)ava的可信認(rèn)證書中衫画。
E:\IdeaProjects\cas-server>keytool -import -keystore "C:\Program Files\Java\jdk-11.0.2\lib\security\cacerts" -file /etc/cas/thekeystore -alias cas
進(jìn)行到這一步,我們下面出現(xiàn)了兩種情況瓮栗,一種是我們當(dāng)前使用的外部tomcat方式削罩,沒有使用其內(nèi)置的。這里我們可以按照第三部分繼續(xù)向下即可费奸。
而另一種是我們使用的gradlew run 啟動的弥激,使用內(nèi)置Spring Boot框架內(nèi)置的tomcat啟動,這時我們需要修改IDEA中cas-server項目的配置文件了愿阐。
修改cas-server\src\main\resources\application.properties配置文件中如下屬性:
##
# CAS Web Application Embedded Server SSL Configuration
#
server.ssl.key-store=file:/etc/cas/thekeystore
server.ssl.key-store-password=changeit
server.ssl.key-password=changeit
cas.server.name={不攜帶協(xié)議頭的證書域名地址}
打開IDEA底部的Terminal微服,輸入gradlew build進(jìn)行重新編譯
E:\IdeaProjects\cas-server>gradlew.bat build
Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.8.1/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 5s
5 actionable tasks: 2 executed, 3 up-to-date
E:\IdeaProjects\cas-server>
再次執(zhí)行g(shù)radlew run進(jìn)行啟動,再次打開發(fā)現(xiàn)證書已生效缨历。
第三部分
2以蕴、對于我們當(dāng)前本地使用的tomcat進(jìn)行配置證書。
2.1辛孵、打開我們的IDEA——tomcat配置丛肮,將其https端口填入8443
2.2、打開tomcat存放的目錄魄缚,找到apache-tomcat-9.0.50\conf\server.xml文件宝与,打開編輯,修改87-93行
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/證書名字.pfx"
type="RSA" certificateKeystorePassword="替換為下載下來的密碼文件內(nèi)容"/>
</SSLHostConfig>
</Connector>
這里我們將下載下來的證書存放在apache-tomcat-9.0.50\conf\目錄里面鲜滩,自己也可以放到別的地方伴鳖,這里支持絕對路勁和相對路徑。
注:由于tomcat默認(rèn)使用的是Nio模式徙硅,不要啟用org.apache.coyote.http11.Http11AprProtocol榜聂,如果你想使用apr模式,請參見我之前的文章進(jìn)行安裝完畢tomcat并啟用了apr模式后再進(jìn)行設(shè)置嗓蘑。
好了現(xiàn)在我們tomcat的證書已經(jīng)安裝完成须肆,切換回IDEA——cas-server項目匿乃。
其實這時我們啟動是可以訪問的,不過顯示的是不安全的豌汇。
簡單的方式是我們在C:\Windows\System32\drivers\etc\hosts文件底部增加
127.0.0.1 sso.cnhuashao.com
這樣一句話幢炸,這樣瀏覽器訪問該域名時就自動跳轉(zhuǎn)到了127.0.0.1,這時再次訪問拒贱,我的連接就變成了安全的了宛徊。
當(dāng)然在生產(chǎn)情況下時我們就需要配置域名的解析和外網(wǎng)IP了,讓其域名解析到我們的服務(wù)器上逻澳,后續(xù)我們再進(jìn)行講解闸天。
為了更方便與后續(xù)的使用調(diào)試,我們對其進(jìn)行修改一下IDEA中的tomcat設(shè)置斜做。
修改一下之前的apache-tomcat-9.0.50\conf\server.xml文件苞氮,將其8443端口更改為443
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/證書名字.pfx"
type="RSA" certificateKeystorePassword="替換為下載下來的密碼文件內(nèi)容"/>
</SSLHostConfig>
</Connector>
再次啟動,我們訪問的地址就變得簡潔了一些瓤逼。
至此笼吟,我們本節(jié)的配置就完成了。
下一節(jié)我們將對其認(rèn)證的實現(xiàn)進(jìn)行研究霸旗,敬請關(guān)注贷帮。
本文聲明:
知識共享許可協(xié)議
本作品由 cn華少 采用 知識共享署名-非商業(yè)性使用 4.0 國際許可協(xié)議 進(jìn)行許可。