SSL/TLS 深入淺出
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
SSL,https(HTTP over SSL), X.509, SSL 證書 ,證書申請(qǐng) /導(dǎo)入/簽發(fā), 等名詞,想必有一定工作經(jīng)驗(yàn)的小伙伴,一定都會(huì)略有耳聞,或者至少也聽神邊大神念叨過。雖然司空見慣,但是能夠比較系統(tǒng)理清其中關(guān)系,能夠從整體到局部深入淺出講解下的人,估計(jì)至少也是十里挑一。反正沒人給我講,我只好自己梳理下。(注意本文不涉及密碼學(xué)原理以及SSL協(xié)議具體細(xì)節(jié),但具備密碼學(xué)基礎(chǔ),會(huì)有助于愉快閱讀) 起因是公司最近在搞安全加固,想起了歷史原因用了很久的FTP服務(wù),這東西眾所周知是明文的,裸奔的用戶名密碼,被監(jiān)聽是分分鐘的事兒。于是尋思加個(gè)密吧,搜了下發(fā)現(xiàn)有個(gè)FTPS( FTP over SSL),很容易聯(lián)想到一個(gè)更常用的https(http over。SSL), 展開一搜還有各種 XXXX - over - SSL。 如SMTPS,POP3S, LDAPS等,于是問題來了,SSL到底是個(gè)啥東西,為啥可以被各種over。
我們從大家比較熟悉的http協(xié)議角度說起,HTTP這個(gè)協(xié)議(就是header,body,post get這些)是在大概1991年附近發(fā)布,其設(shè)計(jì)初衷就是用來傳輸顯示網(wǎng)頁內(nèi)容。這協(xié)議是明文的,明文的含義——就是你閱讀的網(wǎng)頁內(nèi)容以及提交的,經(jīng)過的每一個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)都可以知道傳輸?shù)木唧w是啥內(nèi)容。我猜早期的網(wǎng)頁既不動(dòng)態(tài),也不私密,也沒有個(gè)人相冊(cè):-),所以為了簡單,http協(xié)議本身并沒有考慮加密機(jī)制。 后來,WWW就火了,網(wǎng)絡(luò)時(shí)代正式來臨,頁面功能越來越強(qiáng)大,支持動(dòng)態(tài)化,可以為不同用戶提供不同內(nèi)容,已經(jīng)可以發(fā)個(gè)悄悄話,照片啥的了。這時(shí)自然就產(chǎn)生了加密需求。于是1994年有一個(gè)叫網(wǎng)景(Netscape)的公司,做瀏覽器的,開始琢磨怎么加密http協(xié)議傳輸?shù)木W(wǎng)頁內(nèi)容。琢磨著,琢磨著,就琢磨出了SSL協(xié)議,后來歷經(jīng)完善,變成了標(biāo)準(zhǔn),改了名字 目前叫TLS,至今廣泛使用。 網(wǎng)景已乘黃鶴去,但對(duì)互聯(lián)網(wǎng)的發(fā)展和安全起了重要貢獻(xiàn)。
SSL協(xié)議的制定目標(biāo)是解決http傳輸?shù)陌踩珕栴},目前仍在廣泛應(yīng)用,可見網(wǎng)景制定的這個(gè)協(xié)議還是比較科學(xué)的。所謂天下文章一大抄,SSL也是借鑒了前人基礎(chǔ),融會(huì)貫通而成。 大約1976年,大洋彼岸的大壯,提出了非對(duì)稱加密,數(shù)字證書的概念。1977年,同樣遠(yuǎn)在彼岸的小明,發(fā)明了實(shí)用的非對(duì)稱加密RSA算法,標(biāo)志著公開密鑰加密的誕生(就是現(xiàn)在常提的公鑰,私鑰,非對(duì)稱啥的)。 有了天才的大壯和小明,數(shù)字證書以及非對(duì)稱加密的相關(guān)理論已經(jīng)完備,只待應(yīng)用。于是在一些安全需求較高的專用內(nèi)部網(wǎng)絡(luò)(軍事,金融,企業(yè))中,一些系統(tǒng)開始根據(jù)大壯和小明提供的思路,實(shí)現(xiàn)基于數(shù)字證書和非對(duì)稱加密算法的身份認(rèn)證與通信加密功能。 凡事都是先發(fā)明,再應(yīng)用,再有標(biāo)準(zhǔn)(參照電池,先發(fā)明,再使用,再規(guī)定5號(hào) ,7號(hào)電池啥規(guī)格)。基于數(shù)字證書和RSA算法的加密機(jī)制,因?yàn)槿狈?biāo)準(zhǔn),導(dǎo)致出現(xiàn)各系統(tǒng)實(shí)現(xiàn)間的不兼容,證書互不認(rèn)可等問題。 于是1988年誕生了一個(gè)叫做X.509的標(biāo)準(zhǔn),定義了數(shù)字證書的字段內(nèi)容,比如應(yīng)該有持有者的名稱、公鑰、有效期、序列號(hào)以及證書頒發(fā)機(jī)構(gòu)(CA)的簽名等。這個(gè)標(biāo)準(zhǔn)的產(chǎn)生,也推動(dòng)了CA的標(biāo)準(zhǔn)化和普及。 X.509 標(biāo)準(zhǔn)僅定義了證書的字段內(nèi)容,而另外的一些文件格式標(biāo)準(zhǔn),則具體定義了證書文件的存儲(chǔ)格式。如.pem .der .p12 .p7b等,這些就是我們?cè)谙到y(tǒng)中可見的證書和私鑰的存在形式。 基于以上,網(wǎng)景公司定義了在互聯(lián)網(wǎng)中,客戶端和服務(wù)器進(jìn)行網(wǎng)絡(luò)通信時(shí),類似 發(fā)送ABC 表示 請(qǐng)求證書,發(fā)DEF ,表示協(xié)商雙方都支持的密碼套件的,發(fā)XYZ,表示XXX。 這樣一個(gè)網(wǎng)絡(luò)協(xié)議,將其命名為SSL/TLS。
SSL(Secure Sockets Layer )為啥可以被各種over,Layer 顧名思義,SSL協(xié)議的作用主要是加解密,與具體傳輸數(shù)據(jù)無關(guān),應(yīng)用把數(shù)據(jù)扔給 SSL層后,細(xì)節(jié)就不太需要關(guān)心了。他自然會(huì)幫你加密好,傳送到目的地,解密好,再送達(dá)應(yīng)用。所以所有的應(yīng)用層協(xié)議,都是可以over SSL的。如http,F(xiàn)TP等。 通信的過程,大致都是先建立SSL通道,證書驗(yàn)證好,對(duì)稱密鑰交換好。這個(gè)建立SSL通道的過程,概念上稱為——SSL協(xié)商握手。握手完成后,后續(xù)的通信內(nèi)容就都是加密的了。你應(yīng)用層需要傳個(gè) GET ,POST,Header,body 之類,還是按你應(yīng)用層的協(xié)議來,該咋咋滴。所以你應(yīng)用層是http 那就是 http over SSL. 如果是 ftp 就是FTP over ssl。 舉一反三: 如果你自己寫了個(gè)聊天客戶端和服務(wù)器,是否可以用你的自定義聊天協(xié)議來 LAOWANG over SSL 呢?
如何實(shí)踐應(yīng)用 XXX over SSL。 1. 向CA申請(qǐng)服務(wù)器端ssl證書(x.509證書)——通過上面我門可以知道,x.509證書適用于,各種的 https ftps pop3s laowangs . 以及其他依賴于x509證書的領(lǐng)域,如電子簽章。注意,我門有時(shí)候會(huì)說 https 證書,ssl證書,ftps證書,本質(zhì)都是x509證書,習(xí)慣稱為ssl證書,不要混淆。 2. 在服務(wù)器端將申請(qǐng)到的證書及對(duì)應(yīng)私鑰放置好,并配置啟動(dòng)SSL支持——這是ssl協(xié)議通信的基礎(chǔ)。證書雖然都是x.509證書,但具體的證書文件可能需要格式轉(zhuǎn)換,nginx傾向于使用PEM文件格式的證書(.pem)和私鑰。 3. 申請(qǐng)客戶端證書(可選)——我也是剛知道不久,原來ssl協(xié)議是支持雙向認(rèn)證的。Web瀏覽器模式使用的是單向認(rèn)證,但在一些安全需求較高的應(yīng)用,可能會(huì)需要進(jìn)行雙向認(rèn)證,服務(wù)器可以驗(yàn)證客戶端的證書是否有效,并且根據(jù)證書信息如持有人,決定是否可以進(jìn)行連接。 4.客戶端對(duì)應(yīng)使用支持SSL的客戶端進(jìn)行通信。
本文來自博客園,作者:鍋叔 該文章在 2024/8/5 10:11:38 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |