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