http和https的区别和联系
文章目錄
- https是什么?
- https做得怎么樣?
- https怎么做到的?
- https足夠安全嗎?
https是什么?
https, 全稱Hyper Text Transfer Protocol Secure,相比http,多了一個secure,這一個secure是怎么來的呢?這是由TLS(SSL)提供的,這個又是什么呢?估計你也不想知道。大概就是一個叫openSSL的library提供的。https和http都屬于application layer(應(yīng)用層),基于TCP(以及UDP)協(xié)議,但是又完全不一樣。TCP用的port是80, https用的是443(值得一提的是,google發(fā)明了一個新的協(xié)議,叫QUIC,并不基于TCP,用的port也是443, 同樣是用來給https的。谷歌好牛逼啊。)總體來說,https和http類似,但是比http安全。
https做得怎么樣?
一般來說網(wǎng)絡(luò)安全關(guān)心三個問題, CIA, (confidentiality【保密性】, integrity【完整性】, availability【可用性】)。那https在這三方面做的怎么樣呢?https保證了confidentiality(你瀏覽的頁面的內(nèi)容如果被人中途看見,將會是一團(tuán)亂碼。不會發(fā)生比如和你用同一個無線網(wǎng)的人收到一個你發(fā)的數(shù)據(jù)包,打開來一看,就是你的密碼啊銀行卡信息啊),intergrity(你瀏覽的頁面就是你想瀏覽的,不會被黑客在中途修改,網(wǎng)站收到的數(shù)據(jù)包也是你最初發(fā)的那個,不會把你的數(shù)據(jù)給換掉,搞一個大新聞),最后一個availability幾乎沒有提供(雖然我個人認(rèn)為會增加基礎(chǔ)DOS等的難度,但是這個不值一提),不過https還提供了另一個A, authentication【身份驗證】(你連接的是你連接的網(wǎng)站,而不是什么人在中途偽造了一個網(wǎng)站給你,專業(yè)上叫Man In The Middle Attack)。那https具體保護(hù)了啥?簡單來說,保護(hù)了你從連接到這個網(wǎng)站開始,到你關(guān)閉這個頁面為止,你和這個網(wǎng)站之間收發(fā)的所有信息,就連url的一部分都被保護(hù)了。同時DNS querying【DNS查詢】這一步也被保護(hù)了,不會發(fā)生你輸入www.google.com,實際上跑到了另一個網(wǎng)站去了。(這個其實也屬于authentication,我這里不是很確定,最開始還寫錯了一次,應(yīng)該來說,https保護(hù)了DNS Spoofing【DNS欺騙】 和DNS Cache Poisoning【DNS緩存中毒】等DNS攻擊)那么有哪些沒有被保護(hù)的?你是誰,你訪問了什么網(wǎng)站(這個就是anonymity【匿名】,想要上不好的網(wǎng)站但是不被人知道?可以用VPN或者TOR,當(dāng)然可能要付出金錢或者速度變慢的代價啦。)
https怎么做到的?
這個就很復(fù)雜了。有興趣的朋友可以看一下這個“The First Few Milliseconds of an HTTPS Connection”。我來簡單介紹一下里面的一些手段。比如你如何確信這個網(wǎng)站是一個好網(wǎng)站?好網(wǎng)站就會有一個“好網(wǎng)站證書”,也就是certification,這個證書是由CA(certificate authority)(證書授權(quán)中心)頒布的,每次鏈接,網(wǎng)站都先去找CA拿一份證書,然后把這個證書一起發(fā)給客戶,來證明自己的清白。也許你會問,萬一是一個壞網(wǎng)站自己偽造的證書呢?這就要牽扯到RSA的公鑰,私鑰加密。不過,google的https是他們自己公司的一個CA發(fā)的,感覺怪怪的。總之,你基本可以相信這是一個好網(wǎng)站(歷史上也有CA被入侵之類的事件發(fā)生)。這就是authentication(應(yīng)該也是保護(hù)DNS的一步)。當(dāng)然你也會需要向網(wǎng)站證明一下你自己的身份,然后你們就要決定用什么方式加密。加密的方式有很多種,比如各種AES(高級加密標(biāo)準(zhǔn)【Advanced Encryption Standard】)啦什么的。客戶告訴網(wǎng)站,我的瀏覽器支持哪些加密方式,然后網(wǎng)站選擇其中一種,于是你們之間的數(shù)據(jù)就被加密了。你問我怎么選擇的?我告訴你是隨機(jī)的。你問我是偽隨機(jī)嗎,我不知道,偽隨機(jī)的話會不會有一種qd的感覺?總之,這就是confidentiality。那怎么保證你的數(shù)據(jù)不被修改呢?這就要說到hash,hash算法可以把一個長長的數(shù)據(jù)變短,一般情況下,不同的長數(shù)據(jù)變成的短數(shù)據(jù),是不一樣的。哪怕長數(shù)據(jù)里面只變化了一點點,短數(shù)據(jù)也會差別很大(專業(yè)術(shù)語叫avalanche effect【雪崩效應(yīng)】)。傳輸數(shù)據(jù)的時候,把這個短數(shù)據(jù)一并傳了,對方就可以知道整個數(shù)據(jù)包是否被修改。當(dāng)然這需要雙方都提前知道一些并沒有被傳輸?shù)拿孛堋3S玫膆ash有md5(MD5信息摘要算法【英語:MD5 Message-Digest Algorithm】)和SHA256(安全散列算法SHA【Secure Hash Algorithm】)等,md5相對來說不安全,length extenstion attack(哈希長度擴(kuò)展攻擊)和collision都很容易。總之,這樣一來,你可以知道中途數(shù)據(jù)沒有被修改。這就是integrity。
https足夠安全嗎?
最后這個https足夠安全嗎?世界上沒有絕對的安全,首先我提到過,https本身不保證availability,而且別人也能知道你在上這個網(wǎng)站。同時,https本身想保護(hù)的東西也不是那么靠譜。例如赫赫有名的heartbleed(心血漏洞),2014年的時候席卷全球。數(shù)據(jù)顯示,前100的網(wǎng)站(我也不曉得怎么排的),44個受到heartbleed威脅,其中就有雅虎,stackoverflow這樣的網(wǎng)站。當(dāng)然我覺得黑客是不會黑掉stackoverflow的,黑掉了以后自己寫程序遇到bug都不知道怎么辦了。直到今天,還有的網(wǎng)站沒有修復(fù)這個bug,而一些已經(jīng)修復(fù)的網(wǎng)站,因為沒有及時更換private key等原因,自以為安全了,其實和沒修復(fù)一個樣。當(dāng)然,還有各種各樣的安全隱患。比如提到的RSA加密,在某些情況下可以用wiener attack(維納攻擊)破解。其他的例如入侵CA,或者直接入侵用戶的電腦(例如用ssh開remote root shell等)都非常有可能。一定還有很多真正的“黑”科技,答主也不了解了。總結(jié)一下,https對于大部分人來說,意味著比較安全。相比http,讓人更加放心。但是作為普通網(wǎng)民,無論在上什么網(wǎng)站,http還是https的時候,可都不能掉以輕心哦!安全隱患無處不在。
參考文章:http 和 https 有何區(qū)別?如何靈活使用?
總結(jié)
以上是生活随笔為你收集整理的http和https的区别和联系的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nginx卡在登录页面不断跳转如何解决?
- 下一篇: 原始nginx.conf备份