技術點詳解---SSL ***
一、 SSL ***簡介
何謂SSL ***,首先要從SSL談起,使用網絡不能不提的是各個網站,瀏覽網站使用瀏覽器,網絡上傳送網頁的協議叫HTTP,它是明文傳播的,傳播內容可以被***讀取。而SSL全名叫Secure Session Layer(安全會話層),其最初目的是給HTTP加密使用的安全套件,使用SSL的HTTP,也就搖身一變成了HTTPS,端口也從HTTP的80變成了443。由於HTTPS具備安全性,也具備傳輸數據的能力,也就被研究***技術的專家盯上了,覺得HTTPS可以用於組建***方案,於是乎SSL ***技術就呼之欲出了。經過多年的發展,SSL版本發展到了3.0,也被標準組織採納爲TLS(Transport Layer Security傳輸層安全) 1.0之中,所以SSL ***也叫TLS ***。下面是SSL 與SSL ***、TLS的區別:
1. SSL:單純的實現對某些TCP應用的保護,如HTTPS和SFTP;
2. SSL ***:利用TCP的傳輸作用以及SSL對TCP會話的保護,實現***業務,被保護的***業務可以是TCP的、也可以UDP,純IP的應用;
3. TLS:在SSL上進行擴展,能夠直接實現對UDP應用的保護,這也是傳輸層安全的最佳註釋。
接下來看看SSL ***的使用場景吧:
L2TP實現的是遠程接入***,而IPSec爲L2TP提供安全保護,這種應用已經非常成熟,但屬於兩個協議的生硬組合,在方案上不是特別靈活。而SSL ***是天然的安全遠程接入,在方案上,特別是權限控制、應用粒度上有獨到之處,成爲目前遠程接入領域的香餑餑,目前已經超越了技術範疇,而成爲一個安全網絡服務框架。
SSL ***最常見的入口還是網頁,所以推廣起來特別方便:
1. 使用者只需要記住***的網站(通常是HTTPS),用瀏覽器打開該網站;
2. 輸入使用者的身份信息,身份信息可以是用戶名、數字證書(如USB-Key)、靜態口令、動態口令的至尊組合,確保身份不泄露、不假冒;
3. 選擇服務種類,其中WEB代理是最爲簡單的應用,也是控制粒度最細的SSL ***應用,可以精確地控制每個鏈接;
4. 端口映射是粒度僅次於WEB代理的應用,它通過TCP端口映射的方式(原理上類似於NAT內部服務器應用),爲使用者提供遠程接入TCP的服務,它需要專門的、與服務器配套的SSL ***客戶端程序幫忙;
5. IP連接是SSL ***中粒度最粗的服務,但也是使用最廣泛的,它實現了類似於L2TP的特性,所有客戶端都可以從服務器獲得一個***地址,然後直接訪問內部服務器,它也需要專門的SSL ***客戶端程序幫忙;
6. SSL ***由於處在TCP層,所以可以進行豐富的業務控制,如行爲審計,可以記錄每名用戶的所有操作,爲更好地管理***提供了有效統計數據;
7. 當使用者退出SSL ***登陸頁面時,所有上述安全會話會統統釋放。
以上7個步驟可以劃分爲三個階段:階段一是連接與驗證、階段二是***應用、階段三是審計與退出。由於連接與驗證、審計與退出都是統一流程,也比較簡單,本期針對大家較爲關注的階段二,***應用部分進行展開介紹。
二、 WEB代理
由於SSL是封裝在TCP上的,穿越NAT不是問題,所以在示例中客戶端使用公網地址進行介紹:
1. 假設SSL ***的WEB站點的互聯網域名是https://ssl***,該WEB站點對應的主機則是SSL ***服務器;
2. 使用者登陸SSL ***的WEB頁面後,WEB代理一欄會有許多鏈接,如內部財務報表、訂單提交等內部網站;
3. 假設“訂單提交”網站在單位內部私有URL是http://site1/page,那麼在SSL ***服務器上的訂單提交鏈接URL則會進行相應的修改,變成https://ssl***/httpsite1/pate,相當於SSL ***站點的內部鏈接;
4. 使用者點擊“訂單提交”鏈接後,會新建一個瀏覽器窗口,打開鏈接https://ssl***/httpsite1/page,也就是說對於使用者而言,訂單提交像是SSL ***站點的一個鏈接,而非另外一個站點,所有的訪問都終結在SSL ***站點;
5. SSL ***站點的所有者SSL ***服務器在接收到使用者對https://ssl***/httpsite1/page的頁面請求後,SSL ***服務器會做WEB代理的工作,即以內部地址10.1.1.1向真正的“訂單提交”站點10.6.16.3訪問頁面http://site1/page;
6. 可以發現整個頁面訪問是由使用者與服務器之間的HTTPS會話、服務器與“訂單提交”站點的HTTP會話連接而成的,服務器在這個訪問中起的是WEB代理作用,因爲在“訂單提交”站點看來,訪問者IP是服務器,而不是最終用戶IP;
7. 而使用者訪問另外一個站點“財務報表”,也是類似過程。
WEB代理因爲原理簡單,實現起來較爲容易,因爲傳統的WEB Proxy代理是兩段HTTP會話的銜接,而SSL ***的WEB代理則把用戶與服務器的連接把HTTP換成了HTTPS、並對網站的URL進行了替換而已,從圖中我們可以看到紅色部分即爲URL的替換。
從這張封裝原理圖,我們可以比較清楚地看到HTTPS與HTTP會話在這個訪問過程中的銜接。可能有人會問,讓“訂單提交”站點直接在互聯網提供HTTPS服務,直接用一個HTTPS會話不是更好,原理上當然更好,但是有更多的現實問題:
1. 直接在互聯網提供HTTPS服務,需要一個互聯網地址和公共域名,這兩樣都是要花錢申請的,使用SSL ***統一接入,這麼多內部站點只需要一個公網地址、一個公網域名,多划算;
2. 訂單提交真的需要開放到互聯網嗎?訂單提交都是公司內部業務,訪問量也不大,直接開放到互聯網並不能有更多的提速效果;
3. 開放到互聯網怎麼保證安全,財務報表等信息都是公司機密,老老實實放在內網,前面通過SSL ***服務器擋着,即使有***也只是***SSL ***服務器,內網服務器還是很安全的。
綜上所述對於一些內部站點,使用SSL ***還是相當有好處的,特別是在擁有一款強大的SSL ***服務器的時候。
三、 端口映射
剛纔講的是WEB代理,對於一些內部服務器並不是WEB站點,那WEB代理還能使用嗎?不能使用了,比如內部站點是FTP應用,那麼訪問不可能由HTTPS會話和FTP會話銜接而成,SSL ***必須想其餘辦法。由於SSL只能封裝在TCP之上,所以端口映射服務器只能針對內部的TCP應用,如FTP。
在端口映射中,SSL ***的使用者會從SSL ***頁面自動加載一個客戶端程序,我們姑且就叫它SSL ***客戶端程序吧,它是怎麼使端口映射工作的呢,我們假設內部有兩個FTP服務器,一個叫FTP1,內部地址10.6.16.1,另一個是FTP2,內部地址10.6.16.4,都是監聽TCP 21端口:
1. SSL ***服務器爲這兩個內部服務器做了端口映射,TCP 2021端口映射到FTP1的TCP 21,3021則映射到FTP2;
2. SSL ***服務器會讓使用者PC自動加載SSL ***客戶端程序,並根據這兩個映射生成兩個靜態host映射表項,告訴使用者PC訪問FTP1其實就是訪問127.0.0.2,訪問FTP2就是訪問127.0.0.3,127.0.0.0/8稱爲環回地址,及該地址只能在PC內部使用,不可能被髮出到PC之外,那麼SSL ***客戶端程序就監聽這兩個內部地址;
3. 使用者訪問FTP1,其實訪問的是TCP 127.0.0.2:21,所有數據都會被SSL ***客戶端程序監聽,客戶端程序會進行代理,變成訪問服務器TCP 6.16.5.6:2021,該TCP訪問會使用SSL進行加密;
4. 大家可能會問,爲何需要個客戶端程序進行代理呢,使用者的應用程序不能直接和SSL ***服務器建立SSL會話嗎?這個問題很好,使用者的應用程序的確無法直接建立SSL會話,所以使用客戶端程序代勞,這種方式可以讓所有TCP應用都能夠享用SSL ***服務;
5. 服務器接收到SSL加密的請求後,首先會進行解密,然後根據端口映射,會向內部FTP1站點TCP 10.6.16.1:21發起訪問;
6. 反向轉發以及訪問FTP2類似。
我們可以發現這種端口映射使整個訪問過程由三段會話組成:使用者應用程序與SSL ***客戶端程序的普通TCP會話、SSL ***客戶端程序與服務器的SSL會話、服務器與內部站點的普通TCP會話。
從這張圖可以看出更詳細的數據封裝過程以及會話銜接過程,使用SSL ***服務器進行端口映射的好處與WEB代理類似,可以犧牲SSL ***服務器,保護內部服務器。
四、 IP連接
前面介紹的WEB代理是專門針對WEB應用的,端口映射則受制於SSL只支持TCP應用,如果使用者要任意訪問一個內部服務器的任意協議、端口,該如何是好呢?IP連接應運而生,IP連接可以完美地替代L2TP這種傳統意義上的***:虛擬連接、內部地址、路由互聯。
我們從上圖來解釋一下IP連接的原理:
1. 用戶登陸SSL ***頁面後,會建立HTTPS會話,服務器通過這個會話給用戶自動加載SSL ***客戶端程序;
2. 此時的SSL ***客戶端程序的目的是給用戶PC創建一個虛擬網卡,以實現類似於L2TP那種到客戶總部網絡的***連接;
3. 虛擬網卡創建好後,服務器會給該用戶從地址池中取一個地址分配給該用戶,同時下發路由、DNS等信息,服務器針對該地址池也會有一個服務器地址192.168.1.1,作爲所有客戶端程序虛擬網卡的網關;
4. 此時SSL ***客戶端程序與服務器之間會建立一個全新的SSL會話,專門用來傳輸虛擬網卡與服務器之間的流量;
5. 假設用戶要訪問DNS 10.6.16.1,根據路由的關係,PC會通過虛擬網卡將DNS請求(源192.168.1.2目的10.6.16.1)轉發給SSL ***服務器192.168.1.1;
6. PC上的SSL ***客戶端程序會將虛擬網卡發出的IP包封裝至新的SSL會話中,通過互聯網傳送到服務器;
7. 服務器進行解密,解封裝後發現IP目的地址是10.6.16.1,那麼就轉發給DNS;
8. 反向過程以及訪問ERP服務器10.6.16.4與此類似。
再來看一下數據封裝過程,會有更加直觀的認識:
在SSL ***的IP連接中,客戶端訪問內部服務器不再像WEB代理、端口映射那應該多個會話銜接而成,而是一個內部地址端到端會話,穿越互聯網的時候直接會話被封裝至SSL會話中,和L2TP Over IPSec非常類似。
五、 SSL ***總結
爲什麼說SSL ***可以通過多粒度的服務呢?這是一個對比:
1. WEB代理,可以精確到對HTTP站點某些URL的控制;
2. 端口映射,可以精確到對某個端口的控制;
3. IP連接,可以精確到對某個IP地址的控制;
L2TP只能實現3,無法實現1和2,更是很難實現行爲審計功能。因此業界非常看好SSL ***的前景,但使用SSL ***必然也有一些侷限性和代價:
1. 對於站點到站點的應用,效率上不如IPSec,所以通常用來取代L2TP方案,而不是IPSec方案;
2. SSL ***的IP連接服務,在有連接的TCP中封裝無連接的IP、UDP上效率不是很高,如果TCP中再封裝TCP,在網絡狀況不穩定情況下,傳輸效率可能會急劇下降,但這個難題在被逐步功課之中,將來的TLS ***可以實現在安全UDP會話,那情況就會好轉很多;
3. SSL ***客戶端必須配合SSL ***服務器,各個廠家的客戶端都是自行開發的,無法互相兼容,由於客戶端都是動態加載的,也就是說訪問什麼服務器,必然加載與之配套的客戶端,不存在兼容性問題,但客戶端是操作系統相關,甚至是瀏覽器相關的,很多廠家的SSL ***只開發了基於Windows IE的客戶端,使用Linux、BSD操作系統的使用者無疑就杯具了,這裏呼籲各大廠家要多多照顧一下其餘操作系統用戶。
文章出處轉至:ICG技術專欄-阿丘有話說http://www.h3c.com.cn/Service/Channel_Service/Operational_Service/ICG_Technology/201008/686807_30005_0.htm