Stunnel加密封裝器的安裝設(shè)置和使用
Stunnel作為一個(gè)小巧的跨平臺(tái)(Unix/Linux和Windows)的開(kāi)源(GNU)項(xiàng)目,提供了以下2個(gè)主要功能:
針對(duì)本身無(wú)法進(jìn)行TLS或SSL通信的客戶(hù)端及服務(wù)器,Stunnel可提供安全的加密連接(基于OpenSSL)。
針對(duì)有訪(fǎng)問(wèn)限制的局域網(wǎng),Stunnel提供加密的SSL連接解除防火墻和代理的限制直接和遠(yuǎn)端服務(wù)器理論上的任何網(wǎng)絡(luò)服務(wù)連接。我們知道一般局域網(wǎng)都會(huì)開(kāi)放443端口用于加密的HTTP連接,我們可以利用這點(diǎn)用Stunnel和遠(yuǎn)程端口443創(chuàng)建一個(gè)SSL連接,防火墻和代理會(huì)認(rèn)為這個(gè)連接是正常的HTTPS連接而允許通過(guò)。
>>去網(wǎng)絡(luò)安全工具百寶箱看看其它安全工具
Stunnel的安裝
Stunnel的Windows版本可以點(diǎn)此下載。我們需要把下載下來(lái)的Stunnel程序同時(shí)安裝在服務(wù)器端和客戶(hù)端。安裝過(guò)程比較簡(jiǎn)單,一路Next就行。假設(shè)我們把Stunnel安裝在默認(rèn)路徑C:\Program Files\stunnel\下。具體安裝步驟見(jiàn)下:
訪(fǎng)問(wèn)控制以及安全證書(shū)的生成
Stunnel使用OpenSSL提供了基于安全證書(shū)的訪(fǎng)問(wèn)控制。遵循SSL協(xié)議,客戶(hù)端和服務(wù)器端都可以要求對(duì)方提供安全證書(shū)用以驗(yàn)證對(duì)方是否可信。而在大多數(shù)應(yīng)用中往往只有服務(wù)器端需要驗(yàn)證客戶(hù)端的安全證書(shū)以確認(rèn)連接者可以被信任,所以我的這篇文章主要講解服務(wù)器端驗(yàn)證的設(shè)置。客戶(hù)端驗(yàn)證的設(shè)置方法和步驟同服務(wù)器端相反,這里就不再敘述了。
決定了如何進(jìn)行訪(fǎng)問(wèn)控制,下一個(gè)步驟我們需要一個(gè)安全證書(shū),你可以選擇以下幾個(gè)方法得到安全證書(shū):
1.Stunnel安裝程序自帶的(C:\Program Files\stunnel\stunnel.pem)
2.OpenSSL成生的安全證書(shū)
3.從CA處購(gòu)買(mǎi)的安全證書(shū)
一般來(lái)說(shuō)不推薦方法1,因?yàn)橥ㄓ眯缘腟tunnel安全證書(shū)不能提供任何安全保證因?yàn)槿巳硕伎梢韵螺d獲得。而最安全的第3種方法需要花費(fèi)不少銀子,因此這里我們使用方法2:在不花錢(qián)的情況下得到***的安全性。Stunnel的Windows版本并沒(méi)有提供OpenSSL程序,所以要生成安全證書(shū)需要通過(guò)以下途徑。
1. 使用網(wǎng)頁(yè)服務(wù)生成安全證書(shū)
用Stunnel提供的網(wǎng)頁(yè)服務(wù)(http://www.stunnel.org/pem/),輸入所有相關(guān)信息然后Stunnel的服務(wù)器會(huì)生成所需的安全證書(shū),具體見(jiàn)下圖:
#p#
點(diǎn)擊Generate stunnel.pem File按鈕等待幾秒鐘系統(tǒng)會(huì)出現(xiàn)以下頁(yè)面:
拷貝所有文本框內(nèi)的內(nèi)容另存為stunnel.pem文件,這個(gè)就是你所需要的安全證書(shū)了。正如Stunnel網(wǎng)頁(yè)上所說(shuō),這種方法并不安全,因?yàn)樯傻淖C書(shū)是通過(guò)沒(méi)有加密的通道傳輸?shù)模魏稳硕伎梢詮闹懈`取這個(gè)證書(shū)。
2. 使用Unix/Linux生成安全證書(shū)
第二種方法需要一臺(tái)安裝了OpenSSL的Unix或者Linux主機(jī)。運(yùn)行以下命令生成安全證書(shū):
- openssl req -new -x509 -days 365 -nodes
- -out ${FILE_NAME}.pem -keyout ${FILE_NAME}.pem
${FILE_NAME}.pem是自定義生成的安全證書(shū)的名字,其他各個(gè)參數(shù)的意義如下:
◆-new:生成新的密匙
◆-x509:生成X509安全證書(shū)
◆-days 365:有效期1年
◆-nodes:不設(shè)置密碼
◆-out:生成的文件名
◆-keyout:存放密匙的文件名
運(yùn)行這個(gè)命令后需要回答以下問(wèn)題,然后安全認(rèn)證會(huì)自動(dòng)存放在${FILE_NAME}.pem文件中。
#p#
在驗(yàn)證安全證書(shū)有效性時(shí),Stunnel使用Hash值搜索證書(shū),所以我們還需要運(yùn)行以下2條命令得到這個(gè)證書(shū)的Hash值,然后重命名這個(gè)文件:
- hash_name=`openssl x509 -hash -noout -in ${FILE_NAME}.pem `
- mv ${FILE_NAME}.pem $hash_name.0
這樣最終得到的安全證書(shū)就是XXXXXXXX.0,其中X代表16進(jìn)制數(shù)字。以上2段腳本可以合在一起變成一個(gè)批處理文件。
我們需要注意的是,生成的安全證書(shū)需要同時(shí)拷貝到客戶(hù)端和服務(wù)器端。客戶(hù)端需要向服務(wù)器端發(fā)送這個(gè)證書(shū),而服務(wù)器端需要檢查客戶(hù)端證書(shū)是否和服務(wù)器端證書(shū)一致。
客戶(hù)端配置
編輯Stunnel的配置文件(位置在C:\Program Files\stunnel\stunnel.conf):
- [CLIENT]
- accept=22443
- connect=proxyhost:8080
- client=yes
- ccert=c:\program files\stunnel\${FILE_NAME}.pem
- protocol=connect
- protocolHost=192.234.191.174:443
其中各個(gè)參數(shù)的含義為:
◆accept:接受的端口(在這個(gè)例子中,如果訪(fǎng)問(wèn)遠(yuǎn)程服務(wù)需要連接到localhost端口22443)。
◆connect:遠(yuǎn)程服務(wù)器的IP地址和端口(注意這里我們使用標(biāo)準(zhǔn)HTTPS端口)。
◆client:告訴stunnel這個(gè)配置是client配置。
◆cert:連接是提供給對(duì)方的安全證書(shū)。這個(gè)證書(shū)可以是${FILE_NAME}.pem文件名也可以直接用XXXXXXXX.0文件。
如果客戶(hù)端需要通過(guò)HTTPS代理連接,需要使用以下配置文件:
- [CLIENT]
- accept=22443
- connect=proxyhost:8080
- client=yes
- ccert=c:\program files\stunnel\${FILE_NAME}.pem
- protocol=connect
- protocolHost=192.234.191.174:443
這里connect處需要填入代理服務(wù)器的IP和端口,protocolHost處填入遠(yuǎn)程服務(wù)器的IP和端口。配置結(jié)束后運(yùn)行stunnel程序,然后雙擊任務(wù)欄的圖可以查看日志:
#p#
服務(wù)器端配置
服務(wù)器端配置比客戶(hù)端稍微麻煩些。首先我們需要把先前生成的XXXXXXXX.0證書(shū)拷貝到一個(gè)文件夾中(假設(shè)這個(gè)文件夾叫CApath),所有可信任的證書(shū)都應(yīng)該拷貝到這里。然后我們需要配置C:\Program Files\stunnel\stunnel.conf文件:
- [SERVER]
- accept=443
- cert=stunnel.pem
- connect=localhost:21
- CApath=c:\program files\stunnel\CApath
- CRLpath=c:\program files\stunnel\CRLpath
- verify=3
以下是這個(gè)配置各個(gè)參數(shù)的含義:
◆accept:接受連接請(qǐng)求的端口(應(yīng)該和客戶(hù)端一致)
◆cert:服務(wù)器端發(fā)送給客戶(hù)端的安全認(rèn)證。因?yàn)槲覀兊目蛻?hù)端不驗(yàn)證這個(gè)證書(shū),所以使用標(biāo)準(zhǔn)的stunnel證書(shū)就可以。
◆connect:連接到本地或者其他局域網(wǎng)的網(wǎng)絡(luò)服務(wù)(這里我們使用本地FTP服務(wù))。
◆CApath:保存了所有可信安全證書(shū)的文件夾(所有文件名都應(yīng)該是XXXXXXXX.0格式)。
◆CRLpath:保存了所有已經(jīng)撤銷(xiāo)的安全證書(shū)的文件夾(所有文件名都應(yīng)該是XXXXXXXX.0格式)。這個(gè)的主要作用是當(dāng)你把安全證書(shū)發(fā)布給客戶(hù)以后你依然可以拒絕他的連接請(qǐng)求。
◆verify:驗(yàn)證級(jí)別。1表示如果客戶(hù)提供安全證書(shū)則驗(yàn)證安全證書(shū)。2表示客戶(hù)必須提供安全證書(shū)并驗(yàn)證安全證書(shū),這個(gè)模式適合于驗(yàn)證從CA處購(gòu)買(mǎi)的安全證書(shū)。3表示客戶(hù)必須提供安全證書(shū)并根本本地CAPath和CRLpath來(lái)驗(yàn)證證書(shū)是否合法。毫無(wú)疑問(wèn)這里我們應(yīng)該選3。
設(shè)置完成后我們可以啟動(dòng)stunnel程序然后進(jìn)行下簡(jiǎn)單的測(cè)試。
連接測(cè)試
首先確認(rèn)服務(wù)器端和客戶(hù)端的stunnel程序都已經(jīng)啟動(dòng),并且提供服務(wù)的網(wǎng)絡(luò)應(yīng)用程序也已經(jīng)啟動(dòng)(這里我們是FTP服務(wù))。打開(kāi)命令行,輸入:
- telnet localhost 22443
這時(shí)你應(yīng)該能得到一個(gè)到FTP服務(wù)器的TCP連接,同時(shí)也宣告大功告成:)以上這個(gè)例子可以使在禁止FTP的局域網(wǎng)中使用FTP服務(wù),當(dāng)然任何安裝在服務(wù)器端的TCP服務(wù)都可以通過(guò)這種方法使用。由于Stunnel使用加密過(guò)的連接,因此沒(méi)有人能看到服務(wù)器端和客戶(hù)端傳送的數(shù)據(jù)。需要注意的是,有些防火墻會(huì)在沒(méi)有流量的時(shí)候關(guān)閉連接,因此為了長(zhǎng)期保持連接盡量不停發(fā)送數(shù)據(jù)(簡(jiǎn)單的heartbeat就可以)。