錦上添花:為最佳JSP服務(wù)器Resin加上SSL認(rèn)證
原創(chuàng)【51CTO.com 獨家特稿】Resin主要是作為WEB服務(wù)器的jsp/servlets運行平臺。它支持許多WEB服務(wù)器軟件,而且是完全免費的,并提供了對SUN的J2EE的支持,這要比其它相關(guān)的java和javascript開發(fā)和運行平臺要好的多,而且速度非???,并提供服務(wù)器端直接開發(fā)、編譯和運行。因此,Resin受到了許多應(yīng)用JSP的WEB站點的支持。
對于任何一種WEB站點來說,不管使用何種方式的開發(fā)平臺,運行后最關(guān)鍵的問題之一就是解決服務(wù)器與用戶之間的安全問題。而對于WEB站點與用戶會話過程中數(shù)據(jù)的機密性保護,目前最好的解決方式主要是使用SSL技術(shù)來進行。由于Resin具有的上述優(yōu)點使得它越來越受歡迎,使用它的WEB站點也就越來越多。
但是,通常狀態(tài)下,Resin并不對SSL請求做出任何的回應(yīng)。如果我們需要使用SSL來增加站點與用戶之間的數(shù)據(jù)傳輸?shù)陌踩?,我們就必需?jīng)過一系列的操作來讓Resin提供對SSL加密的支持。
一、 在WEB服務(wù)器中使用OpenSSL套件
1、安裝OpenSSL
想要Resin可以響應(yīng)SSL請求,我們就必需保證WEB服務(wù)器上已經(jīng)安裝好了相關(guān)的SSL套件。對于中小企業(yè)來說,開源免費的OpenSSL提供與SSL相同的認(rèn)證功能。
OpenSSL的Linux版本可以在www.openssl.org網(wǎng)站上下載?,F(xiàn)在它的最新版本是OpenSSL 0.9.8j。
Resin通過它的libexec/libresinssl.so JNI庫文件提供對OpenSSL的支持。如果是在類Linux系統(tǒng)下使用OpenSSL,在安裝時可以通過下列命令將它安裝到指定的位置:
./configure --with-openssl=/usr/local/ssl
如果我們是在Windows系統(tǒng)中使用Resin,那么,我們同樣需要在此操作系統(tǒng)下先安裝好OpenSSL。Windows下的OpenSSL在www.slproweb.com/products/Win32OpenSSL.html下載,它的最新安裝文件是Win32OpenSSL-0_9_8j.exe,其大小為7MB左右。
在Windows系統(tǒng)下,Resin的resinssl.dll文件中包含提供對OpenSSL支持的代碼。(在Resin3.0以前的版本是通過resin.dll文件提供支持的。)因此,在Windows系統(tǒng)下只需要安裝好OpenSSL就可以讓Resin使用它了。OpenSSL在Windows系統(tǒng)下很容易安裝,就如同安裝其它的應(yīng)用程序一樣簡單。
不過,在Windows系統(tǒng)下安裝完OpenSSL后,還應(yīng)當(dāng)將一些需要的DLL文件復(fù)制到Resin的根目錄當(dāng)中。現(xiàn)在假設(shè)Resin安裝在c:\resin-3.2.1目錄,OpenSSL安裝在c:\Program Files\GnuWin32目錄?,F(xiàn)在打開系統(tǒng)開始菜單的“運行”對話框,在運行框中輸入CMD命令,回車后進入命令行終端界面。然后在命令行終端下就可以通過下列所示的命令將OpenSSL安裝目錄下的相關(guān)文件復(fù)制到Resin的根目錄下:
cd resin-3.2.1
copy c:\Program Files\GnuWin32\bin\libssl32.dll c:\resin-3.2.1\libssl32.dll
copy c:\Program Files\GnuWin32\bin\libeay32.dll c:\resin-3.2.1\libeay32.dll
2、生成SSL認(rèn)證私鑰
SSL認(rèn)證的密鑰由OpenSSL來生成,生成后的密鑰應(yīng)當(dāng)保存到相應(yīng)的Resin目錄中。因此,在生成密鑰前,我們可以在Resin根目錄中創(chuàng)建一個keys子目錄用來保存將要創(chuàng)建的密鑰。在類Linux系統(tǒng)下,我們可以通過下列方式來創(chuàng)建keys目錄:
cd /resin
mkdir keys
在Windows系統(tǒng)下,我們可以在資源管理器中直接在Resin根目錄下創(chuàng)建一個新文件夾,并命名為keys即可。
在生成密鑰時,OpenSSL會根據(jù)其配置文件中設(shè)置的內(nèi)容來生成。在類Linux系統(tǒng)下,這個缺省的配置文件可能在usr/ssl/openssl.cnf或/usr/share/ssl/openssl.cnf下。而Windows系統(tǒng)中不存在這樣的文件。
當(dāng)然,我們還可以自己創(chuàng)建一個相應(yīng)的配置文件保存到Resin/keys/目錄下。這樣,在創(chuàng)建密鑰時,OpenSSL也會根據(jù)這個配置文件中的內(nèi)容來創(chuàng)建,而且,在創(chuàng)建密鑰時不會要求我們根據(jù)提示輸入缺省的相關(guān)信息了。
下面是一個openssl.cnf配置文件的相關(guān)內(nèi)容實例:
[ req ]
default_bits = 1024 #在這里填入加密鍵的缺省位數(shù)
distinguished_name = req的名稱
[ req_distinguished_name ]
C = 在這里填入國家的代碼,例如CN,代表中國
C_default =
ST = 這里填寫州或省名稱
ST_default =
L = 城市
L_default =
O = 企業(yè)或機構(gòu)名稱
O_default =
OU = 組織中某個部門的名稱,例如市場部
OU_default =
CN = 我們的網(wǎng)站域名,必需是全名,例如www.myweb.com
CN_default =
emailAddress = 聯(lián)系的E-Mail郵箱地址
emailAddress_default =
完成OpenSSL配置文件的相關(guān)設(shè)置后,我們就可以開始為SSL認(rèn)證創(chuàng)建一個私鑰。在WEB服務(wù)器上創(chuàng)建私鑰時,會要求我們輸入相應(yīng)的密碼,這個密碼將會在我們使用創(chuàng)建的私鑰時要求被輸入。因此要牢記這個密碼并妥善地保管它。我們還必需將這個密碼加入到Resin的配置文件當(dāng)中。
在類Linux系統(tǒng)下創(chuàng)建私鑰時,私鑰的文件名可以由我們自己決定,可以通過下列所示命令來完成:
openssl genrsa -des3 -out myprikey.key 1024
在Windows系統(tǒng)下創(chuàng)建私鑰。得先進入命令行終端界面,然后用CD命令切換到OpenSSL安裝目錄,再用下列命令產(chǎn)生私鑰;
c:\Program Files\GnuWin32\bin\openssl.exe genrsa -des3 -out myprikey.key 1024
二、 創(chuàng)建或申請SSL證書:
為了能夠加密與用戶的會話數(shù)據(jù),我們還必需為SSL認(rèn)證創(chuàng)建或申請一個公鑰證書。這個公鑰證書在使用時會由Resin發(fā)送給用戶的瀏覽器,以便瀏覽器能夠加密其發(fā)送的數(shù)據(jù)。公鑰證書可以由OPENSSL產(chǎn)生一個自簽名證書,也可以到第三方SSL證書頒發(fā)機構(gòu)申請一個公鑰證書。要注意的是,自簽名證書將不能被其瀏覽器所承認(rèn)。
1、創(chuàng)建一個自簽名證書
當(dāng)我們只是用來測試WEB服務(wù)器的SSL安全連接,或者只是作為企業(yè)遠程辦公之用時,那么創(chuàng)建一個自簽名證書將會為我們節(jié)省一筆小錢。但是,對于這樣的自簽證書,WEB瀏覽器是不會承認(rèn)的,還會為此彈出一個警告框來提醒用戶這個證書不是一個公認(rèn)的SSL證書。不過,用戶瀏覽器與WEB服務(wù)器之間的會話數(shù)據(jù)仍然是被SSL加密了的。
在類Linux系統(tǒng)下創(chuàng)建自簽名證書,可以使用下列命令來完成:
openssl req -config ./openssl.cnf -new -key myprikey.key -x509 -out myself.crt
在Windows系統(tǒng)下創(chuàng)建自簽名證書,在字符終端用CD命令進入OpenSSL安裝目錄后,可以通過下列命令完成:
c:\Program Files\GnuWin32\bin\openssl.exe req -config ./openssl.cnf -new -key myprikey.key -x509 -out myself.crt
其中,自簽名證書的名稱可以由我們自己決定,例在本例中為myself.crt,而“-key”參數(shù)后帶的鍵文件是在上面我們創(chuàng)建的私鑰文件,而命令中的“./openssl.cnf”表示當(dāng)前目錄下的OpenSSL的配置文件。
如果我們沒有按前文所述方式生成一個OpenSSL配置文件,或者沒有修改此配置文件中的缺少配置值,那么在創(chuàng)建過程中會要求我們提供一些基本的與WEB服務(wù)器相關(guān)的身份資料,例如企業(yè)名稱和網(wǎng)站域名等信息。
2、創(chuàng)建一個證書請求文件
如果要使用第三方證書頒發(fā)機構(gòu)上的證書,那么就必需先創(chuàng)建一個證書請求文件(CSR)。這個證書請求文件中包含有證書的公鑰、企業(yè)名稱、加密位數(shù)、地址和網(wǎng)站域名等信息。
當(dāng)我們在第三方證書頒發(fā)機構(gòu)上申請證書時,就會要求我們提交這個證書請求文件,然后,證書頒發(fā)機構(gòu)才能將SSL證書頒發(fā)給我們?,F(xiàn)在提供SSL證書的機構(gòu)有許多,例如VeriSign公司就是其中最著名的代表。在生成證書請求文件時一定要注意,我們使用什么樣的WEB服務(wù)器軟件,就必需生成與它相兼容的證書請求文件,這樣,SSL證書頒發(fā)機構(gòu)頒發(fā)給我們的證書才能在此WEB服務(wù)器下使用。
在Linux系統(tǒng)下生成證書請求文件,可以使用下列命令達到目的:
openssl req -new -config ./openssl.cnf -key myprikey.key -out myprikey.csr
在Windows系統(tǒng)下生成證書請求文件,在命令行界面中通過CD命令進入OpenSSL安裝目錄后,通過下列命令來完成證書請求文件的生成:
c:\Program Files\GnuWin32\bin\openssl.exe req -new -config ./openssl.cnf -key myprikey.key –out myprikey.csr
證書請求文件的文件名可以由我們自己來決定,在本文中為myprikey.csr。在生成證書請求文件過程中會要求我們輸入一些與WEB服務(wù)器身份相關(guān)的信息,例如網(wǎng)站域名和企業(yè)名稱等。我們必需按要求如實填寫。
當(dāng)我們成功注冊,并支付相應(yīng)的年使用費之后,這些證書頒發(fā)機構(gòu)就會將SSL證書發(fā)送到我們填寫的電子郵箱當(dāng)中。
三、 配置Resin使用私鑰和SSL證書
要想Resin能夠使用SSL認(rèn)證,我們還必需對其配置文件resin.conf做相應(yīng)的設(shè)置。具體要配置的內(nèi)容包括:
...
其中,
四、 測試Resin的SSL加密連接
當(dāng)我們配置好Resin的SSL認(rèn)證后,我們還可以通過一些方式來檢驗我們的配置是否正確。
在Windows系統(tǒng)下,我們就可以通過在WEB瀏覽器地址欄中輸入https://URL(企業(yè)網(wǎng)站的域名)的方式,來驗證WEB服務(wù)器是否對這樣的URL地址做出正確響應(yīng)。如果返回正常的內(nèi)容,并且在WEB瀏覽器地址欄中顯示出一個掛鎖的標(biāo)志,那么,Resin的SSL配置就算成功了。
在Linux系統(tǒng)下,除了可以上述方式來檢驗外,還可以通過下列方式來驗證:
openssl s_client -connect www.myweb.com:443 –prexit
另外,我們還可以通過下列的JSP腳本來快速驗證Resin是否對SSL做出反應(yīng):
Secure? <%= request.isSecure() %>
經(jīng)過上述的檢驗操作后,如果都能得到WEB服務(wù)器的正確響應(yīng),那么就說明Resin已經(jīng)能夠提供對SSL技術(shù)的支持了。
也就是說,當(dāng)用戶通過WEB瀏覽器向WEB服務(wù)器發(fā)送一個SSL請求時,Resin就會為這個WEB瀏覽器提供SSL認(rèn)證的公共密鑰,然后,這個WEB瀏覽器就可以使用這個公共密鑰來加密數(shù)據(jù),而Resin將使用WEB服務(wù)器的SSL私鑰對加密的數(shù)據(jù)進行解密。
【51CTO.COM 獨家特稿,轉(zhuǎn)載請注明出處及作者!】
【編輯推薦】