1. 程式人生 > >HTTPS原理與非對稱加密與DNS劫持

HTTPS原理與非對稱加密與DNS劫持

一直不明白HTTPS的加密原理。

因為,如果連線是不安全的,那麼如果伺服器把密匙傳送到客戶端的過程中,密匙就可能已經洩漏了。所以,這樣怎麼想也不明白。在多瞭解了一下以後,原來,HTTPS的基礎是非對稱加密技術。就是說,加密和解密必須使用不同的兩把鑰匙進行。

至於原理可以自行百度:非對稱加密技術。http://baike.baidu.com/link?url=IRYQN1dmGDV3qzvXN7K2zKnNBBMW2ZBOmbO4-sBMzIJcNVftHaASZqY9b0xqUmhz3c4r5-MFfIKiUtdVAu6qkjXha70YtTNjvat8wwavP4JxF5C16eNwp14Hmyd-ZPQ-h8LLE7hRBtOeZQHL-Ii_EBsioxO1ybZJZWalb56h6Cu

簡單的說,以往我們想的加密解密是使用的同一把鑰匙,這個是對稱加密技術。就好像戰爭裡面的密電碼,如果有誰拿到了密碼本,那就等於破解了整個密碼體系。這個就是對稱加密。非對稱加密,就是同時產生一對鑰匙,一個鑰匙加密的,必須用另外一個鑰匙才能解密。HTTPS的原理就看下面這個就明白了。

http://blog.csdn.net/clh604/article/details/22179907

現在來分析一下,https是如何借用非對稱加密保證安全的

可以參看下面的文章http://blog.csdn.net/abinge317/article/details/51791856

下面來看看https如何保證連線安全的整個的局勢是這樣的,一個瀏覽器,一個應用伺服器,一個證書頒發機構。瀏覽器需要是正規途徑的釋出版本,因為他內建來證書頒發機構的公匙。應用伺服器需要先把自己的證書內涵應用伺服器的公匙,傳送到證書頒發機構。證書頒發機構認證伺服器是安全的,就把證書留著。

佈局完成,開始運作。使用者通過瀏覽器開始連線應用伺服器網站。應用伺服器網站會給他一個證書頒發機構的聯絡,使用者就去找證書頒發機構,證書頒發機構通過私匙加密證書然後發給瀏覽器。瀏覽器用內建的密匙解開獲得證書原文。如果使用者的瀏覽器連線到了一個假的證書機構的伺服器,那麼瀏覽器獲得的資訊根本就無法解密。因為加密的私匙是在證書頒發機構的。於是惡意伺服器無法偽裝成證書機構,除非瀏覽器軟體是非正規渠道的,裡面內建的不是正確的頒發機構的密匙。

惡意伺服器如果無法偽裝,那麼他想監聽瀏覽器與應用伺服器之間的會話。能實現嗎?

繼續,當瀏覽器拿到安全的證書以後,會解開證書,拿到應用伺服器釋出的公匙。這個公匙非常有用,通過這個公匙把自己隨機生成新的密匙並將這一串字用作對稱加密的鑰匙,(注意,這時候改了,變長對稱加密的了)然後,還有一小段內容,用應用伺服器的公匙加密,一併傳送給應用伺服器。在這個過程中,惡意伺服器也能拿到這個被加密的資訊。但是,因為他沒有私匙,所以無法解讀。而只有應用伺服器可以解密這個資訊。

應用伺服器收到這段資訊以後,通過獨有的私匙解密獲得這新的密匙和一小段內容。這時候,我們看到,這段私匙才是應用伺服器和瀏覽器溝通真正的密匙。應用伺服器會用這個對稱密匙加密瀏覽器傳送過來的一小段資訊,然後傳送給瀏覽器。而瀏覽器就用剛剛自己生成的那串只有應用伺服器和自己才知道的密匙解密這段資訊。用拿到的資訊和自己的資訊進行比對。確認沒有問題,然後就用這個密匙根應用伺服器會話。如果一個惡意伺服器,就算拿到了,瀏覽器用應用伺服器公匙加密的資訊,他因為沒有應用伺服器的公匙,因此也無法解密這段資訊。而,當伺服器傳送最後一段確認的資訊時,惡意伺服器可以拿到,但是他沒有辦法解開資訊,所以,這段資訊只能被瀏覽器解開。於是,就建立了悄悄話溝通的線路。

現在,惡意伺服器變得更厲害了,他通過劫持dns,讓瀏覽器的請求,不是直接到應用伺服器,而是直接到一個惡意伺服器。因為dns把域名地址指向了他。這時候,惡意伺服器就將變成瀏覽器的代理,先從證書頒發機構獲得證書,然後把證書攔截,並生成自己的證書發給瀏覽器,瀏覽器比對以後如果認為沒有問題,就會跟惡意伺服器建立https通訊,而惡意伺服器扮演中間人,再連線到真實的應用伺服器。這個時候,瀏覽器的一切資訊都通過惡意伺服器被轉換,資訊自然就暴露了。

所以,我們可以看到,證書其實不一定非的是證書頒發機構出來的,因為沒有證書頒發機構,應用伺服器直接把密匙發給瀏覽器是可以的。只是瀏覽器確實會說證書可能有問題的錯誤。但是,依舊可以通過這個跟應用伺服器建立https連線。