openssl實現加密解密及CA

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

wKioL1Mq4BCQvGGxAAPvw3CHcZ0561.jpg


解密/etc/fstab文件

openssl enc -d -des3 -a -salt -in fstab.cipher -out fstab.cleartext

wKiom1Mq4T6xOzuLAAMoxcSFiQA745.jpg


二、單向加密

openssl命令格式:

openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] [-out filename] 加密文件

-out: 保存至文件中


還可使用的其它命令sha1sum, md5sum, cksum,計算文件特徵碼。


例如:計算/etc/fstab的特徵碼

wKiom1Mq4yngZv0AAAD8_aOH3Y8193.jpg


三、公鑰加密,使用命令 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是否有私鑰:

wKiom1Mq7eDiqjroAACLiOs6heo438.jpg


生成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)

wKiom1MrBaHCdpZqAAEkFNSUGY8341.jpg


公鑰文件不須要特別生成,由於公鑰文件是私鑰文件的一部分,是從私鑰文件提取出來的。提取公鑰並不是必要步驟,若是想查看公鑰文件可使用如下命令:

openssl rsa -in private/cakey.pem -pubout -text

wKiom1Mq81WQ5VdPAAMW_OEPjmQ674.jpg


(2)、生成自簽證書

openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655

-new: 一個新的申請

-x509: 證書格式

-key: 私鑰文件路徑

-out: 證書保存路徑

-days: 有效期限


執行命令後,需填寫證書的相關信息:

wKiom1MrBpajmKfcAANrvnWSulU261.jpg


查看證書是否生成成功:

wKioL1Mq9uTjTHDdAAExvMVOaIQ399.jpg


(3)、客戶端證書申請前的準備工做。

經過配置文件/etc/pki/tls/openssl.conf可知,缺乏三個文件,新建這三個文件:

touch index.txt serial crlnumber

wKioL1Mq98rjm72XAACfg3wL1rw091.jpg


給記錄證書數字編號的文件serial寫入編號,咱們以01做爲它的第一個編號:

wKiom1Mq-D_TwMDwAABZs5L9Eg4931.jpg


(4)、CA自簽證書完成,客戶端能夠開始申請證書了,此時咱們打開另一臺虛擬機做爲客戶端。在客戶端中,一般哪一個應用程序要用到數字證書,那麼數字證書就要保存在那個程序的配置文件目錄,此時咱們以web服務器程序httpd爲例。

爲了規範,咱們在httpd的配置文件目錄新建一個目錄ssl,在/etc/httpd/ssl目錄中生成客戶端的密鑰文件。

(umask 077; openssl genrsa -out httpd.key 1024)


wKiom1Mq-hbhyla-AAGGjTOEA9o962.jpg


(5)、客戶端生成證書籤署請求

openssl req -new -key httpd.key -out httpd.csr

-new: 生成一個新的簽署請求

-key: 以哪一個密鑰文件爲依據

-out: 生成的文件名

wKioL1MrAVLxj6qWAAO8FGoaXKg655.jpg


查看文件:

wKiom1Mq_MLTSEotAAA0NqwjV-M919.jpg


(6)、客戶端證書籤署請求生成後,接下來把請求發給CA申請數字證書。

使用scp命令將文件傳送到服務器的/tmp目錄:

scp httpd.csr 192.168.0.6:/tmp/

wKioL1Mq_a-i1_OGAAG5sremeK4009.jpg


(7)、回到服務器,CA簽署證書

openssl ca -in /tmp/httpd.csr -out /tmp/httpd.crt -days 3650

wKioL1MrAJiS84zzAAOe3GY-qXU738.jpg


(8)、將簽署好的文件傳送給客戶端

scp /tmp/httpd.crt 192.168.0.111:/etc/httpd/ssl


客戶端查看文件

wKioL1MrA1LhLYhFAABOot7dAl4624.jpg


數字證書申請成功,接下來的操做是,配置客戶端使用數字證書了。


(9)、假如數字證書過時,能夠在CA主機上使用如下命令吊銷證書

openssl ca -revoke /path/to/somefile.crt


wKioL1MrBKvDHXrjAACv_MnbO6I652.jpg

相關文章
相關標籤/搜索