1. 程式人生 > >域名、瀏覽器、HSTS和HTTPS的關係

域名、瀏覽器、HSTS和HTTPS的關係

1.瀏覽器的轉換:

大家可以找一個瀏覽器試驗一下,我用的是谷歌的chrome瀏覽器,當你在位址列輸入 baidu.com,然後你再按回車,你發現了什麼? 對,位址列已經把地址自動轉換為  https://www.baidu.com了。這種第一種可能是伺服器的重定向導致的,第二種百度的實現方式的通過返回 重新整理元資訊 <meta http-equiv="refresh" content="0";url=http://www.baidu.com/">,還有其他的,我就不是特別瞭解了。如果大家知道,可以評論裡面教教小弟。

2.域名:

baidu.com和www.baidu.com是兩個完全不同的域名,前者是二級域名,後者是三級域名。就是說其實後者是前者的子域名,之所以會發生跳轉,只是百度財大氣粗把兩個域名都買下來了。其實網址還有一個根域,就是最後會有一個.,但是通常都會省略的。ipv4有8臺根伺服器,主根伺服器在美國,輔助根伺服器其他國家也有分佈。ipv6有3臺主根伺服器,分別部署在中日美,輔助根伺服器的部署感興趣的可以網上查一下。三級域名的解析就可以由百度自己來實現了。

3.域名的解析過程:

域名的解析是通過DNS來解析的,它是按照層級關係進行解析的。比如百度,他會先解析.com的一級域名對應的地址,然後再來到二級域名baidu.com,對他進行解析。注意這個時候就會跳到百度自己的dns上面,因為大公司都會有能力架構自己的dns系統,之後百度就可以通過cdn技術來為使用者提供鞥更好的服務了。具體cdn的工作原理以後我有時間還會寫一篇部落格的。

4.為什麼域名前面要加上www?

以www.baidu.com為例,中間的baidu是公司的拼音(聽說是來自眾裡尋他千百度,不知道真假),後面的com代表這是一個商業的網站,還有想cn、gov、net都可以作為字尾。字尾是屬於頂級域名,理論上是可以自定義的,但是需要向域名

管理機構ICANN申請。但是前面為什麼要加上www呢?域名越短不是越有利於使用者記住嗎?這個問題我是看了網上的幾篇文章才有了一知半解。原來早期的網際網路只有一些大公司才會自己搭建的伺服器,那麼這一臺伺服器可能需要做好多事情,怎麼可以簡單的區分出來呢?有人想出來www開頭代表請求一個http服務的,ftp開頭的是請求檔案服務的的,mail開頭的是郵箱服務的。所以那個時候www只是代表我需要請求的是一個網頁服務,而不是檔案服務也不是郵件服務。

www的英文是worldwideweb,翻譯過來就是全球資訊網。他的含義當年定義為它是基於html超文字標記語言和http傳輸協議為基礎的提供的一種網頁服務。但是現在科技迅猛發展,他還有實際存在的意義嗎?答案是肯定的,只是和以前的作用不同罷了。現在一個域名後面有很多臺伺服器支撐,也不需要通過字首來確定提供服務的種類了。現在閘道器可以做到上述的要求了,具體我以後也會學習並分享。現在使用只是為了更加易與人們理解罷了。就像csdn的字首就是blog,代表部落格服務的。字首是可以自定義的。

5.域名跳轉帶來的安全問題

瀏覽器預設是以http的方式進行通訊的,那如果我的網站升級為了https後我該如何讓瀏覽器發起https請求呢?第一種方式就是在niginx上配置重定向301(永久重定向,瀏覽器會快取,快取時間不定,使用者可以手動清除)或者302暫時重定向狀態碼返回給瀏覽器。但是如果這樣總會在不定的時間內瀏覽器會發送一次http明文請求,這時候如果有居心叵測的人就可以攔截你的http請求,造成安全問題。

6.HSTS

hsts的全稱是http嚴格傳送協議,解釋為了解決上述問題。通過這個協議,伺服器可以在返回頭加上

Strict-Transport-Security: <max-age=>[; includeSubDomains][; preload]  那麼瀏覽器就會這個進行解析。

max-age:這個是代表有效時間的意思,就是這段時間內瀏覽器都會預設直接發起https請求。如果你每次都會返回這個頭部的話,這個時間會一直累加。但是有個問題需要注意,如果沒有使用hsts的網站,你的證書出現了問題,那麼瀏覽器會給使用者警告,但是使用者可以忽略警告繼續訪問你的網站,但是如果你啟用了hsts協議,那麼瀏覽器會警告使用者並且會禁止使用者繼續訪問你的網站。所以這個值得設定要小心。

includeSubDomains:這個意思就是包含子域名的意思。

preload:這個引數是可選的,這裡可以填寫自己的其他網址加入瀏覽器的內建列表。這個下面再講。

7.繼續進行防護,瀏覽器內建列表。

即使啟用了hsts,那麼瀏覽器至少還會發送一次http請求,這個請求還是有可能被劫持。有沒有一種方法可以讓瀏覽器直接發起https請求呢。可以,就是上面的可選引數就可以把網址加入到內建列表裡面,這個列表是google維護的,其他的一些瀏覽器也會支援這個列表。除了上面的方法還可以通過HSTS Preload List的官網進行申請。這個東西可不是隨便申請的。他需要你符合下面的規範才可以申請

1.具備一個有效的證書

2.在同一臺主機上提供重定向響應,以及接收重定向過來的HTTPS請求

3.所有子域名均使用HTTPS

4.在根域名的HTTP響應頭中,加入HSTS Header,並滿足下列條件:

過期時間最短不得少於18周(10886400秒)

必須包含includeSubDomains引數

必須包含preload引數    摘抄自(https://www.jianshu.com/p/caa80c7ad45c

谷歌瀏覽器可以在chrome://net-internals/#hsts查詢,我查了國內的大型網站都加這個內建列表了。

 

 

最後一句話,有錯誤的話換用大家指正。