當(dāng)提到openssl時(shí),首先必須提到ssl。可能沒(méi)有人希望他們的網(wǎng)絡(luò)活動(dòng)被其他網(wǎng)民監(jiān)聽(tīng)到,當(dāng)我們?cè)谌粘I暇W(wǎng)時(shí)。因此就需要一種協(xié)議為我們的網(wǎng)絡(luò)通信保駕護(hù)航。ssl協(xié)議就是基于這樣的工作背景開(kāi)發(fā)的,它能使用戶跟服務(wù)器應(yīng)用之間的通信不被攻擊者竊聽(tīng),并且始終對(duì)服務(wù)器進(jìn)行認(rèn)證,可選擇的對(duì)用戶進(jìn)行認(rèn)證。
通常情況下,SSL協(xié)議是基于可靠的傳輸層協(xié)議(TCP)建立的。SSL協(xié)議的優(yōu)勢(shì)在于它是與應(yīng)用層協(xié)議獨(dú)立無(wú)關(guān)的,高層的應(yīng)用層協(xié)議(例如:http,F(xiàn)TP,TELNET等)能透明地建立于SSL協(xié)議之上。在進(jìn)行應(yīng)用層協(xié)議通信之前,SSL協(xié)議就已經(jīng)完成了加密算法的處理、通信密鑰的協(xié)商和服務(wù)器認(rèn)證工作。所有經(jīng)過(guò)應(yīng)用層協(xié)議傳輸?shù)臄?shù)據(jù)都會(huì)被加密,以確保通信的機(jī)密性。?
? ?s所謂加密,只不過(guò)是將明文通過(guò)某種機(jī)制轉(zhuǎn)換成密文,網(wǎng)絡(luò)通信時(shí),使用的加密安全機(jī)制有:對(duì)稱加密,公鑰加密,單向加密。? ??
??對(duì)稱加密的特性與缺陷:加密解密使用同一個(gè)密鑰,將明文分割成固定大小的塊,逐個(gè)進(jìn)行加密。其缺陷在于通信雙方要管理的密鑰過(guò)多,而且密鑰分發(fā)困難。其加密算法有:DES、3DES、AES。
公鑰加密具有以下特征:其密鑰成對(duì)出現(xiàn),常用的加密算法包括RSA和DSA。其用途有:一是用于身份認(rèn)證:發(fā)送方使用自己的私鑰加密數(shù)據(jù),接收方使用與之公鑰解密;二是用于密鑰交換:發(fā)送方使用接收方的公鑰加密數(shù)據(jù),接收方使用自己的私鑰解密。公鑰在私鑰中提取出來(lái)
? 單向加密的特性:定向輸出,有雪崩效應(yīng)。該加密算法包括MD5、SHA1、SHA256、SHA384和SHA512。常用于提取數(shù)據(jù)的特征碼。
在今年4月10日,安全協(xié)議OpenSSL曝出了本年最嚴(yán)重的安全漏洞,“心臟出血”。使人們開(kāi)始重視這個(gè)開(kāi)源協(xié)議。那么OpenSSL到底是什么呢?其實(shí)OpenSSL可以看作是SSL的庫(kù),由openssl多用途的命令行工具、公共加密庫(kù)libcrypto、以及ssl協(xié)議庫(kù)libssl三大組件組成。
????openssl多用途的命令行工具可用于實(shí)現(xiàn)對(duì)稱加密:
????????????????????????openssl enc -e -對(duì)稱加密算法 -a -salt -in 需要加密的文件 -out 加密后的文件輸出路徑
例如,對(duì)/etc/fstab這個(gè)文件使用DES3算法加密:?openssl enc -e -des3 -a -salt -in /etc/fstab -out /tmp/fstab?
加密結(jié)果:
? ?解密:openssl enc -d -對(duì)稱加密算法 -a -salt -in 需要解密的文件 -out 解密后的文件輸出路徑
例如,將上面加密的文件解密:?openssl enc -d -des3 -a -salt -in /tmp/fstab -out /tmp/Fstab
解密結(jié)果:
????還可以用于公鑰加密中的密鑰交換:(umask 077;openssl genrsa -out 輸出私鑰文件路徑)
??????????????從私鑰中提取公鑰:?openssl rsa -in 私鑰文件路徑 -pubout
注:()表示命令在子shell中執(zhí)行,umask 077 保證了私鑰文件的訪問(wèn)權(quán)限
????還可用于單向加密:openssl dgst -md5|-sha1 -out 文件輸出路徑 要加密的文件
例如,將/etc/passwd使用md5加密:openssl dgst -md5 ?-out /tmp/md5passwd /etc/passwd
????還可以用于生成用戶密碼:?openssl passwd -1 -salt SALT_STRING 用戶密碼
????還可以用于生成隨機(jī)數(shù):openssl rand -hex 字節(jié)數(shù)