Openssl加密解密原理+CA自建實現(xiàn)
Openssl加密解密原理+CA自建實現(xiàn)
前言
互聯(lián)網(wǎng)的驚人發(fā)展使企業(yè)和消費者都感到非常興奮,它正改變著我們的生活和工作方式。但是,互聯(lián)網(wǎng)的安全程度如何——尤其是在通過它發(fā)送機密信息時的安全性——已經(jīng)成為人們關(guān)心的主要問題。隨著時代的發(fā)展,加密原理也不斷地在更新?lián)Q代. 數(shù)據(jù)的加密目前已廣泛地運用于戰(zhàn)爭,商業(yè)活動,信息交換等領(lǐng)域,。其實加密技術(shù)也不是什么新生事物,只不過應(yīng)用在當(dāng)今電子商務(wù)、電腦網(wǎng)絡(luò)中還是近幾年的歷史。以下我們將了解一下加密技術(shù)的方方面面,愿能為那些對加密技術(shù)有興趣的朋友提供一個詳細(xì)了解的機會!
在電子商務(wù)沒有出現(xiàn)之前,我們基本上通過面對面的錢權(quán)交易,不存在加密解密問題;隨著電子商務(wù)的興起,我們現(xiàn)在很多的交易都是在互聯(lián)網(wǎng)上完成的,銀行轉(zhuǎn)賬,網(wǎng)上購物等等。早期的各種傳輸軟件都沒有考慮到安全的問題,都是以明文進(jìn)行傳輸,信息被別人竊取,篡改等等;因此有很多群體靠網(wǎng)絡(luò)發(fā)家??!犯罪??!但是網(wǎng)絡(luò)交易確實給我們的生活帶來了極大的方便,怎么解決這個問題呢;美國NIST,為了保證計算機的安全,提出了幾個要求:
1、數(shù)據(jù)要有保密性:數(shù)據(jù)保密性和隱私性;確保信息不被別人獲取,個人存儲的信息不能被別人收集到;
2、完整性:包括數(shù)據(jù)完整性和系統(tǒng)完整性;數(shù)據(jù)完整性確保數(shù)據(jù)和程序只能以特定權(quán)限的進(jìn)行授權(quán)和改變,只能授權(quán)之后才能改變或者被改變;確保系統(tǒng)以一種正常的方式執(zhí)行預(yù)定的功能,不會因別人的介入改變方向;
3 可用性,工作迅速,可正常使用的情況并獲取到信息;
以下我們將說一下基本概念,然后再說明一下在互聯(lián)網(wǎng)上如何安全的進(jìn)行傳輸數(shù)據(jù)進(jìn)行安全交易的過程;
一、基本概念
加密:我們將文字轉(zhuǎn)換成不能直接閱讀的形式(即密文)的過程稱為加密。數(shù)據(jù)加密的基本過程就是對原來為明文的文件或數(shù)據(jù)按某種算法進(jìn)行處理,使其成為不可讀的一段代碼,通常稱為"密文",使其只能在輸入相應(yīng)的密鑰之后才能顯示出本來內(nèi)容,通過這樣的途徑來達(dá)到保護(hù)數(shù)據(jù)不被非法人竊取、閱讀的目的。
解密:我們將密文轉(zhuǎn)換成能夠直接閱讀的文字(即明文)的過程稱為解密。
大多數(shù)計算機加密系統(tǒng)都屬于以下兩種類型之一:"對稱式"和"非對稱式"。
對稱加密:采用單鑰密碼系統(tǒng)的加密方法,同一個密鑰可以同時用作信息的加密和解密,這種加密方法稱為對稱加密,也稱為單密鑰加密。需要對加密和解密使用相同密鑰的加密算法。由于其速度快,對稱性加密通常在消息發(fā)送方需要加密大量數(shù)據(jù)時使用。對稱性加密也稱為密鑰加密。
常用的對稱加密:DES、3DES、AES、DH
因為對稱式的加密方法如果是在網(wǎng)絡(luò)上傳輸加密文件就很難把密鑰告訴對方,不管用什么方法都有可能被別竊聽到。且通信方如果比較多,秘鑰過多,不便于管理,密鑰傳輸和交換難以實現(xiàn);因此產(chǎn)生了公鑰加密(也叫非對稱加密):
非對稱式加密就是加密和解密所使用的不是同一個密鑰,通常有兩個密鑰,稱為"公鑰"和"私鑰",它們兩個必需配對使用,否則不能打開加密文件。這里的"公鑰"是指可以對外公布的,"私鑰"則不能,只能由持有人一個人知道。"公鑰"是可以公開的,也就不怕別人知道,收件人解密時只要用自己的私鑰即可以,這樣就很好地避免了密鑰的傳輸安全性問題。
常用加密算法:RSA, DSA, EIGamal ;RSA:身份認(rèn)證和加密;DSA:身份認(rèn)證
公鑰私鑰的原則:
1. 一個公鑰對應(yīng)一個私鑰。
2. 密鑰對中,讓大家都知道的是公鑰,不告訴大家,只有自己知道的,是私鑰。
3. 如果用其中一個密鑰加密數(shù)據(jù),則只有對應(yīng)的那個密鑰才可以解密。
4. 如果用其中一個密鑰可以進(jìn)行解密數(shù)據(jù),則該數(shù)據(jù)必然是對應(yīng)的那個密鑰進(jìn)行的加密。
二、加密傳輸原理
加密的各種算法只是對文件進(jìn)行了加密,可是如何讓其能在網(wǎng)絡(luò)上進(jìn)行安全的傳輸,而不被竊聽,篡改呢?
用電子郵件的方式說明一下原理。
使用公鑰與私鑰的目的就是實現(xiàn)安全的電子郵件,必須實現(xiàn)如下目的:
1. 我發(fā)送給你的內(nèi)容必須加密,在郵件的傳輸過程中不能被別人看到。
2. 必須保證是我發(fā)送的郵件,不是別人冒充我的。
要達(dá)到這樣的目標(biāo)必須發(fā)送郵件的兩人都有公鑰和私鑰。
公鑰,就是給大家用的,你可以通過電子郵件發(fā)布,可以通過網(wǎng)站讓別人下載,公鑰其實是用來加密/驗章用的。私鑰,就是自己的,必須非常小心保存,最好加上 密碼,私鑰是用來解密/簽章,首先就Key的所有權(quán)來說,私鑰只有個人擁有。公鑰與私鑰的作用是:用公鑰加密的內(nèi)容只能用私鑰解密,用私鑰加密的內(nèi)容只能 用公鑰解密。
隨著計算機網(wǎng)絡(luò)技術(shù)的迅速發(fā)展和信息化建設(shè)的大力推廣,越來越多的傳統(tǒng)辦公和業(yè)務(wù)處理模式開始走向電子化和網(wǎng)絡(luò)化,從而極大地提高了效率、節(jié)約了成本。與傳統(tǒng)的面對面的手工處理方式相比,基于網(wǎng)絡(luò)的電子化業(yè)務(wù)處理系統(tǒng)必須解決以下問題:
1如何在網(wǎng)絡(luò)上識別用戶的真實身份;
2如何保證網(wǎng)絡(luò)上傳送的業(yè)務(wù)數(shù)據(jù)不被篡改;
3如何保證網(wǎng)絡(luò)上傳送的業(yè)務(wù)數(shù)據(jù)的機密性;
4如何使網(wǎng)絡(luò)上的用戶行為不可否認(rèn);----------如我們網(wǎng)上購物,東西到了,我們不承認(rèn),商家將遭受損失;
例如: 假設(shè)用戶甲要寄信給用戶乙,他們互相知道對方的公鑰。甲就用乙的公鑰加密郵件寄出,乙收到后就可以用自己的私鑰解密出甲的原文。由于別人不知道乙的私鑰,所以即使是甲本人也無法解密那封信,這就解決了信件保密的問題。另一方面,由于每個人都知道乙的公鑰,他們都可以給乙發(fā)信,那么乙怎么確信是不是甲的來信呢?那就要用到基于加密技術(shù)的數(shù)字簽名了。
基于公開密鑰算法的數(shù)字簽名技術(shù)和加密技術(shù),為解決上述問題提供了理論依據(jù)和技術(shù)可行性;同時,《中華人民共和國電子簽名法》的頒布和實施為數(shù)字簽名的使用提供了法律依據(jù),使得數(shù)字簽名與傳統(tǒng)的手工簽字和蓋章具有了同等的法律效力。
PKI(Public Key Infrastructure)是使用公開密鑰密碼技術(shù)來提供和實施安全服務(wù)的基礎(chǔ)設(shè)施,其中CA(Certificate Authority)系統(tǒng)是PKI體系的核心,主要實現(xiàn)數(shù)字證書的發(fā)放和密鑰管理等功能。數(shù)字證書由權(quán)威公正的CA中心簽發(fā),是網(wǎng)絡(luò)用戶的身份證明。使用數(shù)字證書,結(jié)合數(shù)字簽名、數(shù)字信封等密碼技術(shù),可以實現(xiàn)對網(wǎng)上用戶的身份認(rèn)證,保障網(wǎng)上信息傳送的真實性、完整性、保密性和不可否認(rèn)性。
數(shù)字證書目前已廣泛應(yīng)用于安全電子郵件、網(wǎng)上商城、網(wǎng)上辦公、網(wǎng)上簽約、網(wǎng)上銀行、網(wǎng)上證券、網(wǎng)上稅務(wù)等行業(yè)和業(yè)務(wù)領(lǐng)域。
數(shù)字證書是一種數(shù)字標(biāo)識,如同我們的身份證一樣,是網(wǎng)絡(luò)上的身份證明,它是由證書授權(quán)機構(gòu)(CA)簽名頒發(fā)的數(shù)字文件,該簽名使得第三者不能偽造和篡改證書。
數(shù)字證書: 數(shù)字證書為實現(xiàn)雙方安全通信提供了電子認(rèn)證。在因特網(wǎng)、公司內(nèi)部網(wǎng)或外部網(wǎng)中,使用數(shù)字證書實現(xiàn)身份識別和電子信息加密。數(shù)字證書中含有密鑰對(公鑰和私鑰)所有者的識別信息,通過驗證識別信息的真?zhèn)螌崿F(xiàn)對證書持有者身份的認(rèn)證。
ITU-T的X..509國際標(biāo)準(zhǔn)定義了數(shù)字證書的格式,目前X .509v3數(shù)字證書的主要內(nèi)容如圖:
注冊授權(quán)服務(wù)器(RA) :負(fù)責(zé)定期從數(shù)據(jù)庫中提取已審核通過的證書申請/更新/作廢信息,按既定格式打包提交到CA服務(wù)器,并接收和記錄返回的結(jié)果。
證書簽發(fā)服務(wù)器(CA):負(fù)責(zé)密鑰對(公私鑰對)的產(chǎn)生,可采用軟件方式或硬件方式(加密機);接收RA服務(wù)器的請求,簽發(fā)/更新/作廢用戶證書;定期簽發(fā)CRL(證書撤銷列表)。
CA是證書的簽發(fā)機構(gòu),它是PKI的核心。CA是負(fù)責(zé)簽發(fā)證書、認(rèn)證證書、管理已頒發(fā)證書的機關(guān)。它要制定政策和具體步驟來驗證、識別用戶身份,并對用戶證書進(jìn)行簽名,以確保證書持有者的身份和公鑰的擁有權(quán)。
CA 也擁有一個證書(內(nèi)含公鑰)和私鑰。網(wǎng)上的公眾用戶通過驗證 CA 的簽字從而信任 CA ,任何人都可以得到 CA 的證書(含公鑰),用以驗證它所簽發(fā)的證書。
如果用戶想得到一份屬于自己的證書,他應(yīng)先向 CA 提出申請。在 CA 判明申請者的身份后,便為他分配一個公鑰,并且 CA 將該公鑰與申請者的身份信息綁在一起,并為之簽字后,便形成證書發(fā)給申請者。
如果一個用戶想鑒別另一個證書的真?zhèn)?,他就?/span> CA 的公鑰對那個證書上的簽字進(jìn)行驗證,一旦驗證通過,該證書就被認(rèn)為是有效的。
上面我了解了基本的概念和原來后,我們來根據(jù)上圖來說一下一次會話,發(fā)郵件,用戶和用戶之間的數(shù)據(jù)加密的全過程:
1、Bob生成數(shù)據(jù)
2、用單向加密數(shù)據(jù)生成特征碼
3、Bob用自己的私鑰加密特征碼放在數(shù)據(jù)后面----------用自己的私鑰進(jìn)行簽名;
4、生成臨時會話密鑰加密特征碼和數(shù)據(jù)-------因為之前沒有對數(shù)據(jù)進(jìn)行加密;
5、用對方Alice的公鑰加密臨時密鑰
6、數(shù)據(jù)加密完后一并發(fā)給對方
7、Alice用自己的私鑰解密對稱密鑰(原圖有誤不是BOb)
8、拿到密碼后解密對方加密的數(shù)據(jù)
9、Alice用Bob的公鑰解密特征碼-----------------使用發(fā)送者的公鑰對簽名進(jìn)行認(rèn)證;
10、Alice用相同的單向加密驗證數(shù)據(jù)的完整性
11、Alice接收數(shù)據(jù)
使用數(shù)字證書能做什么?
數(shù)字證書在用戶公鑰后附加了用戶信息及CA的簽名。公鑰是密鑰對的一部分,另一部分是私鑰。公鑰公之于眾,誰都可以使用。私鑰只有自己知道。由公鑰加密的信息只能由與之相對應(yīng)的私鑰解密。為確保只有某個人才能閱讀自己的信件,發(fā)送者要用收件人的公鑰加密信件;收件人便可用自己的私鑰解密信件。同樣,為證實發(fā)件人的身份,發(fā)送者要用自己的私鑰對信件進(jìn)行簽名;收件人可使用發(fā)送者的公鑰對簽名進(jìn)行驗證,以確認(rèn)發(fā)送者的身份。如此我們便可以安全的在網(wǎng)上進(jìn)行各種交易,接下來我們實踐操作一下此過程的實現(xiàn)。
三、Openssl 基本使用方法
1、OpenSSL 是一個強大的安全套接字層密碼庫, 在應(yīng)用層和傳輸層之間加了一個半層,基于套接字傳輸時專用的;所以不是對所有的數(shù)據(jù)進(jìn)行加密;Appache使用它加密HTTPS,http(80/tcp)->ssl--->https(443/tcp):兩個完全不同的協(xié)議;OpenSSH使用它加密SSH,它不止是一個庫,而且還是一個多用途、跨平臺的密碼加密工具。整個軟件包有三部份構(gòu)成:
密碼算法庫(7種分組加密算法、RC4的流加密算法)
SSL 協(xié)議庫(SSLv2,v3、TLSv2,v3)
應(yīng)用程序(密碼生成、證書管理、格式轉(zhuǎn)換、數(shù)據(jù)加密簽名)
2、openssl基本用法
可以使用rpm –ql openssl 查看是否安裝;
Standar commands:命令功能
Message Digest command :信息摘要支持的算法
Cipher:加密支持的算法
查看OpenSSL 的安裝文件,配置之前建議先去讀/etc/pki/tls/openssl.cnf 配置文件,了解openssl 工具家目錄下各個文件夾的作用。這里看到CA 的家目錄是在/etc/pki/CA,先去看看里面的目錄結(jié)構(gòu)
certs:簽發(fā)的證書存放的地方
private:存放CA的私鑰(很重要)
crl:吊銷的證書存放的地方
newcerts:簽發(fā)新證書存放的地方
serial:簽發(fā)證書的序列號(需創(chuàng)建),serial 起始序列號需要指定
index.txt:數(shù)據(jù)庫的索引文件(需創(chuàng)建)
crlnumber:吊銷證書的序列號(需創(chuàng)建)
例如:cp /var/messages /home/test目錄下對messages文件進(jìn)行加密;使用cat查看是亂碼;
openssl命令選項:
-e:指定為加密,可以不寫默認(rèn)為加密。
-des3:指定算法算法
-salt:默認(rèn)設(shè)置,生成一段字符串放在密碼最前面進(jìn)行加密,提高解密難度。
-a:基于base64處理數(shù)據(jù)。加密結(jié)果進(jìn)行base64編碼處理
-in:讀取那個文件進(jìn)行加密
-out:輸出到那里
-d:指定為解密
對messages解密
單項加密:openssl dgst 用于實現(xiàn)在網(wǎng)絡(luò)通信中保證所傳輸?shù)臄?shù)據(jù)的完整性
-md5:用md5方式加密
-sha1:sha1方式加密
-out:加密后密碼保存到那里
例如:md5sum messages 或者 openssl dgst -md5 messages 二者提前的特征碼相同
生成用戶密碼:openssl passwd -1 [-salt string] password
-1:md5加密
-salt:自己指定附加信息
生成隨機數(shù):openssl rand -base64 4或openssl rand -hex 4,生成8位隨機數(shù)
生成私鑰和公鑰:openssl genrsa
默認(rèn)生成的權(quán)限時644的,如果想在生成后就是600的權(quán)限,可以使用umask;
四、自建CA過程
1、建立私有CA
1.1、在CA上生成私鑰文件 在/etc/pki/CA/private
用()是為了在子shell中運行,不影響當(dāng)前的umask
-out為輸出私鑰的位置
2048為密鑰的長度
1.2、在CA上生成自簽署證書 必須在/etc/pki/CA目錄下

-new 為生成新的證書,會要求用戶填寫相關(guān)的信息
-x509 通常用于自簽署證書,生成測試證書或用于CA自簽署
-key私鑰位置
-days申請的天數(shù)(默認(rèn)30天)
-out生成位置
以上自簽時填寫的相關(guān)信息可以通過/etc/pki/tls/openssl.cnf配置文件添加,從而可以復(fù)制到其他主機生成簽署請求的時候重復(fù)填寫;以下2個不能使用默認(rèn)值;commonName ;emailAddress。
2、給http服務(wù)器發(fā)放證書
假設(shè):用httpd服務(wù),其位置為/etc/httpd/conf/certs,certs為自己創(chuàng)建的文件夾
2.1、http服務(wù)器申請證書:在http服務(wù)器上進(jìn)行
生成私鑰
生成證書簽署請求/etc/httpd/conf/certs
2.2、在CA上給http服務(wù)器簽署證書
需要把http那臺主機的證書申請文件拷貝到CA(位置隨意)
第1次簽署在/etc/pki/CA目錄下創(chuàng)建以下文件
# touch {index.txt,serial}
# echo "01" > serial 首次必須添加序列號否則會報錯
CA給http服務(wù)器簽署證書

確認(rèn)簽署
查看index.txt,最前面有一個大V
serial由01變02
ll /etc/pki/CA/newcerts/ 會有一個文件生成
2.3、查看生成的證書的信息 (http.crt文件)
openssl x509 -in http.crt -noout -subject
openssl x509 -in http.crt -noout -serial
4、生成完需要拷貝到http服務(wù)器上 也用scp命令
五、吊銷證書
1、第一次吊銷需創(chuàng)建文件,生成編號,在CA端進(jìn)行
touch /etc/pki/CA/crlnumber
echo "01" > /etc/pki/CA/crlnumber
2、在CA端,吊銷證書
openssl ca -revoke /etc/pki/CA/newcerts/01.pem 吊銷證書
# cd /etc/pki/CA/crl/
# openssl ca -gencrl -out thisca.crl 更新證書吊銷列表
3、查看吊銷信息
# cat index.txt 由V變成了R
cat crlnumber 增加(此處我吊銷兩次所以為03)

以上是對加密解密文件,基于CA進(jìn)行安全傳輸?shù)膫€人理解和想法,如有問題請批評指正!希望對那些加密技術(shù)有興趣的朋友有所幫助!