HTTPS,你不知道的事兒

hyur9926 8年前發布 | 8K 次閱讀 加密解密 Web服務器 HTTPS

what is https?

HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標的 HTTP 通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。

看到上面定義,我們大致也明白了HTTPS其實就是一個經過加密后的HTTP,具有更高的安全性。因此我們就需要了解一下經過加密的HTTPS是如何工作的?

加密算法

筆者目前所了解到的算法歸為三類:

  • 對稱加密

    • 對稱密碼編碼技術
    • 編碼和解碼采用相同描述字符(加密、解密采用相同密鑰)
    • 對稱加密使用簡單
    • 密鑰較短
    • 加密、解密過程較快、耗時短
    • 常見算法有:DES、3DES、IDEA、AES、RC4等等
    </li>
  • 非對稱加密

    • 加密需要兩個密鑰:公鑰(publickey)、私鑰(privatekey)
    • 公鑰加密,私鑰才能解密
    • 保密性好
    • 加密、解密過程較慢、耗時多
    • 適合對少量數據加密
    • 常見算法有:RSA、ECC、DSA等等
    • </ul> </li>
    • Hash算法加密

      • 單向加密
      • 通過Hash算法對數據加密生成唯一Hash值,此值無法計算出原來的數據
      • 頻繁應用于數據完整性檢驗
      • 常用算法有:SHA、MD2、MD4、MD5等等
      • </ul> </li> </ul>

        how to work

        在弄清HTTPS如何工作前,我需要了解兩個概念:

        密鑰

        • 加密或解密都需要一個密鑰,正如開門或鎖門都需要一把鑰匙
        • Java中密鑰由KeyGenerator或KeyPairGenerator生成的
        • 對稱密鑰(KeyGenerator生成的)

          • 使用同一個密鑰加密或加密
          </li>
        • 非對稱密鑰(KeyPairGenerator生成的)

          • 公鑰(pulickey)廣泛用做傳播,主要用做加密,私鑰(privatekey)用做解密(公鑰加密后的數據只有私鑰才能解密)
          • </ul> </li> </ul>

            證書

            • 證書是一個許可證,用來證明這個證書的可信賴的
            • 證書中可能內置密鑰
            • android系統內置了很多證書,證書之間存在一定信任關系,信任是嵌套的,為了確保密鑰的更高安全性

            了解上面兩個概念后,我們接著來講HTTPS如何通信?前面在定義HTTPS時講到HTTPS是一種加密的HTTP,為了更高的安全性,沒錯,密鑰和證書正是特定設計來實現HTTPS安全通信的。

            說到安全通信,我們可能先想到對稱加密算法,思路如下:

            • 將數據加密
            • 將加密后的數據和密鑰同時傳給服務器
            • 服務器利用傳來的密鑰解密數據

            以上這種方案存在很大漏洞,假如加密后的數據和密鑰被黑客給截獲,黑客拿著密鑰直接把加密后的數據給解密了,這樣數據就泄漏出去了。

            1132780-f58fe3a5c5a7c281.jpg

            既然對稱算法不行,那就來試試非對稱算法,思路如下:

            • 服務器將公鑰發給客戶端

            • 客戶端將數據采用公鑰加密然后發送給服務器

            • 服務器收到客戶端加密數據,用私鑰解密數據

            以上這個方案貌似不錯,看過前面加密算法說明的童鞋應該清楚非對稱算法有缺陷,就是加密、解密過程較慢、耗時多,影響用戶體驗。

            1132780-4e0c4064e76528b6.jpg

            那有木有更好的方案呢?必須有啦,HTTPS最終采用的安全通信方案,大家看清楚啦

             

            1132780-2d7d1306d1b86b65.jpg

            思路如下:

            • 服務器生成一對非對稱加密密鑰:公鑰(publickey)、私鑰(privatekey)

            • 服務器將公鑰(publickey)發送給客戶端

            • 客戶端生成對稱加密密鑰(clientkey),利用clientkey給數據加密

            • 客戶端使用服務器傳來的公鑰(publickey)給clientkey進行加密、此時clientkey是安全的,因為只有服務器才有私鑰(private)能解密它

            • 客戶端發送用clientkey加密過的數據和用公鑰(publickey)加密過的clientkey給服務器

            • 服務器使用私鑰(privatekey)解密用公鑰(publickey)加密過的clientkey,得到真的clientkey

            • 使用clientkey解密數據,這樣數據就安全地從客戶端傳給服務器了。

            總結

            由于對稱加密算法比非對稱加密算法效率高、性能好,https決定采用對稱加密算法來加密解密數據,使用非對稱加密算法加密解密對稱算法密鑰,以確保通信安全。

            1132780-253900d649118aa0.jpg

             

             

             

            來自:http://www.jianshu.com/p/756e100c1c2e

             

 本文由用戶 hyur9926 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!