物聯(lián)網云平臺加密、證書的那些事
OpenPGP協(xié)議/標準
加密和證書的概念介紹完了,再來了解一個行業(yè)標準:OpenPGP。
OpenPGP是什么?
OpenPGP是一種非專有協(xié)議,為加密消息、簽名、私鑰和用于交換公鑰的證書定義了統(tǒng)一標準。
OpenPGP協(xié)議的實現(xiàn)
OpenPGP協(xié)議有2個實現(xiàn):
PGP(Pretty Good Privacy)GPG(GNU Privacy Guard)
PGP是一個加密程序,為數(shù)據通信提供了加密和驗證功能,通常用于簽名、加密和解密文本、電子郵件和文件。
GPG是PGP的開源實現(xiàn)。
OpenPGP的使用流程
Step1: 公布自己的公鑰
每個人把自己的公鑰上傳到公鑰服務器上(subkeys.pgp.net),然后通過交換機制,所有的公鑰服務器最終都會包含你的公鑰,就類似域名服務器同步域名解析信息一樣。
由于公鑰服務器沒有檢查機制,任何人都可以用我的名義上傳公鑰,所以沒有辦法來保證服務器上的公鑰一定是可靠性。通常,我可以在網站上公布一個公鑰指紋,讓其他人下載我的公鑰之后,計算一下公鑰指紋,然后與我公布的指紋進行比對,以此來確認證書的有效性。
Step2: 獲取別人的公鑰
為了獲得別人的公鑰,可以讓對方直接發(fā)給我,也可以從公鑰服務器上下載。為了安全起見,需要對下載的公鑰使用其他機制進行安全認證,例如剛才說的指紋。
Step3: 用于加密
用對方的公鑰加密文件,發(fā)送給對方,對方用他自己的私鑰進行解密。
Step4: 用于簽名
用我的私鑰進行加密,把加密后文件發(fā)送給對方,對方用我的公鑰進行解密,只要能正確解密,就證明這個文件的確是我加密的。
SSL/TLS
SSL全稱是Secure Socket Layer(安全套階層協(xié)議),它是一個安全協(xié)議,目的是用來為互聯(lián)網提供安全的數(shù)據傳輸。
SSL在工作過程中,就利用了前面描述的概念:對稱加密、非對稱加密、證書等。如果前面的概念都梳理清楚了,那么理解SSL也就不成問題了。
SSL協(xié)議有1,2,3這個三個版本,TLS是SSL V3標準化之后的產物。事實上現(xiàn)在用的都是TLS,但是大家都習慣了SSL這個稱呼。
協(xié)議分層
SSL協(xié)議最大的優(yōu)點就是與應用層無關,在SSL協(xié)議的上層,可以運行一些高層應用協(xié)議,例如:HTTP, FTP, TELNET...,也就是說這些高層協(xié)議可以透明的建立在SSL協(xié)議層之上。
握手過程
SSL使用X.509標準,握手就是指客戶端與服務端在通信的開始階段進行鑒權和協(xié)商,最終目的是:
確認對方是合法的通信對象;與對方協(xié)商得到對稱加密秘鑰。
我們來一步一步梳理握手過程:
Step1
Client向Server發(fā)送如下信息:
隨機數(shù)1;
Client端支持的SSL版本號;
Client端支持的加密算法列表。
Step2
Server分析接收到的信息,返回如下信息給Client:
隨機數(shù)2;
選擇的加密算法;
Server證書
Step3
Client端驗證Server發(fā)來的證書是否有效,具體過程上面已經描述過。
如果驗證失敗,通信結束;如果驗證通過,就產生隨機數(shù)3,并使用剛才的隨機數(shù)1、隨機數(shù)2,然后用選擇的算法生成一個對稱加密秘鑰,這個秘鑰就用于后面正常的數(shù)據通信中。
然后發(fā)送如下信息給Server:
隨機數(shù)3,并且用server證書中的公鑰進行加密;
此時,Cliend端的握手流程結束,因為已經達到了握手的最終目的:確認Server合法,得到對稱加密秘鑰。
Step4
Server端在接收到加密后的隨機數(shù)3時,用自己的私鑰進行解密,然后和之前的隨機數(shù)1、隨機數(shù)2一起,使用相同的算法生成對稱加密秘鑰。
至此,Server端的握手過程也就結束,下面就可以用對稱加密秘鑰來對數(shù)據進行加密了。
注意:上面描述的握手過程中是單向認證,也就是Client端驗證Server是否合法的。如果需要雙向認證,那么客戶端也應該把自己的證書發(fā)送給Server,然后Server來驗證這個證書是否合法,確認證書合法之后才繼續(xù)執(zhí)行后面面的握手流程。
HTTPS與SSL的關系
HTTPS拆開來就是:HTTP+SSL,就是在HTTP的下面增加了SSL安全傳輸協(xié)議層,在瀏覽器連接到服務器之后,就執(zhí)行上面描述的SSL握手過程。握手結束之后,雙方得到對稱加密秘鑰,在HTTP協(xié)議看來是明文傳輸數(shù)據,下面的SSL層對數(shù)據進行加密和解密。
OpenSSL OpenSSL是什么?
上面描述的SSL中這么多的東西都是協(xié)議(或者稱為標準),協(xié)議只是規(guī)定了應該怎么做,但是具體的代碼實現(xiàn)應該由誰來做呢?我們在寫相關的SSL程序時好像從來沒有實現(xiàn)過這個協(xié)議,都是直接調用第三方提供的庫就達到了加密傳輸?shù)哪康。當然?如果你實現(xiàn)過SSL協(xié)議,請允許我對你表示佩服,給你一萬個贊!
在編程領域,永遠都存在熱心腸的人!OpenSSL就是一個免費的SSL/TLS實現(xiàn),就是說:OpenSSL實現(xiàn)了SSL/TLS協(xié)議中定義的所有功能,包括:
SSL2
SSL3
TLSv1
TLSv1.1
TLSv1.2
而且,OpenSSL是用C語言開發(fā)的,具有優(yōu)秀的跨平臺特性,在Linux、Windows、BSD、MAC等平臺上可以執(zhí)行。
具體來說,OpenSSL實現(xiàn)中,包括下面幾個功能模塊:
密碼算法庫
密碼算法庫中包括:
對稱加密算法: AES、DES等。非對稱加密算法: DH、RSA、DSA、EC等。
信息摘要算法
信息摘要算法包括:MD5、SHA等。
秘鑰和證書管理
OpenSSL提供的CA應用程序就是一個小型的證書管理中心,實現(xiàn)了證書簽發(fā)的整個流程和證書管理的大部分機制,我們在學習的時候一般都會用OpenSSL中提供的CA程序來生成秘鑰對、自簽名等等。具體的內容包括:
證書秘鑰產生、請求產生、證書簽發(fā)、吊銷和驗證功能;
對證書的X.509標準解碼、PKCS#12/PKCS#7格式的編解碼;
提供了產生各種秘鑰對的函數(shù);
SSL協(xié)議庫
實現(xiàn)了SSLv2、SSLv3、TLSv1.0協(xié)議。
應用程序
OpenSSL的應用程序是基于密碼算法庫和SSL協(xié)議庫實現(xiàn)的,是非常好的OpenSSL的API函數(shù)使用范例,主要包括:秘鑰生成、證書管理、格式轉換、數(shù)據加密和簽名、SSL測試以及其他輔助配置功能。
OpenSSH又是什么? SSH
首先說一下SSH:Secure Shell(安全外殼協(xié)議),又是一個協(xié)議,用來實現(xiàn)遠程登錄系統(tǒng),我們通常利用SSH來傳輸命令行界面和遠程執(zhí)行命令。
比如:在調試一個ARM系統(tǒng)時,可以通過串口助手連接到ARM板子上;但是更常用的調試場景是在PC機上遠程登錄到ARM系統(tǒng)中,執(zhí)行ARM中的任何指令,這就是利用SSH來實現(xiàn)的。
SSH提供2種級別的安全驗證:
基于密碼;
基于秘鑰。
SSH中基于口令的安全驗證
只需要知道賬號和密碼,就可以遠程登錄到系統(tǒng),我們一般常用的就是這用方式。但是不能保證我正在連接的設備就是我想連接的那臺設備,可能會有別的服務器冒充真正的服務器,也就是受到“中間人”這種方式的攻擊。
當然還經常遇到另一種錯誤:在局域網中有多臺設備,本想遠程連接到設備A中,由于IP地址記錯了,結果遠程登錄到另外一臺設備B上了,如果你的同事也正在調試設備B,接下來就是悲劇發(fā)生的時刻!
SSH中基于秘鑰的安全認證
Step1
首先為自己創(chuàng)建一個秘鑰對,并提前把公鑰放在需要訪問的服務器上,例如:放在賬號的家目錄中。
Step2
通過客戶端遠程登錄到服務器,把自己的公鑰發(fā)給服務器,并請服務器進行安全驗證。
Step3
服務器接收到請求后,在登錄賬號的家目錄下查找公鑰,然后與接收到的公鑰進行比對。
Step4
如果比對不一致,通信結束;如果比對一致,服務器就用公鑰加密一段數(shù)據(challenge),并發(fā)送給客戶端。
Step5
客戶端接收到challenge,用私鑰進行解密,然后把結果發(fā)給服務器。
Step6
服務器把接收到的結果與Step4中的數(shù)據進行比對,如果一致則驗證通過。
SSH協(xié)議的實現(xiàn)
既然SSH是一個協(xié)議,那么就一定存在對應的實現(xiàn),這就是OpenSSH,它是一個免費開源的SSH實現(xiàn)。
OpenSSH實現(xiàn)中,利用了OpenSSL中的加密和算法庫函數(shù),這就是它倆之間的關系。
總結
到這里,與加密、證書相關的基礎概念都介紹完畢了,一不小心超過了一萬字,不知道你是否有所收獲。
如果你是初次接觸到這些東西,敬請放心,即使現(xiàn)在明白了,一個星期之后肯定忘記一多半了。只有經歷過幾個項目的歷練之后,才會有更深刻的理解和記憶,最后,祝您好運!

請輸入評論內容...
請輸入評論/評論長度6~500個字
圖片新聞