1、數據的加密方式
web
數據好好的爲何要加密?魯迅說過,世上本沒有路,走的人多了,也就成了路。一樣的道理,數據本不用加密的,上網的人多了,也就必需要加密了。只要電子設備聯網,就沒有安全可言,安全歷來都是相對的。理論上只要CPU的運算速度夠快,世界上沒有破解不了的密碼,只是時間問題,可是咱們仍是得加密。數據的加密方式一般用三種:對稱加密、公鑰加密和單向加密。算法
一、對稱加密shell
數據的加密一般都要依託於一種算法,所謂的算法,能夠簡單的理解爲,將一類數據有目的從新排列、組合使之面目全非的計算方法。而對稱加密,就是使用這一類算法計算明文,生成密文。可是,密文依舊可使用加密算法的逆算法還原成明文。這種加密方式是可逆的,具備對稱性,因此叫做對稱加密。經常使用的加密算法有:DES, 3DES, AES, Blowfish,Twofish, IDEA, RC6, CAST5, Serpent等。安全
咱們知道,兩臺主機在網絡上互相通訊,數據頗有可能被中間人截獲。因而使用對稱加密的數據就有可能被中間人還原,而後中間人對還原後的數據進行添加、刪除、修改操做,而後使用相同的算法加密修改後的數據,再轉發給目的地。所以對稱加密雖然好用,但面臨了好多問題:首先面臨口令傳輸安全性的問題;其次沒法確認收發信息者的身份;還有一個就是沒法確認傳輸數據的完整性。
服務器
二、公鑰加密網絡
公鑰加密也叫,非對稱加密。經常使用的公鑰加密算法有:RSA, EIGamal。它是使用一類公鑰加密算法,生成一對密鑰文件,一個是私鑰本身持有但毫不公開,另外一個是公鑰,能夠對外公開。公鑰文件是用來加密的,私鑰用來解密。公鑰加密速度很慢,一般不用來加密大數據文件,而是用來加密口令。由於密鑰文件只有成對的才能完成加密與解密的操做,因此公鑰加密也能用來做身份認證。因此當兩臺主機通訊,傳輸數據時,使用對稱加密技術加密數據,加密數據的口令再使用公鑰加密方法加密,這樣重重加密後的數據,在傳輸上因而就解決了口令傳輸安全性的問題,又解決了身份驗證的問題。使用這兩種方式結合的加密技術,雖然解決了這兩個問題,數據不能被第三者還原,可是頗有可能被第三者破壞,若是要保證數據的完整性,那就要用到第三種加密方式,單向加密。
ide
公鑰加密技術有一項延伸應用,叫做數字簽名。數字簽名的加密方式恰好和公鑰加密相反,它是私鑰加密、公鑰解密,使用的算法爲DSA。工具
三、單向加密大數據
經常使用的單向加密算法有:MD5, SHA1, SHA512, CRC-32。單向加密技術並非用來加密的,它是使用一種單向加密算法提取文件的特徵碼的操做。任何一個文件經過單向加密方式生成的特徵碼都是惟一的。任何一個文件其中微小的變化經過單向加密算法運算後,最終的結果都會發生翻天覆地的變化。而且,每一個文件計算出來的特徵碼都不能還原。因而,單向加密技術輕鬆的解決了數據傳輸過程當中,文件完整性的問題。加密
四、CA
論理上公鑰加密雖然能夠解決身份認證的問題,可是,當兩臺主機在傳輸數據時,兩主機間的第三者也能夠生成一對本身的密鑰文件,近而中轉兩臺主機的數據。因此使用公鑰加密做數據傳輸時,此時的這個環節是一個很大的漏洞。因此,此時若是網絡上有一個機構專門負責分發密鑰文件,及檢查密鑰文件持有者的合法性,那麼這個問題就很好的解決了。一般網絡上的這種機構咱們稱之爲CA,CA發放的密鑰文件咱們稱之爲,數字證書。
CA證書通常都是固定格式,數字證書的製做使用的就是公鑰加密技術,申請證書只須申請者按照必定格式把數字證書製做好後,提交給CA機構審覈,審覈經過後,該數字證書就行之有效了。需要說明的是,製做數字證書時,私鑰本身持有且必須嚴密保存,公鑰文件能夠對外公開,每一個數字證書都有時間期限,證書丟失後,須向CA機構申請吊銷。
我圖畫的很差,關於上面說的,我列個表格對比一下吧。
加密方式 | 對稱加密 | 公鑰加密 | 單向加密 | CA |
優 點 | 一、加密速度快; | 一、密鑰成對,能實現身份識別,及密鑰交換; 二、當對稱加密、公鑰加密、數字簽名、單向加密相結合時,相對很安全; |
一、加密速度快; 二、算法具備惟一性,結果不可逆; |
一、集衆家之長,安全; |
缺 點 | 一、算法公開,容易反解; 二、不能識別解密者身份合法性; |
一、加密大文件速度慢; |
一、貴!普通人用不起; | |
便 利 性 | 操做方便,數據加密後只有一個口令; | 加密後會成生兩個密鑰文件,私鑰必須好好保存不能讓第兩者知道; | 操做方便,數據加密生成特徵碼後不能再修改文件,如若修改需從新加密; | 須要向第三方CA機構申請數字證書,而且證書有時間期限; |
經常使用算法 | DES, 3DES, AES, Blowfish,Twofish, IDEA, RC6, CAST5, Serpent | RSA, EIGamal, DSA | MD5, SHA1, SHA512, CRC-32 |
關於密鑰的交換,除了可使用公鑰加密算法外,還可使用的一種算法是DH算法,DIFFIE-Hellman。
說了那麼多,咱們使用openssl命令實際操做一遍。
2、使用openssl命令
openssl是一個套件,它由三部分組成,libcryto、libssl、openssl。libcryto是一個通用功能加密庫,裏面實現了衆多的加密算法;libssl用於實現TLS/SSL的功能;openssl是一個多功能的命令行工具,它可以讓你建立證書、吊銷證書、加密解密數據等。在命令行輸入openssl ?,能夠查看openssl的相關加密解密選項。
一、對稱加密,使用enc選項,可使用man enc查看enc子命令的幫助。
加密格式:
openssl enc -des3 -a -salt -in 要加密的文件 -out 文件保存路徑
-des3: 使用des3加密算法加密,也可使用其它加密算法
-a: 以base64位格式輸出
-salt: 加鹽
-in: 要加密的文件路徑
-out: 文件加密後的保存路徑
解密格式:
openssl enc -d -des3 -a -salt -in 要解密的文件 -out 文件保存路徑
加密/etc/fstab文件
enc -des3 -a -salt -in /etc/fstab -out fstab.cipher
解密/etc/fstab文件
openssl enc -d -des3 -a -salt -in fstab.cipher -out fstab.cleartext
二、單向加密
openssl命令格式:
openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] [-out filename] 加密文件
-out: 保存至文件中
還可使用的其它命令sha1sum, md5sum, cksum,計算文件特徵碼。
例如:計算/etc/fstab的特徵碼
三、公鑰加密,使用命令 openssl rsautl ,用的很少,主要的運用仍是數字證書。
四、CA數字證書
數字證書的格式一般爲x509,主要包含如下幾個部分:
公鑰和有效期限; 要包含持有者的我的合法身份信息;# 身份信息一般爲主機名 證書的使用方式; CA的信息; CA的數字簽名;
爲了模擬操做,咱們得本身充當CA,做爲CA,身份也得驗證,因此CA也得有一個數字證書,可是CA是專門給別人發證書的,本身的證書無人可發,因而CA能夠本身給本身發放數字證書,這叫自簽署證書。咱們先來查看一下CA的配置文件/etc/pki/tls/openssl.conf中[ CA_default ]的各項參數:
[ CA_default ] dir = /etc/pki/CA # CA工做目錄 certs = $dir/certs # 數字證書所在位置 crl_dir = $dir/crl # 數字證書吊銷列表 database = $dir/index.txt # 數字證書及吊銷證書記錄文件 #unique_subject = no # Set to 'no' to allow creation of # several ctificates with same subject. new_certs_dir = $dir/newcerts # 剛籤屬的證書 certificate = $dir/cacert.pem # CA本身的證書,CA的公鑰 serial = $dir/serial # 當前數字證書的編號 crlnumber = $dir/crlnumber # 當前吊銷證書的編號 # must be commented out to leave a V1 CRL crl = $dir/crl.pem # 當前正在使用的的CRL private_key = $dir/private/cakey.pem# CA本身的私鑰 RANDFILE = $dir/private/.rand # 隨機數據文件 x509_extensions = usr_cert # x509證書的擴展,用戶證書
實例:用openssl實現私有CA
(1)、進入CA的工做目錄/etc/pki/CA,給CA本身生成一個私鑰。
查看CA是否有私鑰:
生成CA私鑰:
openssl genrsa -out private/cakey.pem 2048
說明:-out參數爲保存路徑,2048爲密鑰文件的長度。
注意:私鑰文件是一個很重要的文件,所以分配權限要注意,而且文件要做特別的加密保存,此處由於實驗,因此不做加密。此處咱們須要給CA密鑰最小權限,能夠修改umask的值爲077,爲了避免影響整個shell環境,咱們能夠在小括號裏執行命令,小括號裏的命令默認是在一個子shell進程裏執行,所以執行完命令umask值不影響父shell。
(umask 077; openssl genrsa -out private/cakey.pem 2048)
公鑰文件不須要特別生成,由於公鑰文件是私鑰文件的一部分,是從私鑰文件提取出來的。提取公鑰並不是必要步驟,若是想查看公鑰文件可使用如下命令:
openssl rsa -in private/cakey.pem -pubout -text
(2)、生成自簽證書
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655
-new: 一個新的申請
-x509: 證書格式
-key: 私鑰文件路徑
-out: 證書保存路徑
-days: 有效期限
執行命令後,需填寫證書的相關信息:
查看證書是否生成成功:
(3)、客戶端證書申請前的準備工做。
經過配置文件/etc/pki/tls/openssl.conf可知,缺乏三個文件,新建這三個文件:
touch index.txt serial crlnumber
給記錄證書數字編號的文件serial寫入編號,咱們以01做爲它的第一個編號:
(4)、CA自簽證書完成,客戶端能夠開始申請證書了,此時咱們打開另一臺虛擬機做爲客戶端。在客戶端中,一般哪一個應用程序要用到數字證書,那麼數字證書就要保存在那個程序的配置文件目錄,此時咱們以web服務器程序httpd爲例。
爲了規範,咱們在httpd的配置文件目錄新建一個目錄ssl,在/etc/httpd/ssl目錄中生成客戶端的密鑰文件。
(umask 077; openssl genrsa -out httpd.key 1024)
(5)、客戶端生成證書籤署請求
openssl req -new -key httpd.key -out httpd.csr
-new: 生成一個新的簽署請求
-key: 以哪一個密鑰文件爲依據
-out: 生成的文件名
查看文件:
(6)、客戶端證書籤署請求生成後,接下來把請求發給CA申請數字證書。
使用scp命令將文件傳送到服務器的/tmp目錄:
scp httpd.csr 192.168.0.6:/tmp/
(7)、回到服務器,CA簽署證書
openssl ca -in /tmp/httpd.csr -out /tmp/httpd.crt -days 3650
(8)、將簽署好的文件傳送給客戶端
scp /tmp/httpd.crt 192.168.0.111:/etc/httpd/ssl
客戶端查看文件
數字證書申請成功,接下來的操做是,配置客戶端使用數字證書了。
(9)、假如數字證書過時,能夠在CA主機上使用如下命令吊銷證書
openssl ca -revoke /path/to/somefile.crt