openssl實現加密解密及CA

一、數據的加密方式

    數據好好的爲什麼要加密?魯迅說過,世上本沒有路,走的人多了,也就成了路。同樣的道理,數據本不用加密的,上網的人多了,也就必須要加密了。只要電子設備聯網,就沒有安全可言,安全從來都是相對的。理論上只要CPU的運算速度夠快,世界上沒有破解不了的密碼,只是時間問題,但是我們還是得加密。數據的加密方式通常用三種:對稱加密、公鑰加密和單向加密。

1、對稱加密

    數據的加密通常都要依託於一種算法,所謂的算法,可以簡單的理解爲,將一類數據有目的重新排列、組合使之面目全非的計算方法。而對稱加密,就是使用這一類算法計算明文,生成密文。但是,密文依舊可以使用加密算法的逆算法還原成明文。這種加密方式是可逆的,具有對稱性,所以叫作對稱加密。常用的加密算法有:DES, 3DES, AES, Blowfish,Twofish, IDEA, RC6, CAST5, Serpent等。

    我們知道,兩臺主機在網絡上互相通信,數據很有可能被中間人截獲。於是使用對稱加密的數據就有可能被中間人還原,然後中間人對還原後的數據進行添加、刪除、修改操作,然後使用相同的算法加密修改後的數據,再轉發給目的地。因此對稱加密雖然好用,但面臨了好多問題:首先面臨口令傳輸安全性的問題;其次無法確認收發信息者的身份;還有一個就是無法確認傳輸數據的完整性。


2、公鑰加密

    公鑰加密也叫,非對稱加密。常用的公鑰加密算法有:RSA, EIGamal。它是使用一類公鑰加密算法,生成一對密鑰文件,一個是私鑰自己持有但絕不公開,另一個是公鑰,可以對外公開。公鑰文件是用來加密的,私鑰用來解密。公鑰加密速度很慢,通常不用來加密大數據文件,而是用來加密口令。因爲密鑰文件只有成對的才能完成加密與解密的操作,所以公鑰加密也能用來作身份認證。所以當兩臺主機通信,傳輸數據時,使用對稱加密技術加密數據,加密數據的口令再使用公鑰加密方法加密,這樣重重加密後的數據,在傳輸上於是就解決了口令傳輸安全性的問題,又解決了身份驗證的問題。使用這兩種方式結合的加密技術,雖然解決了這兩個問題,數據不能被第三者還原,但是很有可能被第三者破壞,如果要保證數據的完整性,那就要用到第三種加密方式,單向加密。

公鑰加密技術有一項延伸應用,叫作數字簽名。數字簽名的加密方式剛好和公鑰加密相反,它是私鑰加密、公鑰解密,使用的算法爲DSA。


3、單向加密

    常用的單向加密算法有:MD5, SHA1, SHA512, CRC-32。單向加密技術並不是用來加密的,它是使用一種單向加密算法提取文件的特徵碼的操作。任何一個文件通過單向加密方式生成的特徵碼都是唯一的。任何一個文件其中微小的變化通過單向加密算法運算後,最終的結果都會發生翻天覆地的變化。並且,每個文件計算出來的特徵碼都不能還原。於是,單向加密技術輕鬆的解決了數據傳輸過程中,文件完整性的問題。


4、CA

    論理上公鑰加密雖然可以解決身份認證的問題,但是,當兩臺主機在傳輸數據時,兩主機間的第三者也可以生成一對自己的密鑰文件,近而中轉兩臺主機的數據。所以使用公鑰加密作數據傳輸時,此時的這個環節是一個很大的漏洞。所以,此時如果網絡上有一個機構專門負責分發密鑰文件,及檢查密鑰文件持有者的合法性,那麼這個問題就很好的解決了。通常網絡上的這種機構我們稱之爲CA,CA發放的密鑰文件我們稱之爲,數字證書。

    CA證書一般都是固定格式,數字證書的製作使用的就是公鑰加密技術,申請證書只須申請者按照一定格式把數字證書製作好後,提交給CA機構審覈,審覈通過後,該數字證書就行之有效了。須要說明的是,製作數字證書時,私鑰自己持有且必須嚴密保存,公鑰文件可以對外公開,每個數字證書都有時間期限,證書丟失後,須向CA機構申請吊銷。


我圖畫的不好,關於上面說的,我列個表格對比一下吧。

加密方式對稱加密公鑰加密單向加密CA
優 點1、加密速度快;

1、密鑰成對,能實現身份識別,及密鑰交換;

2、當對稱加密、公鑰加密、數字簽名、單向加密相結合時,相對很安全;

1、加密速度快;

2、算法具有唯一性,結果不可逆;

1、集衆家之長,安全;
缺 點

1、算法公開,容易反解;

2、不能識別解密者身份合法性;

1、加密大文件速度慢;


1、貴!普通人用不起;
便 利 性操作方便,數據加密後只有一個口令;加密後會成生兩個密鑰文件,私鑰必須好好保存不能讓第二者知道;操作方便,數據加密生成特徵碼後不能再修改文件,如若修改需重新加密;需要向第三方CA機構申請數字證書,並且證書有時間期限;
常用算法DES, 3DES, AES, Blowfish,Twofish, IDEA, RC6, CAST5, SerpentRSA, EIGamal, DSAMD5, SHA1, SHA512, CRC-32

關於密鑰的交換,除了可以使用公鑰加密算法外,還可以使用的一種算法是DH算法,DIFFIE-Hellman。


說了那麼多,我們使用openssl命令實際操作一遍。


二、使用openssl命令

   openssl是一個套件,它由三部分組成,libcryto、libssl、openssl。libcryto是一個通用功能加密庫,裏面實現了衆多的加密算法;libssl用於實現TLS/SSL的功能;openssl是一個多功能的命令行工具,它能夠讓你創建證書、吊銷證書、加密解密數據等。在命令行輸入openssl ?,可以查看openssl的相關加密解密選項。


1、對稱加密,使用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


2、單向加密

openssl命令格式:

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

-out: 保存至文件中


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


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

wKiom1Mq4yngZv0AAAD8_aOH3Y8193.jpg


3、公鑰加密,使用命令 openssl rsautl ,用的不多,主要的運用還是數字證書。


4、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




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章