HTTPS以及golang使用方式

把有道雲筆記中的筆記搬運過來golang

HTTPS相關知識以及在golang中的應用

最近簡單學習了HTTPS,並在golang中實踐了一下,如今把學到的知識記錄下來。算法

一些簡單的概念,能夠自行百度百科chrome

  • HTTPS簡介:HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全爲目標的HTTP通道,簡單講是HTTP的安全版。
  • HTTPS與HTTP的區別:HTTP是以明文的方式來傳遞數據的,HTTPS是在HTTP的基礎上加入了SSL協議的加密傳輸方式。
  • CA(Certificate Authority):ca就是咱們所說的證書頒發機構,ca是可信的權威機構,其實就是個辦證的,給他錢,他給咱們辦證,固然了辦的都是真證。ca機構也是有證書的,咱們的電腦中自帶了不少ca機構的證書,這些證書被稱爲「根證書」,根證書的做用就是檢查別人的證是否是合法的。系統中的根證書如圖:

clipboard.png

  • 服務端證書:在使用https時,服務端要載入服務端證書和服務端私鑰,這裏涉及到一些非對稱加密的知識(簡單講,非對稱加密就是有兩個鑰匙,公鑰和私鑰,用公鑰加密用私鑰解密,這樣會安全一些,好比說,客戶端要向服務器傳消息,能夠給服務器一個請求,拿到服務器的公鑰,用服務器的公鑰把數據加密,加密後的數據傳給服務器,服務器收到以後用服務器端的私鑰解密,拿到數據,非對稱開銷大,不適合大數據量傳輸)能夠自行搜索學習一下。服務端證書就是上面提到的辦證(CA)的給你辦的證,你得有這個證,人家才以爲你這人靠譜,證書中呢有一些信息,例如服務端公鑰,誰給你辦的證(CA的簽名)
  • 服務端私鑰:這就是解密一些客戶端發到服務器來的前置數據所用的私鑰。

客戶端和服務器通訊時兩者須要的數據:瀏覽器

clipboard.png

客戶端和服務器通訊的流程:安全

clipboard.png

在golang中的使用:服務器

首先咱們要有一個服務於https的服務端,經過golang的http包,很簡單的就能完成https服務端的構建學習

func main() {

    http.HandleFunc("/test", func(writer http.ResponseWriter, request *http.Request) {
        defer request.Body.Close()
        writer.Write([]byte("hello world"))
    })

    if err := http.ListenAndServeTLS(":8080", certPath, keyPath, nil); err != nil {
        panic(err)
    }
}

certPath和keyPath分別是服務端證書和服務端私鑰的路徑,在這裏我用openssl生成了一個CA根證書,用這個CA根證書籤發了服務器證書。大數據

而後我將我用openssl生成的CA根證書導入瀏覽器中並信任該CA,而後重啓chrome(不要隨便導入未知的CA根證書,這很危險)加密

而後咱們經過瀏覽器訪問https://localhost:8080/testspa

ok,已經能夠正常通訊了。

若是沒有把根證書導入到咱們的電腦中並設置信任會怎麼樣呢?下面我將根證書設爲不信任。

再次訪問https://localhost:8080/test

瀏覽器會提示你這個連接不是安全的https連接

數據摘要:將數據作hash以後獲得的就是數據摘要。經常使用的算法有md5,sha1等等。

簽名:簽名就是用私鑰對數據摘要進行加密,這個操做就叫作簽名。

簽名解決的問題:在非對稱加密中,加密公鑰是公開的,AB兩個終端創建鏈接,發送的公鑰可能會被其餘人獲取到,這我的獲取到公鑰後可能會假裝成AB其中一人向另外一我的發送加密後的請求。爲了防止有人冒充,引入了簽名的機制來驗證發送人是否合法。

簽名驗證問題:在非對稱加密中,公鑰用於數據加密,私鑰用於數據解密,私鑰也能夠用於對數據簽名,用公鑰來驗證簽名。

簽名驗證的流程:非對稱加密中,A要向B傳送密文,B要驗證接收到的數據是不是A發送的,因此A須要在向B發送密文數據時一塊兒發送一個簽名。首先將要發送的數據明文作hash,獲得數據摘要,再用私鑰加密數據摘要,生成簽名,將簽名和已加密的密文,一塊兒發送給B,B拿到密文和簽名後,用私鑰對密文進行解密,解密後得到明文,對明文作hash生成數據摘要,B將A發送來的簽名用A的公鑰進行解密,解密後得到的數據摘要和B本身生成的數據摘要作比對,若是相同就是沒有被篡改過的數據。

相關文章
相關標籤/搜索