小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

 吳雨虹2kzpi83a 2020-05-08

  

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

我們談HTTPS的安全,實(shí)際上是談SSL的安全,因?yàn)?/span>HTTPS實(shí)質(zhì)就是HTTP+SSL。而其實(shí)SSL也不是完全準(zhǔn)確的說(shuō)法,因?yàn)樽鳛閰f(xié)議的SSL(Secure Sockets Layer 安全套接層)已經(jīng)及其繼任者TLS協(xié)議(Transport Layer Security傳輸層安全)取代了。習(xí)慣使然,我們?nèi)园堰@一套相關(guān)技術(shù)叫做SSL。SSL將非對(duì)稱加解密、數(shù)字簽名、數(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)證,即客戶端瀏覽器訪問(wèn)HTTPS網(wǎng)站時(shí),先要對(duì)網(wǎng)站的真實(shí)性進(jìn)行認(rèn)證,認(rèn)證通過(guò)后,客戶端與網(wǎng)站之間的數(shù)據(jù)交換以密文形式進(jìn)行。具體的認(rèn)證過(guò)程,不是本文的重點(diǎn),因?yàn)槟阍谄渌芏嘟榻BSSL的文章上都可以看到詳細(xì)的描述。本文重點(diǎn)是它的密碼學(xué)原理,先看下圖。

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

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

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

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

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

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

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

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

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

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

完成了服務(wù)器證書(shū)驗(yàn)證最重要的一步后,下面的工作就是水到渠成了??蛻舳藭?huì)生成一個(gè)隨機(jī)數(shù)作為生成對(duì)稱密鑰的數(shù)據(jù),叫預(yù)主密鑰,然后用服務(wù)器證書(shū)的公鑰加密這個(gè)密鑰,并把這個(gè)加密的密鑰傳送給服務(wù)器,服務(wù)器用自己的私鑰解密??蛻舳伺c服務(wù)器根據(jù)相同的預(yù)主密鑰計(jì)算出對(duì)稱密鑰(其實(shí)這一步還有其他隨機(jī)數(shù)參與,這里就不再展開(kāi)了),雙方使用對(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)備工作:用戶需要先將其證書(shū)登記在服務(wù)器的證書(shū)信任庫(kù)或數(shù)據(jù)庫(kù)中,并與被授權(quán)訪問(wèn)服務(wù)器的用戶賬戶綁定。

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

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

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

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

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

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

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

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

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

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

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

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

    0條評(píng)論

    發(fā)表

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

    類(lèi)似文章 更多