九 大話HTTP協議 加密問題

2021-10-20 19:12:17 字數 4066 閱讀 6133

實際上,用https的方式即可,輸入使用者名稱密碼進行驗證,並且現在也不是每次都要輸入使用者名稱密碼,作業系統會記憶,不過也可以自己去配置使用者名稱密碼,達到避免每次https方式clone或push都要輸入密碼的尷尬。(關於https和ssh兩種方式,可自行谷歌搜尋區別)

我們回到ssh方式,初學者可能不知道發生了什麼,按照網上的教程進行了如下的配置:

git config --global user.name "你的git使用者名稱"

git config --global user.email "你的git所用郵箱"

配置好之後可以看下:

$ git config --global  --list

user.email=你的git所用郵箱

user.name=你的git使用者名稱

ssh-keygen -t rsa -c "這裡換上你的郵箱"

簡單來說,就是不斷回車即可。我的電腦是windows系統,我們可以看到生成的金鑰對放在了/c/users/fossi/.ssh/id_rsa

在指定的儲存路徑下會生成2個名為id_rsaid_rsa.pub的檔案,接下來就很簡單了,將id_rsa.pub中的內容拷貝到git上。

好了,這次我們大功告成了。耶!

可是,以上是git的一些配置,跟我本篇文章有半毛錢關係?實際上我們完成了ssh公鑰登陸。後續你就再也不用重複輸入賬號密碼,並且我們上面用到的一對金鑰,實際上用到了非對稱加密。這個關鍵字是我們本篇文章的核心討論點。

此外,我們還明白了git配置的這一步到底是用來幹啥的,也是大大的收穫。

關於ssh公鑰登陸原理,我們用更加明顯的對比來說明。我們登陸過伺服器的人知道,可以通過ssh協議登陸:

ssh user@host

主要有兩種登入方式:第一種為密碼口令登入,第二種為公鑰登入。

密碼口令登入,通過密碼進行登入,主要流程為:

公鑰登入是為了解決每次登入伺服器都要輸入密碼的問題,流行使用rsa加密方案,主要流程包含:

上文提到了rsa加密方案,就是主流的非對稱加密的演算法方案。既然有非對稱,必然也會有對稱,下面我們進入加密學世界。

在密碼學中,明文是指傳送方想要接收方獲得的可讀資訊,明文經過加密所產生的資訊被稱為密文,而密文經過解密還原得來的資訊就是明文。如果在網際網路上傳輸明文,那是很危險的。比如這個場景:

如果有乙個手段高明的黑客竊聽甚至還順便篡改了密碼,那真的就完犢子了:

回到我們普通人的世界,我們可能會通過網頁去購物,可能會通過網頁去買票,試想,你的賬號被竊聽,甚至你輸入的銀行卡號和密碼也被竊聽,是一件多麼恐怖的事情!宛若裸泳在這個紛繁的網路世界裡,不禁讓人膽顫!

怎麼辦呢?加密!

我們先來了解比較簡單的對稱加密。簡單並不意味著不保險(有很安全的對稱加密演算法)。簡單意味著功能比較好理解。

對稱加密演算法用乙個金鑰來加密資訊,同樣地,也是用這乙個金鑰來解密。注意,全程只有乙個金鑰。

因此,不難理解,對稱加密中「對稱」的意思就是指加密和解密使用的是同乙個金鑰。因此加密方和解密方都需要知道這個金鑰。

只要黑客不知道金鑰是什麼,那麼就算被他竊聽到,他也無法解密出明文。是不是超級簡單?對稱加密比較出名的是 aes 演算法。

但是問題就出在這個金鑰本身安全性上,因為兩端都需要知道這個金鑰才行,可能某一方把金鑰傳給對方才行。

但是他們怎麼傳遞呢?假如他們傳遞金鑰用的是明文,那麼黑客照樣可以截獲金鑰,接下來就可以解密任何傳遞的加密資訊了。因此,對稱加密雖然強大,但是有乙個致命的缺陷:必須謹慎地傳遞金鑰。但這幾乎是不可能的:因為首先得把金鑰傳遞過去。

讓我想起密碼學中的乙個根本性原則:kerckhoffs原則。這個原則說的是:密碼體制的安全性不依賴於演算法的保密,而僅僅依賴於金鑰的保密。

既然對稱加密有點問題,我們先來看看非對稱加密。

非對稱是相對於對稱而言的,他兩一對比就知道啦:

在非對稱加密中有兩個金鑰:

公鑰只用來加密。因此,用非對稱加密的演算法,我們就只能用私鑰來解密。

回到我們一開始配置git公鑰登入的時候,我們是不是生成了一對公鑰和私鑰?非對稱加密也很簡單,假設我們的公鑰和私鑰分別為:

公鑰可以在網路上以明文傳輸,畢竟是公開的金鑰嘛。即使公鑰被不懷好意的黑客截獲也無所謂。但是,用於解密的私鑰卻不能被公開傳輸,需要保管好。

非對稱加密最出名的就是 rsa 演算法。

1977 年,三位數學家 rivest、shamir 和 adleman 設計了一種演算法,可以實現非對稱加密。這種演算法用他們三個人的名字的首字母命名,叫做 rsa 演算法。

非對稱加密有個致命弱點:非對稱加密太消耗電腦資源了。非對稱加密比對稱加密要慢大概 100 ~ 1000 倍。

所以,我們能不能取兩者長處共謀大計呢?

我們通過ssh協議來學習下如何組合使用兄弟兩!

ssh 是英語 secure shell 的縮寫,直譯過來就是「安全的 shell」,ssh 協議本身比較複雜,不去深究,我們就來大概了解下他是如何運用加密方法來保護資料的。

ssh 以如下順序使用兩種加密方法:非對稱加密和對稱加密。

下面一步一步來說明 ssh 是如何建立乙個安全的通訊管道的。

第一步:我們要交換乙個對稱加密用的金鑰。但是我們不能以明文方式傳遞,我們很容易想到,用非對稱加密的方式來加密用於對稱加密的金鑰。伺服器將非對稱加密的公鑰以明文方式傳輸給客戶機,使客戶機可以用公鈅來加密。

我們還是用上面的公鑰和私鑰來說明。

第二步:客戶機收到伺服器傳給它的公鑰之後,就會用公鑰來加密自己的對稱加密的金鑰,假設是對稱加密用的金鑰是superkey。對稱金鑰得到加密後,只有伺服器的私鑰才能解密,拿到superkey

最後,客戶機和伺服器都知道了對稱加密的金鑰是 superkey,關鍵是他們從沒在網路間以明文傳遞過這個金鑰。

因此,從現在開始他們可以用對稱加密的方式互相傳送加密的資訊,不用再擔心被黑客獲取資訊了。

不過做到這一步真的可以高枕無憂了嗎?

試想下,給你公鑰的不是真實伺服器b,而是黑客呢?

這就是大名鼎鼎的中間人攻擊!下篇文章來說說https是如何解決中間人攻擊問題的。

八 大話HTTP協議 Nginx HTTPS搭建

在動手之前,最好有乙個屬於自己的雲伺服器,並且擁有乙個備案成功的網域名稱。對於個人學習和做出像樣成品還是比較重要的。基於此,我們可以進行下面的https服務的搭建,本篇文章主要是基於nginx進行的配置,其他比如tomcat下的配置也都可以試驗。本篇文章暫且不去 https原理,我們先把這個小鎖整出...

0001 大話資料 (起源 特徵)

邏輯主線 1.現實世界的事物 資料與資料間的關係 資料模型 2.行業領域 資料建模 資料的起源 源頭,待拜讀名著後再完善這部分。一 資料的 先從社會生活角度來分析吧,社會生活中,各領域的存在著大量的資料,資料具有什麼樣的特定特徵呢?我們需要從哪些角度去認知它們呢?這裡的資料主要闡述資料的屬性,而暫不...

0002 大話資料 (資料模型)

邏輯主線 1.現實世界事物與事物間的關係 資料與資料間的關係 資料模型 2.行業領域 資料建模 資料模型 是乙個描述資料 資料聯絡 資料語義以及一致性約束的概念工具的集合,提供了一種描述物理層 邏輯層 檢視層資料庫的設計的方式。資料模型分類 1.關係模型 關係模型用表的集合來表示資料和資料間的聯絡,...