天天看點

實作HTTPS系列第二彈之【非對稱加密,公鑰私鑰,數字簽名,OpenSSL及HTTPS等概念簡介】

博文說明【前言】:   

     本文将通過個人口吻介紹有關非對稱加密,公鑰私鑰,數字簽名,OpenSSL及HTTPS等簡單概念,在目前時間點【2017年5月8号】下,所掌握的技術水準有限,可能會存在不少知識了解不夠深入或全面,望大家指出問題共同交流,在後續工作及學習中如發現本文内容與實際情況有所偏差,将會完善該博文内容。

    關于http以及web等概念,歡迎看我的上一篇博文:

實作HTTPS系列第一彈之【http,https,www,web等的差別含義】

本文參考文獻引用連結:

2、https://zh.m.wikipedia.org/zh-hans/%E5%85%AC%E5%BC%80%E5%AF%86%E9%92%A5%E5%8A%A0%E5%AF%86

4、https://www.zhihu.com/question/25912483

  正文:

    HTTPS是一種網絡協定,等于HTTP+TLS(由于曆史原因,SSL3.0之後就被TLS1.0替代了)。

    而OpenSSL是一套用于實作TLS/SSL協定的開源工具集,主要有兩個特性:

    1、實作了ssl2,ssl3,TLSv1,TLSv1.1,TLSv1.2協定。

    2、實作目前常用的加密算法。

    沒有一個非常精準的方法來判斷HTTPS是否使用openssl,保守估計至少70%以上的網站是使用openssl的。而windows系列的伺服器包括IIS,windows server等都是使用其他方式實作,沒有使用openssl

    原創案例-實戰分析1:

    接着拿我們宮保雞丁的例子來說,在這裡,宮保雞丁這道菜不放鹽的情況下就是HTTP(肯定能吃,但是不好吃),放鹽的情況下就是HTTPS,那麼這個多出來的S也就是鹽也就是我們的TLS協定,我們知道我們去超市買鹽,這個鹽的分類就多了,有便宜的有貴的,有海鹽有礦鹽等等等等。那麼這個openssl就是我們最經常買的銷量最大的中鹽集團(反正我是吃他家的海鹽),TLS協定就是中鹽集團生産的某款食鹽。

    總結:也即OpenSSL 是 SSL /TLS的一個開源實作,跟 HTTP 沒有關系。你說不加鹽的宮保雞丁和鹽有什麼關系?

    轉載案例-實戰分析2:

    我看到有人舉下面這個例子,覺得也是甚好,大家參考下:

    1、HTTPS與SSL的關系就像HTTP與TCP的關系

    2、SSL/TLS與OpenSSL的關系就像作業系統與Windows的關系

問題1:那麼為什麼現在不用SSL,要使用TLS協定了呢?

    SSL協定由美國 NetScape公司開發, 1996年釋出了V3.0版本(最新也是最後版本)。SSL 3.0 已經存在超過 15 年之久,目前絕大多數浏覽器都支援該版本。通常使用者的浏覽器都使用新版本的安全協定與伺服器進行連接配接,為了保持相容性,當浏覽器安全協定連接配接失敗的時候,就會轉而嘗試老版本的安全協定進行連接配接,其中就包括SSL 3.0。但是在SSL協定級别,會出現Poodle攻擊,原理就是黑客故意制造安全協定連接配接失敗的情況,觸發浏覽器從TLS往下降級使用 SSL 3.0,然後使用特殊的手段,從 SSL 3.0 覆寫的安全連接配接下提取到一定位元組長度的隐私資訊。是以,在谷歌40版本之後,谷歌就取消對了SSL的向下支援。是以現在主流的加密協定使用的都是TLS

    以上内容簡單介紹了HTTPS及OpenSSL之間的關系,接下來我們講解加密相關知識

---------------------------------------------【分割線】------------------------------------------------

    那麼什麼非對稱機密,什麼是公鑰私鑰?

    非對稱加密:(asymmetric cryptography)也稱為公開密鑰加密(public-key cryptography)

這是一種密碼學算法類型,在這種類型中,需要一對密鑰,一個是私人密鑰,一個是公開密鑰。這兩個密鑰是數學相關,用某個使用者的密鑰加密後的資訊,隻能使用該使用者的解密密鑰才能進行解密檢視。

   根據這種公鑰公開,私鑰隐藏的機制,出現了著名的RSA算法。這是我們在實際應用中最常見的一種公鑰加密算法(原理是兩個大質數(p,q)乘積(n)難以逆向求解),也就是說公鑰使用這種算法對資料進行加密,私鑰也用這種算法對資料進行解密。

    注意1:隻是知道其中一個的密鑰(密鑰在這裡泛指公鑰和私鑰,如沒有特殊說明,公鑰和私鑰均可以被稱為密鑰),不能計算出另一個密鑰,是以,對外公布一個密鑰的内容,不會影響另一個密鑰的安全性,也就是說即使公鑰在網上被截獲,如果沒有與之比對的私鑰,也無法解密。在這裡,我們将對外公布的密鑰稱之為公鑰,不公開的對内保留的密鑰稱之為私鑰。

    注意2:我們也可以使用私鑰進行加密,然後用公鑰進行解密,沒有明确說隻能使用公鑰加密資料。這種特殊情況我們下面會說到。

    對稱加密:在這種加密類型中,加密解密都是同一個密鑰,也即使用者加密資料使用密鑰A,其他使用者也是使用該密鑰A解密該加密資料。其中比較著名對稱加密算法是AES算法。

    公鑰加密系統也就是非對稱加密的提出是為了解決對稱加密中密鑰傳遞的問題。例如我們現在使用對稱加密,隻有一個密鑰K,加密解密都用它。A要給B發送一段保密資訊,A可以用K進行加密,把密文發送給B,B再用K解密,得到資訊。

    在這裡有一個存在風險的地方:B要解密隻能用K,而K開始隻有A知道,是以A要告訴B密鑰K隻能是通過明文形式,既然是明文傳遞,就存在被人截取的風險。

    而公鑰加密系統裡面就不存在這個問題了。它的思路是加密與解密用不同的密鑰,這樣就不用傳遞解密的密鑰了。關鍵是不用傳遞解密時所用的密鑰

    注意3:我們在實際對資料進行加密傳輸的時候,真正使用方式的是是對稱加密,為什麼不使用非對稱加密方式來加密資料呢,主要是因為非對稱加密算法的時間成本太大(時間耗費為對稱加密方式1000倍以上),是以實際情況是:我們使用非對稱加密方式加密傳輸的資料實際上是對稱密鑰所用的密鑰,而且隻是在剛開始互動的時候使用,後續一直使用對稱加密方式對資料進行加密。

    數字簽名:但是如果我們使用私鑰進行加密資料(私鑰永遠不對外釋出),也可以使用公鑰對其進行解密,這用于客戶驗證擁有私鑰的一方釋出的資料或者是檔案是否是準确完整的,擁有公鑰的接收者可以判斷這段資料,由此得知釋出這段資料的真實身份是否确實是擁有私鑰的某人,詳細介紹将在下一篇博文闡述,這裡隻是引入概念。

    總結1:數字簽名=使用私鑰加密的自身資料。目的是供其他驗證我的身份合法性

全文總結1:

    使用公鑰加密資料,使用私鑰解密資料的這種操作就叫做非對稱加密

    加密:既然是加密,那麼肯定是不希望别人知道我的消息,是以隻有我能解密,那麼可以得出是使用公鑰負責加密,私鑰負責解密。

    簽名:既然是簽名,那肯定是不希望有人冒充我發消息,是以隻有我才能釋出這個簽名,是以可以得出私鑰負責簽名,公鑰負責驗證。

全文總結2:

    數字簽名是将發送資訊的摘要資訊用發送者的私鑰加密,與原文一起傳送給接收者。接收者隻有用發送者的公鑰(數字證書,所有人都可以擷取)才能解密被加密的摘要資訊(數字簽名)。然後接受者用HASH函數對收到的原文産生一個摘要資訊,與解密的摘要資訊對比,如果相同,則說明收到的資訊是完整的,在傳輸過程中沒有被修改,否則說明資訊被修改過,是以數字簽名能夠驗證資訊的完整性與正确性。整個過程也即使用數字證書去驗證數字簽名

結尾:

    下一篇:實作HTTPS系列第三彈之【數字簽名,數字證書,CA認證等概念了解】

    博文位址:http://watchmen.blog.51cto.com/6091957/1924747

     感謝閱讀,祝有收獲的一天,謝謝!

      本文轉自1清風攬月1  51CTO部落格,原文連結:http://blog.51cto.com/watchmen/1923426,如需轉載請自行聯系原作者

繼續閱讀