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

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

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

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