|
我們?cè)诹私馔?a title="PKI體系結(jié)構(gòu)" target="_blank" style="padding: 0px; margin: 0px; color: rgb(64, 104, 153); text-decoration: none;">PKI體系結(jié)構(gòu)之后,下面我們著手利用OpenSSL來(lái)構(gòu)建一個(gè)安全的基于SSL協(xié)議的Web通訊。
1,構(gòu)建一個(gè)CA; 2,Web服務(wù)器制作證書(shū)簽署請(qǐng)求; 3,CA完成對(duì)Web服務(wù)器證書(shū)的簽名; 4,實(shí)現(xiàn)客戶端和服務(wù)器端的雙向驗(yàn)證以及兩者之間的加密通訊。
SSL(Secure Sockets Layer 安全套接層),及其繼任者傳輸層安全(Transport Layer Security,TLS)是為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議。TLS與SSL在傳輸層對(duì)網(wǎng)絡(luò)連接進(jìn)行加密。 SSL提供的服務(wù): 1)認(rèn)證用戶和服務(wù)器,確保數(shù)據(jù)發(fā)送到正確的客戶機(jī)和服務(wù)器; 2)加密數(shù)據(jù)以防止數(shù)據(jù)中途被竊??; 3)維護(hù)數(shù)據(jù)的完整性,確保數(shù)據(jù)在傳輸過(guò)程中不被改變。 SSL在TCP/IP協(xié)議模型中的位置圖:  圖解: SSL協(xié)議位于TCP/IP協(xié)議與各種應(yīng)用層協(xié)議之間,為數(shù)據(jù)通訊提供安全支持。SSL協(xié)議可分為兩層:SSL記錄協(xié)議(SSL Record Protocol):它建立在可靠的傳輸協(xié)議(如TCP)之上,為高層協(xié)議提供數(shù)據(jù)封裝、壓縮、加密等基本功能的支持。SSL握手協(xié)議(SSL Handshake Protocol):它建立在SSL記錄協(xié)議之上,用于在實(shí)際的數(shù)據(jù)傳輸開(kāi)始前,通訊雙方進(jìn)行身份認(rèn)證、協(xié)商加密算法、交換加密密鑰等。
SSL可以實(shí)現(xiàn)眾多通訊協(xié)議的安全傳輸。常見(jiàn)的協(xié)議如下: 1 2 3 4 5 | http:80/tcp------------->https:443/tcp
ftp:21/tcp----------->ftps
smtp:25/tcp---------->smtps:465/tcp
pop3:110/tcp--------->pops:995/tcp
............
|
SSL的版本: SSL v2 SSL v3 TLS v1 (相當(dāng)于SSL v3.1) IETF WTLS Mobile and wireless version of the TLS protocol
SSL通訊過(guò)程階段一圖:  階段一圖解: 1,Client端主動(dòng)和Server端建立TCP連接; 2,Client向Server發(fā)送Hello信息,告知Server,我想和你建立安全連接。這是我支持的SSL版本和加密算法。 3,Server接收之后,會(huì)給Client一個(gè)響應(yīng)。告知Client,我同意和你建立安全連接。我們就使用這個(gè)SSL版本和加密套件進(jìn)行安全連接吧! 4,如果Client向Server提出需要驗(yàn)證Server端,那么Server就會(huì)將自己的經(jīng)過(guò)CA簽過(guò)名的數(shù)字證書(shū)文件發(fā)送給Client。Client端收到Server端發(fā)送的數(shù)字證書(shū)之后,使用CA的公鑰來(lái)驗(yàn)證Server端的合法性。 注:Server Key Exchange表示Server端沒(méi)有證書(shū)時(shí),Server端就會(huì)把自己的公鑰發(fā)送給Client端。但是這樣沒(méi)辦法保證Server端的合法性。 5,反過(guò)來(lái),Server端也可以驗(yàn)證Client端。這時(shí)候Server端會(huì)要求Client提供它指定CA頒發(fā)的證書(shū)。否則驗(yàn)證不通過(guò)。 6,至此,階段一結(jié)束。Client和Server端已經(jīng)協(xié)商出使用的SSL版本和加解密套件等信息。而且Client端已經(jīng)得到Server端的公鑰。
SSL通訊過(guò)程階段二圖:  階段二圖解: 1,如果Server端要求驗(yàn)證Client端,那么Client端此時(shí)會(huì)將自己的證書(shū)發(fā)送給Server端。 2,Client端會(huì)隨機(jī)產(chǎn)生一個(gè)Session Key,然后用Server端的公鑰加密這個(gè)Session Key并發(fā)送給Server端。 3,Client端使用自己的私鑰加密一些信息完成簽名,并發(fā)送給Server端。Server端使用Client端的公鑰來(lái)驗(yàn)證簽名,完成對(duì)客戶端的驗(yàn)證。 4,安全通訊開(kāi)始,通訊雙方使用Session Key利用對(duì)稱加密算法加密數(shù)據(jù)并進(jìn)行傳輸。接收方就可以使用Session Key進(jìn)行解密。 5,至此,SSL安全通訊完成。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | 1,構(gòu)建CA:
1)生成密鑰對(duì)
(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
說(shuō)明:CA私要保存路徑是根據(jù)openssl的配置文件來(lái)設(shè)定的
openssl的配置文件:/etc/pki/tls/openssl.cnf
2)生成自簽名證書(shū)
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out cacert.pem-days 3656
說(shuō)明:-x509 簽發(fā)X.509格式證書(shū)
-key 指定簽名的私鑰
-days 表示有效天數(shù) 3656也就是10年
3)創(chuàng)建序列號(hào)文件和數(shù)據(jù)庫(kù)文件
touch serial index.txt
echo 01 > serial
說(shuō)明:這個(gè)兩個(gè)文件的文件名也是在配置文件中定義的。
echo 01 > serial 表示給它一個(gè)初始序列號(hào)。
注:CA私鑰和自簽名證書(shū)可以同時(shí)生成:
openssl req -new -x509 -days 3656 -nodes -keyout /etc/pki/CA/private/cakey.pem -out cacert.pem -subj 'CN=Test Only'
2,Web服務(wù)器制作證書(shū)簽署請(qǐng)求:
1)生成密鑰對(duì)
(umask 077;openssl genrsa -out /root/Server.key 2048)
2)制作證書(shū)簽署請(qǐng)求:
openssl req -new -key /root/Server.key -out /root/Serreq.csr
注意:Common Name必須和客戶端需要訪問(wèn)的FQDN或IP地址對(duì)應(yīng)
3,CA完成對(duì)Web服務(wù)器證書(shū)的簽名:
openssl ca -in Serreq.csr -out Server.crt -days 3656
4,實(shí)現(xiàn)客戶端和服務(wù)器端的雙向驗(yàn)證以及兩者之間的加密通訊:
客戶端驗(yàn)證服務(wù)器:
1)編輯apache主配置文件:
Include conf/extra/httpd-ssl.conf #開(kāi)啟ssl配置文件
2)編輯httpd-ssl.conf文件:
SSLCertificateFile "/usr/local/apache/conf/Server.crt"
#指定證書(shū)文件
SSLCertificateKeyFile "/usr/local/apache/conf/Server.key"
3)啟動(dòng)apache:
/usr/local/apache/bin/apachectl start
4)客戶端測(cè)試:
https://192.168.1.109
openssl s_client -connect 192.168.1.109:443
服務(wù)器驗(yàn)證客戶端:
......
5,小技巧:
如果你的CA和Web服務(wù)器是同一臺(tái),你也可以這么來(lái):
openssl req -new -x509 -days 3656 -sha1 -nodes -newkey rsa:2048 -keyout /etc/pki/CA/private/cakey.pem -out cacert.pem -subj '/O=Seccure/OU=Seccure Labs/CN=ww.ssldemo.com'
說(shuō)明: -nodes 表示不用des算法對(duì)私鑰文件進(jìn)行加密
CN:Common Name必須和客戶端需要訪問(wèn)的FQDN或IP地址對(duì)應(yīng)
Web服務(wù)器可以之間使用cacert.pem這個(gè)證書(shū)文件
客戶端也可以直接使用https://www.ssldemo.com來(lái)訪問(wèn)
|
1 2 3 4 5 | 1,openssl s_client -connect HOST:443
2,ethereal 抓包工具
3,ssldump 專門(mén)抓取和分析ssl協(xié)議包
|
|