摘要:博文參考概述所有業(yè)務(wù)的正常運(yùn)轉(zhuǎn),離不開(kāi)一個(gè)安全的運(yùn)行環(huán)境,系統(tǒng)安全性直接關(guān)系到業(yè)務(wù)穩(wěn)定可靠以及可用性,本章就介紹一些系統(tǒng)安全相關(guān)的話題。
博文參考
https://segmentfault.com/a/1190000010312601概述
所有業(yè)務(wù)的正常運(yùn)轉(zhuǎn),離不開(kāi)一個(gè)安全的運(yùn)行環(huán)境,系統(tǒng)安全性直接關(guān)系到業(yè)務(wù)穩(wěn)定、可靠、以及可用性,本章就介紹一些系統(tǒng)安全相關(guān)的話題。加密基礎(chǔ)概念 安全的目標(biāo):
保密性:confidentiality 完整性:integrity 可用性:availability攻擊類型:
威脅保密性的攻擊:竊聽(tīng),通信量分析 威脅完整性的攻擊:更改,偽裝,重放,否認(rèn) 威脅可用性的攻擊:拒絕服務(wù)(DoS)為了完成安全的目標(biāo)用到的解決方案
技術(shù):加密和解密 加密和解密: 傳統(tǒng)加密方法:替代加密方法,置換加密方法 現(xiàn)代加密方法:現(xiàn)代塊加密方法 服務(wù):用于低于攻擊的服務(wù),也就是為了上述安全目標(biāo)而特地設(shè)計(jì)的安全服務(wù) 服務(wù): 認(rèn)證機(jī)制 訪問(wèn)控制機(jī)制對(duì)稱加密
對(duì)稱加密:加密和解密使用同一個(gè)秘鑰;但加密算法和解密算法可能不同 工作過(guò)程為: 發(fā)送者將發(fā)送的數(shù)據(jù)利用秘鑰,使用加密的算法加密成明文,發(fā)送給對(duì)方;接收方收到加密的數(shù)據(jù)后,利用同一個(gè)秘鑰,和解密的算法,將數(shù)據(jù)由密文解密成明文 常見(jiàn)的對(duì)稱加密算法: DES:Data Encryption Standard,56位秘鑰 3DES:Triple DES AES:Advanced Encryption Standard,支持128位、192位、256位、384位秘鑰 Blowfish Twofish RC6 CAST5 對(duì)稱加密特性: <1>加密解密使用同一個(gè)秘鑰 <2>將原始數(shù)據(jù)分隔成為固定大小塊,逐個(gè)進(jìn)行加密 對(duì)稱加密的缺陷: <1>秘鑰過(guò)多 <2>秘鑰分發(fā)困難 <3>數(shù)據(jù)來(lái)源無(wú)法確認(rèn)公鑰加密(非對(duì)稱加密):秘鑰分為公鑰和與之配對(duì)的私鑰
公鑰:公鑰從私鑰中提取產(chǎn)生,可以公開(kāi)給所有人;pubkey 私鑰:通過(guò)工具創(chuàng)建,私鑰只能使用則自己留存,必須保證其私密性,secret key 特點(diǎn):用公鑰加密的數(shù)據(jù),只能使用與之配對(duì)的私鑰解密;反之,用私鑰加密的數(shù)據(jù)只能用與之配對(duì)的公鑰解密 用途: 數(shù)字簽名:主要在于讓接收方確認(rèn)發(fā)送方的身份。將數(shù)據(jù)用單項(xiàng)加密(MD5、SHA)算法,得出來(lái)的特征碼,用自己的私鑰進(jìn)行加密,這就是數(shù)字簽名 秘鑰交換:發(fā)送方用對(duì)方的公鑰加密一個(gè)對(duì)稱加密的秘鑰,并發(fā)送給對(duì)方,以實(shí)現(xiàn)秘鑰交換 數(shù)據(jù)加密:一般很少用公鑰加密發(fā)送的數(shù)據(jù)本身,因?yàn)楣€加密的加密效率很低,因此一般用對(duì)稱秘鑰加密要發(fā)送的數(shù)據(jù)本身 公鑰機(jī)密的工作模式: 模式一:公鑰加密,私鑰解密 B將數(shù)據(jù)發(fā)送給A,B就拿A的公鑰對(duì)數(shù)據(jù)進(jìn)行加密,然后將加密后的數(shù)據(jù)發(fā)送給A,那此時(shí),加密后的數(shù)據(jù)只能被A的私鑰進(jìn)行解密,因此,即使有第三方拿到加密的數(shù)據(jù),也無(wú)法完成解密,只有A自己有自己的私鑰,因此實(shí)現(xiàn)了數(shù)據(jù)的保密性 模式二:私鑰加密,公鑰解密 A用自己的私鑰加密一份數(shù)據(jù)給B,加密后的數(shù)據(jù)只能被A的公鑰進(jìn)行解密,因此,如果有第三方拿到加密后的數(shù)據(jù),是能夠解密的,因?yàn)锳的公鑰是公開(kāi)的,任何人都可以拿到,因此可以解密 但此種方式的作用,并不是真正拿來(lái)加密數(shù)據(jù),而是用來(lái)進(jìn)行身份驗(yàn)證(數(shù)字簽名),也就是說(shuō),A用自己的私鑰加密一段數(shù)據(jù)(數(shù)據(jù)不是要發(fā)送的數(shù)據(jù)本身,而是要加密數(shù)據(jù)利用單向加密算法得出來(lái)的特征碼),然后發(fā)送給B,B拿A的私鑰進(jìn)行解密,能夠解密成功,就證明發(fā)送方一定是A,因?yàn)橹挥蠥的公鑰能解開(kāi)A的私鑰;一旦解開(kāi)數(shù)據(jù)后,得到的就是要發(fā)送數(shù)據(jù)的特征碼,等后面真正發(fā)送數(shù)據(jù)后,可以利用該段特征碼,來(lái)驗(yàn)證數(shù)據(jù)的完整性 公鑰加密的常用的算法: RSA:既能實(shí)現(xiàn)數(shù)字簽名,也能實(shí)現(xiàn)加解密 DSA:有時(shí)也被稱為DSS,數(shù)字簽名標(biāo)準(zhǔn)。僅能實(shí)現(xiàn)數(shù)字簽名,不能實(shí)現(xiàn)加解密單向加密:只能加密,不能解密。僅能提取數(shù)據(jù)的特征碼
特性: 定長(zhǎng)輸出:無(wú)論原始數(shù)據(jù)多大,得出的特征碼都是固定長(zhǎng)度的 雪崩效應(yīng):原始數(shù)據(jù)的微小改變,將導(dǎo)致特征碼的巨大變化 功能:主要用來(lái)實(shí)現(xiàn)驗(yàn)證數(shù)據(jù)的完整性 常見(jiàn)的單向加密算法: MD5:Message Digest 5 消息摘要,5版本。128bit定長(zhǎng)輸出 SHA1:Secure Hash Algorithm 1,160位定長(zhǎng)輸出 SHA224、SHA256、SHA384、SHA512秘鑰交換:IKE(Internet Key Exchange)
常見(jiàn)的交換算法: 公鑰加密:用對(duì)方的公鑰加密對(duì)稱秘鑰,這樣對(duì)方就能以自己的私鑰解開(kāi),從而獲得對(duì)稱加密的秘鑰 DH(Deffie-Hellman)算法: <1> A: a,p 協(xié)商生成公開(kāi)的整數(shù)a, 大素?cái)?shù)p B: a,p <2> A:生成隱私數(shù)據(jù) x, (x加密通信的雙方的通信過(guò)程展示A:計(jì)算得出 ( a^y%p) ^x = a^xy%p, 生成為密鑰 B:計(jì)算得出 ( a^x%p) ^y = a^xy%p, 生成為密鑰
A有一段數(shù)據(jù)要發(fā)送給B,A就用單向加密的算法計(jì)算出數(shù)據(jù)的特征碼,而后A用自己的私鑰加密這段特征碼,生成數(shù)字簽名,至此能夠保證數(shù)據(jù)的完整性(通過(guò)比對(duì)特征碼),和身份驗(yàn)證(數(shù)字簽名),但是不能保證數(shù)據(jù)的保密性,因?yàn)閿?shù)據(jù)本身還沒(méi)被加密。 因此,A會(huì)繼續(xù)在原有數(shù)據(jù)和數(shù)字簽名的基礎(chǔ)上,生成一個(gè)一次性的對(duì)稱加密秘鑰,然后利用對(duì)稱加密算法結(jié)合秘鑰,去加密原有數(shù)據(jù)和數(shù)字簽名。然后,A用B的公鑰,對(duì)對(duì)稱加密的秘鑰進(jìn)行加密,并附加到之前利用對(duì)稱加密算法生成的數(shù)據(jù)的后面,然后發(fā)送給B 當(dāng)B收到數(shù)據(jù)后,就用B自己的私鑰解密附加在后面的對(duì)稱加密的秘鑰,從而得到了對(duì)稱加密的秘鑰(這就完成了秘鑰交換,實(shí)際是雙方都知道了對(duì)稱加密的秘鑰的過(guò)程就是秘鑰交換),然后利用對(duì)稱加密的秘鑰進(jìn)一步解開(kāi)數(shù)據(jù)和數(shù)字簽名,然后利用A的公鑰解開(kāi)數(shù)字簽名,得到數(shù)據(jù)本身的特征碼,然后利用同樣的單項(xiàng)加密算法,計(jì)算出收到的數(shù)據(jù)的特征碼,然后比對(duì)特征碼,從而驗(yàn)證數(shù)據(jù)的完整性中間人攻擊:
以上通信過(guò)程中還是有一個(gè)嚴(yán)重的漏洞,就是當(dāng)A和B鍵從來(lái)沒(méi)進(jìn)行過(guò)通信,那么A怎么獲知B的公鑰,或者B怎么獲知A的公鑰。假設(shè)當(dāng)A沒(méi)B的公鑰時(shí),向B發(fā)送請(qǐng)求,要求獲知B的公鑰,但是此時(shí),如果有第三方C獲取到請(qǐng)求后,冒充自己就是B,然后將C自己的公鑰發(fā)送給A,A就認(rèn)為C就是B。而C又會(huì)冒充自己是A,向B進(jìn)行通信,從而也獲取了真正B的公鑰,而此后A和B通信的過(guò)程中,就都會(huì)交由C,數(shù)據(jù)的安全性就無(wú)從保障。這種情況就是中間人攻擊CA和證書(shū)的基礎(chǔ)概念 PKI:Public Key Infranstructure公鑰基礎(chǔ)設(shè)施
由四個(gè)部分組成: 簽證機(jī)構(gòu):CA機(jī)構(gòu) 注冊(cè)機(jī)構(gòu):RA,相當(dāng)于CA的派出機(jī)構(gòu),用于接收注冊(cè)申請(qǐng) 證書(shū)吊銷列表:CRL 證書(shū)存取庫(kù):CBCA的作用
CA:保證通信雙方,能夠可靠的拿到對(duì)方的公鑰(避免中間人攻擊),而設(shè)定的雙方都信任的第三方可信機(jī)構(gòu) A將自己的公鑰提請(qǐng)給CA,CA經(jīng)過(guò)特殊的防偽處理后,將處理后的A的公鑰發(fā)送給A,處理過(guò)后的A的公鑰就稱之為CA證書(shū)。以后,如果B如果請(qǐng)求要A的公鑰,那么A就將CA證書(shū)發(fā)送給B,當(dāng)B拿到證書(shū)后,不會(huì)立馬就任何該證書(shū),而是要驗(yàn)證該證書(shū)是否是合法的,還要驗(yàn)證是否是B信任的CA機(jī)構(gòu)頒發(fā)的,驗(yàn)證完了之后,才會(huì)認(rèn)可 CA證書(shū)一般會(huì)包含:提請(qǐng)證書(shū)的人的名稱,提請(qǐng)人的公鑰,證書(shū)有效期,然后CA機(jī)構(gòu)會(huì)用自己的私鑰,加密以上的一整段數(shù)據(jù)的特征碼,然后將加密后的特征碼(也就是數(shù)字簽名)附加在數(shù)據(jù)之后,這個(gè)整體就是CA證書(shū) CA證書(shū)后面有CA機(jī)構(gòu)用CA機(jī)構(gòu)自己的私鑰對(duì)證書(shū)內(nèi)容部分的特征碼加密的數(shù)據(jù),通信方要解開(kāi)此數(shù)字簽名就需要用到CA自身的公鑰,但是如何獲取到CA機(jī)構(gòu)自己的公鑰,如果直接申請(qǐng),那么此時(shí)又會(huì)存在中間人攻擊的可能,因此,一般是CA機(jī)構(gòu)會(huì)給自己發(fā)一個(gè)CA證書(shū),然后獲取CA自身的證書(shū),一般不能通過(guò)網(wǎng)絡(luò)發(fā)送,因此一般情況下,是線下交易CA證書(shū)格式:
X.509,定義證書(shū)結(jié)構(gòu)和認(rèn)證協(xié)議的標(biāo)準(zhǔn),在X.509的標(biāo)準(zhǔn)中,定義了證書(shū)需要具備的結(jié)構(gòu): 版本號(hào):是X.509的v1還是v2還是v3版本 序列號(hào):CA機(jī)構(gòu)所發(fā)出的證書(shū)的序列號(hào) 簽名算法ID:證書(shū)所使用的算法 發(fā)行者的名稱:CA機(jī)構(gòu)自己的名稱 證書(shū)有效期限 主體名稱:提請(qǐng)CA證書(shū)的用戶的名稱 主體公鑰: 發(fā)行者的唯一標(biāo)識(shí):CA機(jī)構(gòu)的ID 主體的唯一標(biāo)識(shí):提請(qǐng)者的ID 擴(kuò)展信息 發(fā)行者的簽名:CA機(jī)構(gòu)利用自己的私鑰對(duì)以上內(nèi)容的特征碼加密,生成的數(shù)字簽名,將數(shù)字簽名附加在證書(shū)內(nèi)容之后,作為證書(shū)的一部分ssl協(xié)議和openssl命令 SSL協(xié)議:SSL和TLS
SSL:安全套接字層,由Netscape發(fā)布于1994年,分為V1.0、V2.0、V3.0但由于其版權(quán)屬于Netscape公司,且各版本均被爆出有協(xié)議漏洞,因此使用的不多 TLS:Transport Layer Security,傳輸層安全,是國(guó)際互聯(lián)網(wǎng)工程師協(xié)會(huì)發(fā)布的類似于SSL的協(xié)議,其分為V1.0、V1.1、V1.2、V1.3的版本,使用較多的是V1.2的版本TLS的分層設(shè)計(jì):
<1>最底層:基礎(chǔ)算法的原語(yǔ)的實(shí)現(xiàn),如AES、RSA、MD5 <2>向上一層:各種算法的實(shí)現(xiàn),也就是算法的具體實(shí)現(xiàn)的方式 <3>再向上一層:組合算法實(shí)現(xiàn)的半成品 <4>最高層:用各種組件拼裝而成的各種成品密碼學(xué)協(xié)議軟件;SSL協(xié)議的開(kāi)源實(shí)現(xiàn):OpenSSL
OpenSSL由三部分組成: libencrypt庫(kù):加密解密庫(kù),專用于實(shí)現(xiàn)加密解密功能,主要由開(kāi)發(fā)人員使用 libssl庫(kù):用于實(shí)現(xiàn)ssl安全通信機(jī)制的庫(kù),主要由開(kāi)發(fā)人員使用 openssl多用途命令行工具:opensslSSL會(huì)話的主要的三步:
客戶端向服務(wù)器端所要并驗(yàn)證證書(shū)(證書(shū)里面有服務(wù)器端的公鑰信息); 雙方協(xié)商生成對(duì)稱秘鑰; 雙方采用對(duì)稱秘鑰,進(jìn)行加密通信的過(guò)程 會(huì)話過(guò)程后,進(jìn)行斷開(kāi)在SSL會(huì)話之前開(kāi)始之前的雙方Handshake Protocol,SSL握手階段的執(zhí)行流程
也就是雙方在正式開(kāi)始SSL會(huì)話之前的通信前商量加密算法和生成會(huì)話秘鑰階段的詳細(xì)過(guò)程介紹,(以HTTPS協(xié)議為例) <1>第一階段:client-hello 客戶端向服務(wù)器端發(fā)送: 支持的協(xié)議版本,如:tls1.2 客戶端生成一個(gè)隨機(jī)數(shù),用于稍后生成對(duì)稱秘鑰 支持的加密算法,比如AES、RSA、SHA 支持的壓縮算法 <2>第二階段:server-hello 服務(wù)器端向客戶端發(fā)送: 確認(rèn)使用的加密通信的協(xié)議版本,如tls1.2 生成一個(gè)隨機(jī)數(shù),用于稍后生成對(duì)稱秘鑰 確認(rèn)使用的加密算法 向客戶端發(fā)送服務(wù)器證書(shū) 如果有必要,有可能會(huì)向客戶端索要客戶端的證書(shū)(如:當(dāng)客戶端請(qǐng)求的是網(wǎng)銀頁(yè)面時(shí)) <3>第三階段:客戶端收到服務(wù)器端的server-hello后給出的回應(yīng) 驗(yàn)證服務(wù)器證書(shū),如果沒(méi)問(wèn)題,則通過(guò)解密證書(shū)獲取到服務(wù)器的公鑰; 驗(yàn)證的內(nèi)容: 發(fā)證機(jī)構(gòu):驗(yàn)證發(fā)證機(jī)構(gòu)是否是可信的,也就是驗(yàn)證證書(shū)簽名(CA的數(shù)字簽名) 證書(shū)的完整性,也是驗(yàn)證證書(shū)的數(shù)字簽名里面的解密出來(lái)的特征碼 證書(shū)的持有者:驗(yàn)證證書(shū)里面的持有者是否與要訪問(wèn)的頁(yè)面是一致的 證書(shū)有效期 證書(shū)是否被吊銷 發(fā)送以下信息給服務(wù)器端: 一個(gè)隨機(jī)數(shù),用于生成對(duì)稱秘鑰 編碼變更通知:表示隨后的信息都將用雙方商定的加密方法和秘鑰發(fā)送 客戶端握手結(jié)束通知:表示客戶端在正式通信前的握手階段結(jié)束 <4>第四階段:服務(wù)器端 收到客戶端發(fā)來(lái)的最后一個(gè)隨機(jī)數(shù)后,利用含此隨機(jī)數(shù)在內(nèi)的一共三個(gè)隨機(jī)數(shù)生成對(duì)稱秘鑰; 向客戶端發(fā)送以下信息: 編碼變更通知:表示隨后的信息都將用雙方商定的加密方法和秘鑰發(fā)送 服務(wù)器端握手結(jié)束通知:表示服務(wù)器端握手階段已經(jīng)結(jié)束基于SSL的通信的實(shí)現(xiàn)過(guò)程整理總結(jié):
A、B雙方要進(jìn)行通信時(shí):A為客戶端,B為服務(wù)器端 <1>A發(fā)送hello信息給B,B接收后,發(fā)送hello信息給A,此時(shí)為雙方建立通信前的確認(rèn),需要協(xié)商雙方真正通信時(shí)所用到的加密算法,包括單向加密、對(duì)稱加密、公鑰加密、秘鑰交換用的方法 <2>A請(qǐng)求B的證書(shū),B于是將自己的證書(shū)(CA處理后的公鑰)發(fā)送給A 一般情況下,客戶端不會(huì)有證書(shū)提供給服務(wù)器端,因?yàn)橐环矫媸亲C書(shū)的使用費(fèi)使得客戶端不會(huì)去用,另一方面客戶端訪問(wèn)服務(wù)器端的時(shí)候,一般不會(huì)驗(yàn)證客戶端的身份,比如訪問(wèn)某網(wǎng)站,網(wǎng)站不會(huì)要求客戶端有證書(shū)才響應(yīng)內(nèi)容給客戶端,而客戶端是要驗(yàn)證服務(wù)器端的證書(shū)的,因?yàn)闉榱朔乐乖L問(wèn)的網(wǎng)站的正確性,防止釣魚(yú)網(wǎng)站等。 但有時(shí)服務(wù)器端也會(huì)驗(yàn)證客戶端的證書(shū),比如當(dāng)客戶端訪問(wèn)的是網(wǎng)銀頁(yè)面的時(shí)候,會(huì)驗(yàn)證證書(shū),當(dāng)我們?nèi)ャy行開(kāi)通網(wǎng)銀的時(shí)候,一般會(huì)有個(gè)加密狗之類的東西,其實(shí)里面存儲(chǔ)的就是用戶自己的ca證書(shū),只是一般該ca證書(shū)的頒發(fā)機(jī)構(gòu)不是市面上公認(rèn)的CA機(jī)構(gòu),而是銀行自己建的一個(gè)CA簽發(fā)機(jī)構(gòu),僅對(duì)自己銀行內(nèi)部有效 <3>A收到B的證書(shū)后,驗(yàn)證B的證書(shū),如果驗(yàn)證沒(méi)有問(wèn)題 <4>A驗(yàn)證B的證書(shū)沒(méi)問(wèn)題后,生成一個(gè)隨機(jī)數(shù),作為對(duì)稱加密的秘鑰,A利用雙方之前協(xié)商的秘鑰交換算法(假設(shè)為公鑰加密),則將此秘鑰用B的公鑰加密后發(fā)送給B <5>B收到A發(fā)送過(guò)來(lái)的密文的秘鑰后,利用自己的私鑰,解密得出對(duì)稱加密的秘鑰,然后利用對(duì)稱加密的秘鑰和之前協(xié)商的對(duì)稱加密的算法,給A發(fā)送A所請(qǐng)求的數(shù)據(jù),進(jìn)行正常數(shù)據(jù)的發(fā)送 <6>當(dāng)正常的數(shù)據(jù)傳輸完成后,A(客戶端)請(qǐng)求通信斷開(kāi),服務(wù)器也斷開(kāi),然后通信終止openssl命令
openssl命令行工具有眾多子命令,主要分為三類: 標(biāo)準(zhǔn)命令:enc、ca、req、genrsa… 消息摘要命令(dgst子命令相關(guān)) 加密命令(enc子命令相關(guān)) <1>使用openssl命令行工具完成對(duì)稱加密: 工具:openssl enc子命令 支持的算法:aes、des、3des等 enc命令的用法: openssl enc -CIPHERNAME -e|d -in /PATH/TO/FILE -out /PATH/TO/FILE 選項(xiàng)解釋: -CIPHERNAME:加密的算法的名稱,可通過(guò)openssl –help查看所支持的加密算法的名稱 -e|d:-e表示加密,-d表示解密 -in /PATH/TO/FILE 要加密的文件 -out /PATH/TO/FILE 加密后的文件 -pass STRING 表示對(duì)稱加密的秘鑰是什么 -a|-base64 表示以base64文本格式進(jìn)行編碼,如果不指定,可能是以二進(jìn)制格式進(jìn)行編碼 如對(duì)/testdir/file1進(jìn)行對(duì)稱加密: openssl enc -des3 -e -a -salt -in /testdir/file1 -out /testdir/jmfile1 輸入后回車,會(huì)要求輸入對(duì)稱加密的秘鑰,輸入完成,即可完成加密 -des3表示采用des3的加密算法,-a表示以base64文本格式進(jìn)行編碼,-salt表示加點(diǎn)雜質(zhì) 解密上面加密的文件: openssl enc -des3 -d -a -salt -in /testdir/jmfile1 -out /testdir/file2 輸入后回車,會(huì)要求輸入對(duì)稱加密的秘鑰,輸入完成,即可完成解密
[root@localhost ~]# echo "1 2 3 4 5" > f1 [root@localhost ~]# cat f1 #原始文件 1 2 3 4 5 [root@localhost ~]# openssl enc -des3 -e -a -salt -in f1 -out f1.m enter des-ede3-cbc encryption password: #使用3des對(duì)稱加密算法,對(duì)原始文件進(jìn)行加密,輸入對(duì)稱加密的秘鑰 Verifying - enter des-ede3-cbc encryption password: [root@localhost ~]# cat f1.m #加密后文件內(nèi)容 U2FsdGVkX1+C+zxYYZ2mnH/Jhae8XNmly3SzFVeT738= [root@localhost ~]# openssl enc -des3 -d -a -salt -in f1.m -out f2 enter des-ede3-cbc decryption password: #解密,要求輸入加密時(shí)使用的對(duì)稱加密秘鑰 [root@localhost ~]# cat f2 #解密文件 1 2 3 4 5
<2>單向加密
工具:openssl dgst、md5sum、sha1sum、sha256sum… 用法: md5sum /PATH/TO/FILE sha1sum /PATH/TO/FILE openssl dgst -md5|-sha1… /PATH/TO/FILE
[root@localhost ~]# md5sum f1 9f96ef92fe742165873c313662f1f2b8 f1 [root@localhost ~]# openssl dgst -md5 f1 MD5(f1)= 9f96ef92fe742165873c313662f1f2b8 [root@localhost ~]# sha1sum f1 63b956989fab15e957086b98295ca0cdd69eb0b7 f1 [root@localhost ~]# openssl dgst -sha1 f1 SHA1(f1)= 63b956989fab15e957086b98295ca0cdd69eb0b7 [root@localhost ~]# sha512sum f1 cc7818f71e5669a72d45c9563a59e4db18ed899982eab1f884c4c4a58a7f0b63b5f4d750c1caa88e1cfff311a0cb7776f831b8af3beb3bf2cc7a73fe761f0c7e f1 [root@localhost ~]# openssl dgst -sha512 f1 SHA512(f1)= cc7818f71e5669a72d45c9563a59e4db18ed899982eab1f884c4c4a58a7f0b63b5f4d750c1caa88e1cfff311a0cb7776f831b8af3beb3bf2cc7a73fe761f0c7e 只要原始文件沒(méi)有發(fā)生改變,使用同種加密算法計(jì)算出來(lái)的特征碼一定一樣
<3>生成用戶密碼的命令:
工具:passwd、openssl passwd 例如: openssl passwd -1 -salt 12345然后回車,會(huì)提示要求輸入密碼,輸入完成后,即可生成加密后的密碼 -1 表示使用md5方式加密 -salt STRING表示生成密碼時(shí)加入的雜質(zhì)的內(nèi)容 -salt后面加的雜質(zhì)的內(nèi)容可以用隨機(jī)數(shù)生成,生成隨機(jī)數(shù)可以用openssl的子命令生成 openssl passwd -1 -salt `openssl rand -hex 4`
[root@localhost ~]# openssl passwd -1 -salt "abcde" Password: $1$abcde$OmqJ.85QGvaLaaHqbRijw1 #-1表示使用MD5的加密算法,加入的雜質(zhì)為abcde,然后輸入密碼,就生成基于MD5加密后的加密字符串 [root@localhost ~]# openssl passwd -1 -salt `openssl rand -hex 4` Password: $1$d7dc4cfb$DA8Cq0zbnt0P2afb4X6zs1 #使用openssl自帶的生成隨機(jī)字符串工具作為加密雜質(zhì)
<4>openssl生成隨機(jī)數(shù):
工具:openssl rand 用法:openssl rand [-out FILE] [-base64] [-hex] NUM -out FILE 表示將生成的隨機(jī)數(shù)保存在某個(gè)文件中 -base64 表示使用base64編碼,生成的隨機(jī)數(shù)后面可能會(huì)有=,要去掉=后才是真正的隨機(jī)數(shù) -hex 表示使用十六進(jìn)制數(shù)字編碼 NUM 表示生成隨機(jī)字符串的長(zhǎng)度 如: openssl rand -base64 10 表示生成一個(gè)10個(gè)字節(jié)的隨機(jī)數(shù),采用base64編碼格式進(jìn)行輸出 openssl rand -hex 10 輸出10個(gè)字節(jié)的16進(jìn)制字節(jié)長(zhǎng)度的隨機(jī)數(shù),相當(dāng)于輸出20個(gè)字符 Linux上的隨機(jī)數(shù)生成器: /dev/random:僅從熵池中返回隨機(jī)數(shù),當(dāng)隨機(jī)數(shù)用盡,會(huì)阻塞后續(xù)請(qǐng)求隨機(jī)數(shù)的應(yīng)用 /dev/urandom:從熵池中返回隨機(jī)數(shù),隨機(jī)數(shù)用盡,會(huì)利用軟件生成偽隨機(jī)數(shù),不會(huì)阻塞。偽隨機(jī)數(shù)不安全 熵池中隨機(jī)數(shù)的來(lái)源: 硬盤(pán)I/O中斷時(shí)間間隔 鍵盤(pán)I/O中斷時(shí)間間隔
[root@localhost ~]# openssl rand -hex 5 76ebc802ee [root@localhost ~]# openssl rand -base64 5 Vmn4PbI= [root@localhost ~]# openssl rand -hex 10 95faaee7d3ba04d588ae [root@localhost ~]# openssl rand -hex 10 add09e02712965f5b064
<5>openssl實(shí)現(xiàn)公鑰加密:
加密解密: 支持的算法:RSA、ELGamal 工具:openssl rsautl 數(shù)字簽名: 支持的算法:RSA、DSA、ELGamal 工具:openssl rsautl 秘鑰交換 支持的算法:DH、RSA 生成私鑰:(公鑰一般不需要生成,而是自動(dòng)的會(huì)從私鑰中提取產(chǎn)生) openssl genrsa 512|768|1024|2048…表示生成一個(gè)長(zhǎng)度為512、768…位的私鑰 openssl genrsa 1024 > /PATH/TO/FILE 表示生成一個(gè)1024位的私鑰保存到文件中 openssl genrsa 1024 -out /PATH/TO/FILE 也表示生成一個(gè)1024位的私鑰保存到文件中 生成的私鑰文件,不能讓其他人訪問(wèn),因此一般要將私鑰文件的權(quán)限變成600,為了簡(jiǎn)化步驟,可以直接在生成私鑰時(shí)就定義其權(quán)限,如: (umask 077;openssl genrsa 1024 -out /PATH/TO/FILE) 用了小括號(hào),相當(dāng)于在一個(gè)子shell中運(yùn)行,因此此時(shí)的子shell的umask設(shè)置僅對(duì)子shell生效 從私鑰中提取公鑰:一般不用手工提取 openssl rsa -in /PATH/TO/私鑰文件 -pubout 表示從私鑰文件中提取出公鑰
[root@localhost ~]# openssl genrsa 1024 #利用rsa算法生成1024位私鑰 Generating RSA private key, 1024 bit long modulus ......++++++ .......++++++ e is 65537 (0x10001) -----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDJOWuZALVnZa+E2pdJV5IOkJUZQ6gomne6OS3Jh4FqYEv4tHRg MJ6szKLvX4ZNYdabGwqlrTLiWhC4rEKhlgD+RnEREObhCGhbjhffkcLgqg9UFg2h Hu7pN9p/ecUr2YNQZO8+BdoXgvkSK8KwHudmin4M3NhfZxpH49dXje5xGQIDAQAB AoGBAJL23g/0RYlL6iJU6DOHwsPicxLtqA5nqtQW2Mscrbd8t1/gpDJwsCMynjnI AbXYpD3KRT91vPk2oInQPiX4AaZpJLAJTVnfv7kZv6f0RtGLdCJF/onsjLse9yuE eWon+MkK6UMOU8fYCtWwfCQvTp5pTWgXPrTALpeRiPsTLv6BAkEA6nZQZIgXgVDf RzLN65MT5Awy/CVBj793HPXlvTgRt722Sn+efT2T9ZxHUcnLBRUWnUN7WrGbYf51 V9g8k+Fk0QJBANu1eWKHTNtFoG9NlqcmkG/ffTtMcnneWZ3QdhjLg6Xgh+z+nhYf +zvWwhguG5D6opdyeQ1Zbk63b009ty43+ckCQQCN6SzBnIm1kLCEFKEEjBIG/sdB TH+BNR8wXTk/rRc0QlR6hQH1xfavO3cDbwM9wUTdzQF1pHhq+Kwnjk8kJtFxAkB4 /HjoeesnwDK1t/si9oiJIn+6vME5POkKj3XI96D6IieXqSpyso/NhtiBKjrB3lLU pRPl9v5YWIjw9vA9glOJAkBgWRDjR5aiCJxMh5mKplxPtoCdiAobyNgQi8Aux6eR wlHwOW7y20hgjcmytj29ZvabZhPKw7FM/QkAJ6+iPAeS -----END RSA PRIVATE KEY----- [root@localhost ~]# openssl genrsa 1024 > f1 #將私鑰重定向到某個(gè)文件中 Generating RSA private key, 1024 bit long modulus .................................................................++++++ ......++++++ e is 65537 (0x10001) [root@localhost ~]# cat f1 -----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDEAFnlfWWmLZs4kCA3nakGAJL5QBNVyzHBkL+MzzBOE7uDyzxU 4WS58uCpQw8pZShZIdR5SaUlwneYfVw37rJgu2M67Q58IamuQvab37DPDJ2XfxW8 eTRH6/tjwqs71tE5/8O8zIUBWNaSIZvS0xkrEmG/DyXPibpF3QvuPZYinwIDAQAB AoGBAJMv7FJRM8dyUjFM0lTRmb9/KN/yhVKVL707dQ1J/e10Fgnn0luvk1Osl5ek Wztr0rv0krmuW02a1vL1mQ4Lu3lkIz+m99D+YCKzZRjCOl1loQi70TMIOX+jRRsq 08kGw8zxvPFjhCn90SO68/9x5+K8m2VD177aZ/ePEu6LNN/hAkEA+8h/YtsdeiK5 RAYf1w3A1urTjV92izRrKwhIEdT+evzRICTg0RjX3MWP4BoDZFw/+Obyq/7jnMro WrXX/bxPcQJBAMdIsWfnVP0cCU+Q9yvMr7dg+Pct5uCfizVZQZcoEAn3gGnYUkqo F885jDlyJrTldPDtQv/qIvFY0vO+4wnNqw8CQQCIBz+DWhwn00DCloh3OE/6DO50 j6HM/Wn02smNEMTYD2SweBwZ+9ELzpS3n3Y7r3dEcwmikNfJ6vnzoBDsXeORAkAX DiPoH21Hsxyopd7SpGWX05I6FodlaU/TpjXeZPYmEQo8NJigpn3KrZ+5balouDsl PG3J6a6NOXd+V5EwqyilAkAfYKS+6OWE3jRV5vu0YFzUt3c0dYqgT2rlCTWAFNjd MJX1YVZi7c3XrxcRhbakzgqW1du/1Z2ySebWKz+lkP4H -----END RSA PRIVATE KEY----- [root@localhost ~]# openssl genrsa -out f1 1024 #利用rsa算法生成1024位私鑰,保存某文件中,注意公鑰的長(zhǎng)度,要寫(xiě)在保存文件之后。 Generating RSA private key, 1024 bit long modulus ..........................++++++ ...................................................++++++ e is 65537 (0x10001) [root@localhost ~]# cat f1 -----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQC6amq8ptKmEhF4JIbN9+RVc8WOaLPMuIbZ+l7kDcKZq1K8W4QX Ur07w0U6zDzGFcykqYhyCn8+eiF/OxqPOnqlibgoPwg9jwtuYJGZN5MvkNmQMniv dyY1ThkAF/hDowbmY4aputAzJ9glduWpGBwp0/xgFIPnP8fGk/nB9P6wfQIDAQAB AoGAPwNDyzs0z1AiOZNXQf4+X6g/qlC4HkZtxvb75mjEU/92excQQnYEY1QxbZum G2s4/pwT9ECaHHtaIVDQPIQO+pwuHyKnBLa8+AkYl04aUAYVDwaBbSBONEsFGVIa xpZH3c1lugBdweBLchhvJyzv9f1R5LUQe2ZDK0FuOaVNFwECQQDcnOmzbmr0g3GG Z/xrYVlQOTSSxkNf7Bw1MJZpkArLv4Dy/9DPHHEsIxsHOk/76m6J519qluaYTxqu fRgTdOU9AkEA2FFA3uUMSE1puHJLihZVCk/wQCKcssdFTtXNwPzwka71y0UW0EVi NN75FJrueGjXzmw0Lk8hdvDwt47RMzIsQQJAH36XLnJ4+mc5ccKumnXPVlCUXM/J FoySilVhY7iYkfXI5uf2W1roHTD1ztZYTNJu7WkGiiT4zo2cdYSOR1jM0QJBAL08 N7fGQDxwHHBS7GpcpwBidhZlMRfk42jX+Ss/G2UW3cd5JUAFsqf194hjEQMdFM1s Mynf57KZjLvHoJNc7QECQFVzZFAL6wUobFUI7WreU3qELC2MbN9uxgYAbzJXX0mx f2awbPIJ4brvilS5u/f61+enDITl6+VPJvXwSjTVJi0= -----END RSA PRIVATE KEY----- [root@localhost ~]# (umask 066;openssl genrsa -out ff 512) Generating RSA private key, 512 bit long modulus .............++++++++++++ #rsa算法生成512私鑰,保存文件中,權(quán)限600 .........................................++++++++++++ e is 65537 (0x10001) [root@localhost ~]# ll ff -rw-------. 1 root root 497 Jul 20 01:40 ff [root@localhost ~]# cat ff -----BEGIN RSA PRIVATE KEY----- MIIBPAIBAAJBAOF2ErTafwojYWAo99h73Pk6hKUe8frO+edoVAUpZYaIHvqLeJIY EEdnBkqkatiKMXihwQXtM6WIqDwtfLJjy3kCAwEAAQJBAJbHE7OG+7aX+qMIQtev 3hN+ov6aN1F34YB0MNxS1uakGB16GD+qbUzKxXzWzcvruc1sfAfwAwr+uRXQ+CVy UVECIQD58RKUdjh04rOW0Ao6WmBRl0cl2JXEA83rYwYSjVGk4wIhAObtGGkoK7K3 GwS1Gq0lxLixKfQlHf1jJnIOh2H6BRjzAiAhguwd0bgCG/8+QkiMyF9PsTvN3DtA W845OD6xMBd5RwIhANMDqKC+sl+Wbjv4+a1qq75RNZMBL8xRA9qJaDChdHL9AiEA 0WSA38W0INfBHknOUf+nphr01ismlGSvaSTzfEMdXQQ= -----END RSA PRIVATE KEY----- [root@localhost ~]# openssl rsa -in ff -pubout writing RSA key #手動(dòng)從文件中提取公鑰 -----BEGIN PUBLIC KEY----- MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOF2ErTafwojYWAo99h73Pk6hKUe8frO +edoVAUpZYaIHvqLeJIYEEdnBkqkatiKMXihwQXtM6WIqDwtfLJjy3kCAwEAAQ== -----END PUBLIC KEY----- [root@localhost ~]# openssl rsa -in ff -pubout -out ff writing RSA key #私鑰中提取公鑰,提取公鑰保存指定文件中,私鑰一樣,提出的公鑰也一樣。 [root@localhost ~]# cat ff -----BEGIN PUBLIC KEY----- MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOF2ErTafwojYWAo99h73Pk6hKUe8frO +edoVAUpZYaIHvqLeJIYEEdnBkqkatiKMXihwQXtM6WIqDwtfLJjy3kCAwEAAQ== -----END PUBLIC KEY-----
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/40637.html
摘要:但是,還能夠?qū)⑵渌丝诘木W(wǎng)絡(luò)數(shù)據(jù)通過(guò)鏈接來(lái)轉(zhuǎn)發(fā),并且自動(dòng)提供了相應(yīng)的加密及解密服務(wù)。而與此同時(shí),如果工作環(huán)境中的防火墻限制了一些網(wǎng)絡(luò)端口的使用,但是允許的連接,也能夠通過(guò)將端口轉(zhuǎn)發(fā)來(lái)使用進(jìn)行通訊端口轉(zhuǎn)發(fā)能夠提供兩大功能加 博文參考 http://www.178linux.com/48542 https://segmentfault.com/a/1190000010279082 利用op...
摘要:但是,還能夠?qū)⑵渌丝诘木W(wǎng)絡(luò)數(shù)據(jù)通過(guò)鏈接來(lái)轉(zhuǎn)發(fā),并且自動(dòng)提供了相應(yīng)的加密及解密服務(wù)。而與此同時(shí),如果工作環(huán)境中的防火墻限制了一些網(wǎng)絡(luò)端口的使用,但是允許的連接,也能夠通過(guò)將端口轉(zhuǎn)發(fā)來(lái)使用進(jìn)行通訊端口轉(zhuǎn)發(fā)能夠提供兩大功能加 博文參考 http://www.178linux.com/48542 https://segmentfault.com/a/1190000010279082 利用op...
閱讀 2265·2023-04-26 02:14
閱讀 2935·2021-09-30 09:46
閱讀 2108·2021-09-24 09:48
閱讀 967·2021-09-24 09:47
閱讀 3258·2019-08-30 15:44
閱讀 1885·2019-08-30 15:44
閱讀 3289·2019-08-30 14:18
閱讀 1958·2019-08-30 12:58