日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

聊聊SSL背后的密碼學(xué)

 吳雨虹2kzpi83a 2020-05-08

  

HTTPS網(wǎng)站相信對(duì)很多工程師來講并不陌生,各大Web服務(wù)器產(chǎn)品都提供了詳細(xì)的配置方案,搭建起來也并不很難。但要說出其中的安全原理,卻不是件容易的事。今天我們就來談一談它后面的密碼學(xué)原理,希望通過這篇文章,大家能夠真正了解掌握相關(guān)的安全技術(shù)。強(qiáng)烈建議您讀這篇文章下面的內(nèi)容之前,先看一下之前關(guān)于非對(duì)稱加密、數(shù)字簽名、數(shù)字證書的文章,做為相關(guān)知識(shí)儲(chǔ)備。

我們談HTTPS的安全,實(shí)際上是談SSL的安全,因?yàn)?/span>HTTPS實(shí)質(zhì)就是HTTP+SSL。而其實(shí)SSL也不是完全準(zhǔn)確的說法,因?yàn)樽鳛閰f(xié)議的SSL(Secure Sockets Layer 安全套接層)已經(jīng)及其繼任者TLS協(xié)議(Transport Layer Security傳輸層安全)取代了。習(xí)慣使然,我們?nèi)园堰@一套相關(guān)技術(shù)叫做SSLSSL將非對(duì)稱加解密、數(shù)字簽名、數(shù)字證書等核心PKI技術(shù)應(yīng)用在網(wǎng)絡(luò)通信的傳輸層,實(shí)現(xiàn)了服務(wù)器/客戶端認(rèn)證和數(shù)據(jù)加密,保證了網(wǎng)絡(luò)中傳輸數(shù)據(jù)的安全。

先介紹一下應(yīng)用最廣的服務(wù)器認(rèn)證。服務(wù)器認(rèn)證也叫單向認(rèn)證,即客戶端瀏覽器訪問HTTPS網(wǎng)站時(shí),先要對(duì)網(wǎng)站的真實(shí)性進(jìn)行認(rèn)證,認(rèn)證通過后,客戶端與網(wǎng)站之間的數(shù)據(jù)交換以密文形式進(jìn)行。具體的認(rèn)證過程,不是本文的重點(diǎn),因?yàn)槟阍谄渌芏嘟榻BSSL的文章上都可以看到詳細(xì)的描述。本文重點(diǎn)是它的密碼學(xué)原理,先看下圖。

SSL單向認(rèn)證.jpg

這張圖畫出了單向認(rèn)證的核心過程。認(rèn)證時(shí),網(wǎng)站服務(wù)器先將自己的服務(wù)器證書發(fā)送給客戶端,客戶端收到證書后進(jìn)行以下四項(xiàng)檢查:

l 證書是否過期就是檢查當(dāng)前時(shí)間是否在證書有效期內(nèi);

l 證書是否由可信任CA頒發(fā)在數(shù)字證書那一篇里介紹過;

l 證書是否被吊銷就是指當(dāng)前證書是不是已經(jīng)被頒發(fā)它的CA吊銷了。客戶端檢查證書是否吊銷有CRLOCSP兩種方法。CRL即證書吊銷列表,里面有CA已經(jīng)吊銷了的證書集合,客戶端通過檢查CRL就可以判斷證書是否被吊銷。CRL是可以根據(jù)一定的算法更新的。OCSP是在線證書狀態(tài)檢查協(xié)議,客戶端直接向證書簽發(fā)機(jī)構(gòu)發(fā)起查詢請(qǐng)求以確認(rèn)該證書是否有效;

l 證書主題(持有人)名稱中的域名與你要訪問網(wǎng)站的域名是否一致。

如果上面四項(xiàng)有任何一項(xiàng)檢查結(jié)果為否,瀏覽器就會(huì)給出相關(guān)警告提示,如下圖是頒發(fā)證書的CA不被信任時(shí)的提示。

而這是網(wǎng)站域名與證書持有人的名稱不一致的情況。注意,這里并不要求持有人的名稱和網(wǎng)站名稱一致,而是指持有人的域名和完整域名一致。

一旦出現(xiàn)了這些警告,瀏覽器都會(huì)強(qiáng)烈建議用戶不要繼續(xù)訪問(當(dāng)然ChromeIE更強(qiáng)烈,下圖是IE打開同一個(gè)網(wǎng)站的提示,請(qǐng)細(xì)品個(gè)中的不同),

但最終要不要繼續(xù)訪問,決定權(quán)還在用戶手里。因此,客戶端驗(yàn)證服務(wù)器證書這一步,實(shí)際上是由客戶端瀏覽器檢查和用戶自行判斷共同完成的。很多人在學(xué)習(xí)SSL時(shí)總問驗(yàn)證服務(wù)器證書這一步是怎么驗(yàn)證的,其實(shí)就是由用戶自己人工完成的,我們也可以叫它“人肉驗(yàn)證”。你如果無視這些警告,繼續(xù)訪問,就表明你已經(jīng)認(rèn)同了這張服務(wù)器證書,也就等于認(rèn)同了這個(gè)網(wǎng)站。相信很多人和我以前一樣,遇到這樣的警告都是馬上找繼續(xù)訪問的按鈕,基本不看到底警告了什么。如果自己開發(fā)的業(yè)務(wù)系統(tǒng)這樣做問題不大,但要是在互聯(lián)網(wǎng)上訪問第三方的網(wǎng)站,遇到這樣的警告還是要小心謹(jǐn)慎,一定要確保真的沒問題才可以訪問。很多中間人攻擊就是利用了用戶這種麻痹大意的心理得手的。

完成了服務(wù)器證書驗(yàn)證最重要的一步后,下面的工作就是水到渠成了。客戶端會(huì)生成一個(gè)隨機(jī)數(shù)作為生成對(duì)稱密鑰的數(shù)據(jù),叫預(yù)主密鑰,然后用服務(wù)器證書的公鑰加密這個(gè)密鑰,并把這個(gè)加密的密鑰傳送給服務(wù)器,服務(wù)器用自己的私鑰解密??蛻舳伺c服務(wù)器根據(jù)相同的預(yù)主密鑰計(jì)算出對(duì)稱密鑰(其實(shí)這一步還有其他隨機(jī)數(shù)參與,這里就不再展開了),雙方使用對(duì)稱密鑰加密發(fā)送的數(shù)據(jù),解密接收的數(shù)據(jù),最終建立了網(wǎng)絡(luò)傳輸?shù)陌踩ǖ馈?/span>

在服務(wù)器認(rèn)證的基礎(chǔ)上,SSL支持對(duì)客戶端的認(rèn)證,這樣單向認(rèn)證就變成了雙向認(rèn)證。實(shí)現(xiàn)雙向認(rèn)證要先做一個(gè)準(zhǔn)備工作:用戶需要先將其證書登記在服務(wù)器的證書信任庫或數(shù)據(jù)庫中,并與被授權(quán)訪問服務(wù)器的用戶賬戶綁定。

SSL雙向認(rèn)證.jpg

與單向認(rèn)證相比,紅色步驟就是雙向認(rèn)證增加的部分??蛻舳藭?huì)進(jìn)行對(duì)數(shù)據(jù)的簽名,在TLS協(xié)議中這個(gè)生成簽名的數(shù)據(jù)是之前的握手信息,然后把簽名結(jié)果(包括用戶證書)和加密的隨機(jī)數(shù)一起發(fā)送給服務(wù)器。服務(wù)器收到后,要驗(yàn)證簽名后及用戶的證書。這個(gè)驗(yàn)證過程除了有效期、是否被吊銷以及頒發(fā)CA是否被可信外,還需要在服務(wù)器的證書信任庫或數(shù)據(jù)庫里進(jìn)行對(duì)比,以確定當(dāng)前用戶的身份。驗(yàn)證通過后,再按照單向認(rèn)證的步驟解密隨機(jī)數(shù),生成對(duì)稱密鑰。在實(shí)際使用時(shí),瀏覽器會(huì)彈出窗體讓用戶選擇要發(fā)送的證書,如下圖。如果證書是用USBKey載體,則會(huì)彈出輸入口令對(duì)話框,完成數(shù)字簽名。這就是雙因素認(rèn)證。

u=3494884191,723604823&fm=15&gp=0.jpg

上述雙向認(rèn)證過程可能和有些網(wǎng)上文章描述的不同,那些文章描述的是在雙向認(rèn)證中,客戶端直接把自己的證書發(fā)送給服務(wù)器,而不是簽名,之后服務(wù)器先用客戶端公鑰加密服務(wù)器選定的對(duì)稱加密方案,客戶端收到后使用私鑰解密得到。上述描述應(yīng)該是之前SSL協(xié)議的內(nèi)容,并不是現(xiàn)在TLS協(xié)議的雙向認(rèn)證過程。

SSL的優(yōu)點(diǎn)在于配置相對(duì)簡單,應(yīng)用層改動(dòng)很小。如果是單向認(rèn)證,你的網(wǎng)站甚至不用改一行代碼,配置服務(wù)器即可,因?yàn)樗饔迷趥鬏攲樱瑢?duì)應(yīng)用層來講是透明的。但也正是因?yàn)檫@樣,是用SSLHTTPS也有以下缺點(diǎn):

多次握手協(xié)議和傳輸數(shù)據(jù)的加解密會(huì)帶來網(wǎng)頁訪問速度變慢,網(wǎng)絡(luò)資源消耗增大;

使用界面(如客戶端認(rèn)證時(shí)的證書選擇的對(duì)話框)無法與應(yīng)用層的界面保持一致,影響用戶瀏覽體驗(yàn);

在網(wǎng)頁中不能引用其他非安全資源,說白了就是不能嵌入http協(xié)議的鏈接。這并不是跨域的問題,而是瀏覽器認(rèn)為不安全。不過,如果訪問的是本地資源,比如,大部分瀏覽器是認(rèn)為沒問題的;

SSL證書需要花錢。雖然你自己也可以簽發(fā)一個(gè)SSL證書做服務(wù)器認(rèn)證,技術(shù)上和那些大廠SSL證書沒有任何區(qū)別。但自己簽發(fā)證書的CA是不被信任的,你也不可能一個(gè)個(gè)通知用戶去手動(dòng)把簽發(fā)CA的根證書裝到信任頒發(fā)機(jī)構(gòu)里。所以,使用Windows已經(jīng)預(yù)裝的那些受信任根CA或它們的分支機(jī)構(gòu)簽發(fā)的SSL證書是普遍的選擇。SSL證書按年收費(fèi),費(fèi)用在每年幾百元到幾千元不等。具體使用哪一種證書,要看網(wǎng)站的定位;

早期的SSL1.0、SSL2.0都有漏洞,相信做過平臺(tái)漏掃的同學(xué)對(duì)此都不陌生;

另外有些觀點(diǎn)認(rèn)為SSL不能隱藏用戶隱私信息,不能認(rèn)證用戶真實(shí)身份。我個(gè)人認(rèn)為這并不是SSL做的事,這是應(yīng)用層的問題??傊?,使用基于SSLHTTPS,能夠有效地降低傳輸數(shù)據(jù)被竊取的風(fēng)險(xiǎn),增加網(wǎng)站被中間人劫持攻擊的難度。各位老鐵,能用還是都用了吧。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多