HTTPS實際是SSL over HTTP, 該協議經過SSL在發送方把原始數據進行加密,在接收方解
密,所以,所傳送的數據不容易被網絡黑客截獲和破解。本文介紹HTTPS的三種實現方法
。
方法一 靜態超連接
這是目前網站中使用得較多的方法,也最簡單。在要求使用SSL進行傳輸的Web網頁連接
中直接標明使用HTTPS協議,如下是指向須要使用SSL的網頁的超連接:
<a href=「https://192.168.100.100/ok/securePage.jsp」>SSL例子</a>
須要說明的是,在網頁裏的超連接若是使用相對路徑的話,其默認啓用協議與引用該超
連接的網頁或資源的傳輸協議相同,例如在某超連接「https://192.168.100.100/ok/l
ogin.jps」的網頁中包含以下兩個超連接:
<a href=「./bessl/exam.jsp」>SSL連接</a>
<a href=「http://192.168.100.100/notssl/index.jsp」>非SSL連接
那麼,第一個連接使用與「https://192.168.100.100/ok/login.jsp」相同的傳輸協議
HTTPS,第二個連接使用自己所標識的協議HTTP。
使用靜態超連接的好處是容易實現,不須要額外開發。然而,它卻不容易維護管理; 因
爲在一個徹底使用HTTP協議訪問的Web應用裏,每一個資源都存放在該應用特定根目錄下的
各個子目錄裏,資源的連接路徑都使用相對路徑,這樣作是爲了方便應用的遷移而且易
於管理。但假如該應用的某些資源要用到HTTPS協議,引用的連接就必須使用完整的路徑
,因此當應用遷移或須要更改URL中所涉及的任何部分如:域名、目錄、文件名等,維護
者都須要對每一個超連接修改,工做量之大可想而知。再者,若是客戶在瀏覽器地址欄裏
手工輸入HTTPS協議的資源,那麼全部敏感機密數據在傳輸中就得不到保護,很容易被黑
客截獲和篡改!
方法二 資源訪問限制
爲了保護Web應用中的敏感數據,防止資源的非法訪問和保證傳輸的安全性,Java Serv
let 2.2規範定義了安全約束(Security-Constraint)元件,它用於指定一個或多個We
b資源集的安全約束條件;用戶數據約束(User-Data-Constraint)元件是安全約束元件
的子類,它用於指定在客戶端和容器之間傳輸的數據是如何被保護的。用戶數據約束元
件還包括了傳輸保證(Transport-Guarantee)元件,它規定了客戶機和服務器之間的通
信必須是如下三種模式之一:None、Integral、Confidential。None表示被指定的Web資
源不須要任何傳輸保證;Integral表示客戶機與服務器之間傳送的數據在傳送過程當中不
會被篡改; Confidential表示數據在傳送過程當中被加密。大多數狀況下,Integral或Co
nfidential是使用SSL實現。
這裏以BEA的WebLogic Server 6.1爲例介紹其實現方法,WebLogic是一個性能卓越的J2
EE服務器,它能夠對所管理的Web資源,包括EJB、JSP、Servlet應用程序設置訪問控制
條款。假設某個應用創建在Weblogic Server裏的/mywebAPP目錄下,其中一部分Servle
ts、JSPs要求使用SSL傳輸,那麼可將它們都放在/mywebAPP/sslsource/目錄裏,而後編
輯/secureAPP/Web-INF/web.xml文件,經過對web.xml的設置可達到對Web用戶實現訪問
控制。
當Web用戶試圖經過HTTP訪問/sslsource目錄下的資源時,Weblogic Server就會查找we
b.xml裏的訪問約束定義,返回提示信息:Need SSL connection to access this reso
urce。資源訪問限制與靜態超連接結合使用,不只繼承了靜態超連接方法的簡單易用性
,並且有效保護了敏感資源數據。然而,這樣就會存在一個問題: 假如Web客戶使用HT
TP協議訪問須要使用SSL的網絡資源時看到彈出的提示信息: Need SSL connection to
access this resource,大部分人可能都不知道應該用HTTPS去訪問該網頁,形成的後果
是用戶會放棄訪問該網頁,這是Web應用服務提供商不肯意看到的事情。
方法三 連接重定向
綜觀目前商業網站資源數據的交互訪問,要求嚴格加密傳輸的數據只佔其中一小部分,
也就是說在一個具體Web應用中須要使用SSL的服務程序只佔總體的一小部分。那麼,我
們能夠從應用開發方面考慮解決方法,對須要使用HTTPS協議的那部分JSPs、Servlets或
EJBs進行處理,使程序自己在接收到訪問請求時首先判斷該請求使用的協議是否符合本
程序的要求,即來訪請求是否使用HTTPS協議,若是不是就將其訪問協議重定向爲HTTPS
,這樣就避免了客戶使用HTTP協議訪問要求使用HTTPS協議的Web資源時,看到錯誤提示
信息無所適從的狀況,這些處理對Web客戶來講是透明的。
實現思想是:首先建立一個類,該類方法能夠實現自動引導Web客戶的訪問請求使用HTT
PS協議,每一個要求使用SSL進行傳輸的Servlets或JSPs在程序開始時調用它進行協議重定
向,最後才進行數據應用處理。
J2EE提供了兩種連接重定向機制。第一種機制是RequestDispatcher接口裏的forward()
方法。使用MVC(Model-View-Controller)機制的Web應用一般都使用這個方法從Servlet
轉移請求到JSP。但這種轉向只能是同種協議間的轉向,並不能重定向到不一樣的協議。第
二種機制是使用HTTPServletReponse接口裏的sendRedirect()方法,它能使用任何協議
重定向到任何URL,例如:
BeSslResponse.sendRedirect(「https://192.168.100.100/order」);
此外,咱們還需使用到Java Servlet API中的兩個方法:ServletRequest接口中的getS
cheme(),它用於獲取訪問請求使用的傳輸協議;HTTPUtils類中的getRequestUrl(),它
用於獲取訪問請求的URL,要注意的是該方法在Servlet 2.3中已被移到HTTPServletReq
uest接口。
如下是實現協議重定向的基本步驟:
1. 獲取訪問的請求所使用的協議;
2. 若是請求協議符合被訪問的Servlet所要求的協議,就說明已經使用HTTPS協議了,不
需作任何處理;
3. 若是不符合,使用Servlet所要求的協議(HTTPS)重定向到相同的URL。
例如,某Web用戶使用HTTP協議訪問要求使用HTTPS協議的資源BeSslServlet,敲入「UR
L:http://192.168.100.100/BeSslServlet」,在執行BeSslServlet時首先使用Proces
sSslServlet.processSsl()重定向到https://192.168.100.100/BeSslServlet,而後
BeSslServlet與客戶瀏覽器之間就經過HTTPS協議進行數據傳輸。
以上介紹的僅是最簡單的例子,是爲了對這種重定向的方法有個初步的認識。假如想真
正在Web應用中實現,還必須考慮以下幾個問題:
● 在Web應用中經常會用到GET或Post方法,訪問請求的URL中就會帶上一些查詢字串,
這些字串是使用getRequesUrl()時獲取不到的,並且在重定向以後會丟失,因此必須在
重定向以前將它們加入到新的URL裏。咱們可使用request.getQueryString()來獲取G
ET的查詢字串,對於Post的Request參數,能夠把它們轉換成查詢串再進行處理。
● 某些Web應用請求中會使用對象做爲其屬性,必須在重定向以前將這些屬性保存在該
Session中,以便重定向後使用。
● 大多數瀏覽器會把對同一個主機的不一樣端口的訪問看成對不一樣的主機進行訪問,分用
不一樣的Session,爲了使重定向後保留使用原來的Session,必須對應用服務器的Cookie
域名進行相應的設置。
以上問題都可在程序設計中解決。
經過程序自身實現協議重定向,就能夠把要求嚴格保護的那部分資源與其餘普通數據從
邏輯上分開處理,使得要求使用SSL的資源和不須要使用SSL的資源各取所需,避免浪費
網站的系統資源。