openssl加密原理

來源:互聯網
上載者:User
SSL概述
SSL是SecureSocketLayer( 安全套接層協議)的縮寫,可以在Internet上提供秘密性傳輸。Netscape公司在推出第一個Web瀏覽器的同時,提出了SSL協議標準,目前已有3.0版本。SSL採用公開密鑰技術。其目標是保證兩個應用間通訊的保密性和可靠性,可在伺服器端和使用者端同時實現支援。目前,利用公開密鑰技術的SSL協議,已成為Internet上保密通訊的工業標準。 安全套接層協議能使使用者/伺服器應用之間的通訊不被攻擊者竊聽,並且始終對伺服器進行認證,還可選擇對使用者進行認證。SSL協議要求建立在可靠的傳輸層協議(TCP)之上。SSL協議的優勢在於它是與應用程式層協議獨立無關的,高層的應用程式層協議(例如:HTTP,FTP,TELNET等)能透明地建立於SSL協議之上。SSL協議在應用程式層協議通訊之前就已經完成密碼編譯演算法、通訊密鑰的協商及伺服器認證工作。在此之後應用程式層協議所傳送的資料都會被加密,從而保證通訊的私密性。
通過以上敘述,SSL協議提供的安全通道有以下三個特性:
1、資料的保密性資訊加密就是把明碼的輸入檔案用密碼編譯演算法轉換成加密的檔案以實現資料的保密。加密的過程需要用到密鑰來加密資料然後再解密。沒有了密鑰,就無法解開加密的資料。資料加密之後,只有密鑰要用一個安全的方法傳送。加密過的資料可以公開地傳送。

2、資料的完整性加密也能保證資料的一致性。例如:訊息驗證碼(MAC),能夠校正使用者提供的加密資訊,接收者可以用MAC來校正加密資料,保證資料在傳輸過程中沒有被篡改過。

3、安全驗證加密的另外一個用途是用來作為個人的標識,使用者的密鑰可以作為他的安全驗證的標識。SSL是利用公開密鑰的加密技術(RSA)來作為使用者端與伺服器端在傳送機密資料時的加密通訊協定。
OpenSSL概述
目前比較流行的證明伺服器之一是OpenSSL證明伺服器,是SSL的開源實現,是基於會話的、實現了身份認證、資料機密性和會話完整性的TLS/SSL庫。它還可以幫我們實現私人憑證發行等功能。OpenSSL項目在EricYoung開發的SSLeay包的基礎上,開發一個健壯的、商業等級的、開放源碼的工具包用強大的密碼編譯演算法來實現安全的socket層和傳輸層安全性,這個項目由全世界的志源者管理和開發OpenSSL工具包和相關的文檔。它提供了眾多而且複雜的API函數,可惜的是,目前它的文檔不全,只能夠程式員自已多做工作。它的網址是:http://www.openssl.org
 

對稱式加密演算法:
OpenSSL一共提供了8種對稱式加密演算法,其中7種是區塊編碼器演算法,僅有的一種流密碼編譯演算法是RC4。這7種區塊編碼器演算法分別是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支援電子密碼本模式(ECB)、加密分組連結模式(CBC)、加密反饋模式(CFB)和輸出反饋模式(OFB)四種常用的分組密碼加密模式。其中,AES使用的加密反饋模式(CFB)和輸出反饋模式(OFB)分組長度是128位,其它演算法使用的則是64位。事實上,DES演算法裡面不僅僅是常用的DES演算法,還支援三個密鑰和兩個密鑰3DES演算法。

非對稱式加密演算法
OpenSSL一共實現了4種非對稱式加密演算法,包括DH演算法、RSA演算法、DSA演算法和橢圓曲線演算法(EC)。DH演算法一般使用者金鑰交換。RSA演算法既可以用於金鑰交換,也可以用於數位簽章,當然,如果你能夠忍受其緩慢的速度,那麼也可以用於資料加密。DSA演算法則一般只用於數位簽章。

以上內容來自百度百科openssl和尋找整理,主要作為參考定義展現給大家。。。絕無侵權之意如有雷同純屬巧合。。。

下面主要介紹ssl原理,openssl加密使用,頒發認證的實驗實現過程。

SSL協議的工作流程(ssl原理):
伺服器認證階段:1)用戶端向伺服器發送一個開始資訊(例如“你好,在嗎?”)以便開始一個新的會話串連;2)伺服器根據客戶的資訊確定是否需要產生新的主要金鑰,如需要則伺服器在響應客戶的(“你好,在嗎?”)資訊時將包含產生主要金鑰所需的資訊;3)客戶根據收到的伺服器響應資訊,產生一個主要金鑰,並用伺服器的公開祕密金鑰加密後傳給伺服器;4)伺服器恢複該主要金鑰,並返回給客戶一個用主要金鑰認證的資訊,以此讓客戶證明伺服器。

使用者認證階段:在此之前,伺服器已經通過了客戶認證,這一階段主要完成對客戶的認證。經認證的伺服器發送一個提問給客戶,客戶則返回(數字)簽名後的提問和其公開密鑰,從而向伺服器提供認證。
SSL會話的建立是基於IP地址實現的。

本次實驗實驗採用的是依然是redhat5.8
首先安裝openssl,( yum install openssl)本人採用的版本是openssl-0.9.8e-22.e15.i386.rpm (可以通過rpm -q openssl查看本機安裝版本) 目前官方已更新到OpenSSL 1.0.1c ,請各位學者參考學習編譯安裝使用。。。

可以使用rpm -ql openssl查看openssl產生的各種檔案
其中首先說明一下redhat上的openssl的設定檔放在/etc/pki/tls/openssl.cnf

openssl 對檔案的加密及解密:

首先查看一下enc的協助資訊:(首先whatis enc,然後man enc)結果:

openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e][-d] [-a] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-p]

[-P] [-bufsize number] [-nopad] [-debug]

-chipername選項:密碼編譯演算法,Openssl支援的演算法在上面已經列出了,你只需選擇其中一種演算法即可實現檔案加密功能。

-in選項:輸入檔案,對於加密來說,輸入的應該是明文檔案;對於解密來說,輸入的應該是加密的檔案。該選項後面直接跟檔案名稱。

-out選項:輸出檔案,對於加密來說,輸出的應該是加密後的檔案名稱;對於解密來說,輸出的應該是明文檔案名稱。

-pass選項:選擇輸入口令的方式,輸入源可以是標準輸入裝置,命令列輸入,檔案、變數等。

-e選項:實現加密功能(不使用-d選項的話預設是加密選項)。

-d選項:實現解密功能。

-a和-A選項:對檔案進行BASE64編解碼操作。

-K選項:手動輸入加密金鑰(不使用該選項,Openssl會使用口令自動提取加密金鑰)。

-IV選項:輸入初始變數(不使用該選項,Openssl會使用口令自動提取初始變數)。

-salt選項:是否使用鹽值,預設是使用的。

-p選項:列印出密碼編譯演算法使用的加密金鑰。

執行個體解析:
對稱式加密:單向密碼編譯演算法

對initta檔案進行加密
首先把inittab複製到根目錄下
openssl enc -des3 -salt -a -in inittab -out inittab.des3
輸入密碼,輸入確認密碼

查看加密結果:

對initta檔案進行解密
openssl enc -des3 -d -salt -a -in inittab.des3 -out inittab
輸入加密是的密碼
查看結果:cat inittab

使用openssl提取特徵碼:

openssl dgst -sha1 inittab

如果更新inittab的內容則也會更新特徵碼

使用openssl進行產生密碼串
openssl passwd -1

其中如果-salt一緻密碼串結果會一致


openssl實現私人CA:

1、產生一對密鑰
產生RSA,CA私密金鑰,CA私密金鑰用於提供簽發CA根憑證,CA根憑證需要提供給他人下載,使其可以使用此認證對其它認證
openssl genrsa 1024 > server.key
chmod 600 server.key 改許可權
2、產生自簽署認證
openssl req -new -x509 -key server1024.key -out server.crt -days 365
下面是輸入擁有者的資訊
1:國家的名稱
2:省份名稱
3:城市名稱
4:公司名稱
5:組織名稱
6:主機名稱
7:管理員郵件地址

這樣自簽署認證就完成了

查看認證內容:openssl x509 -text -in server.crt

CA伺服器:
在發放認證之前首先設定openssl的設定檔
vim /etc/pki/tls/openssl.cnf
把dir=../../CA改為/etc/pki/CA


上面是設定預設。
然後進入/pki/CA檔案中進行操作

首先產生一對密鑰
產生密鑰的方式也可以用(ukask 077; openssl genrsa -out private/cakey.pem 2048 )
然後產生自簽署認證

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

然後再此目錄下必須建立幾個目錄都是openssl設定檔中所要求的目錄和兩個檔案
mkdir certs newcerts crl
touch index.txt
touch serial 給這個檔案一個起始號 echo 01 > serial
這是CA伺服器就算建立完成了

下面我們使用web進行測試(此操作只限於本機執行)
假設我們的web設定檔都在httpd檔案下所以mkdir /etc/httpd/
在這個目錄下首先建立一個ssl放置認證密鑰
然後建立一個私密金鑰來提取公開金鑰(任何一個用到認證都要有私密金鑰和公開金鑰)
(ukask 077; openssl genrsa -out httpd.key 1024 )
然後去CA伺服器處申請認證
首先填寫申請書:
openssl req -new -key httpd.key -out httpd.csr

然後讓CA簽發認證

openssl ca -in httpd.csr -out httpd.cet -days 365
到此CA簽發認證已完成。
可能過程不太詳細如有疑問請留言。。。謝謝支援。。。

編譯:openssl加密和ssl原理

地址:http://www.07net01.com/linux/openssljiamihesslyuanli_22243_1351442057.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.