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