目前網(wǎng)絡(luò)上很多描述實(shí)現(xiàn)SSL的文章,但是要么是局限于理論,要么是配置單向SSL的,要么是基于Tomcat的,即便是和WebLogic Server相關(guān)的,也沒(méi)有為讀者提供一個(gè)可依照實(shí)現(xiàn)的操作。本文參考其它文檔,主要描述了在Windows下如何實(shí)現(xiàn)WebLogic Server的雙向SSL配置,并且客戶端和服務(wù)器端采用了不同的證書來(lái)源,希望能夠?yàn)樽x者提供一個(gè)具有可操作性的參考。
文中的操作 在筆者計(jì)算機(jī)上完全測(cè)試通過(guò)。
前期準(zhǔn)備
筆者的操作系統(tǒng)是Windows XP SP2,安裝的軟件有
Microsoft Visual Studio 6.0(主要是VC++),安裝目錄MVS_HOME
BEA的WebLogic Server 8.1.5,安裝目錄BEA_HOME
JDK1.4.2.8,安裝WebLogic Server后帶有,目錄為%BEA_HOME%jdk142_08
在實(shí)現(xiàn)過(guò)程中需要的軟件有:
Perl for win32
下載地址http://www.activestate.com/ActivePerl
Openssl
下載地址http://www.openssl.org
在生成證書和私鑰時(shí),我們使用了 openssl軟件,由于openssl軟件在windows上安裝需要perl環(huán)境,因此我們需要下載Active Perl相關(guān)軟件,并且需要安裝VC++或者Delphi,以便編譯安裝openssl。
對(duì)于各個(gè)軟件的初始化設(shè)置,主要是設(shè)置環(huán)境 變量,通過(guò)“我的電腦”右鍵,“屬性”-“高級(jí)”-“環(huán)境變量”,添加如下:
Classpath =%BEA_HOME%weblogic81serverlibweblogic.jar
INCLUDE =%MVS_HOME%VC98Include
LIB =%MVS_HOME%VC98Lib
在Path環(huán)境變 量中增加(編譯openssl使用)
%MVS_HOME%VC98Bin; %MVS_HOME%CommonMSDev98Bin
在Path環(huán)境變量中增加(java相關(guān)命令使用)
%BEA_HOME%jdk142_08in;
安裝 openssl
安裝ActivePerl
ActivePerl下載的是.msi文件,點(diǎn)擊后可以安裝,安裝后,在path環(huán)境變量 中增加
%PERL_HOME%in
安裝openssl
下載openssl的壓縮源文件以后,解開(kāi)壓縮 到目錄openssl-xxxd目錄,通過(guò)DOS窗口,進(jìn)入到openssl-xxxs目錄后,執(zhí)行
perl Configure VC-WIN32 --prefix=c:/openssl
其中c:/openssl為準(zhǔn)備安裝openssl的目錄,筆者安裝在 C:openssl目錄下,注意要寫作/,否則會(huì)在編譯cversion.c文件時(shí)出現(xiàn)錯(cuò)誤信息。
執(zhí)行msdo_ms
如果上述執(zhí)行沒(méi)有錯(cuò)誤,則創(chuàng)建相應(yīng)的安裝目錄,然后執(zhí)行
nmake -f ms tdll.mak install
安裝openssl,編譯的時(shí)間比較長(zhǎng),請(qǐng)耐心等待,并且確認(rèn)沒(méi)有錯(cuò)誤。
環(huán)境變量
Openssl安裝成功以后,需要在 path中增加如下的環(huán)境變量
%OPENSSL_HOME%in
增加環(huán)境變量 OPENSSL_CONF=%OPENSSL_HOME%openssl.cnf
建立自己的CA證書
在BEA_HOME下建立目 錄ca,重新啟動(dòng)DOS窗口,進(jìn)入到BEA_HOME目錄下。
生成CA密鑰
openssl genrsa -out ca/ca-key.pem 1024
生成待簽名的證書
openssl req -new -out ca/ca-req.csr -key ca/ca-key.pem
在生成待簽名的證書時(shí),會(huì)詢問(wèn)個(gè)人或者單位的信息,依次會(huì)詢問(wèn)國(guó) 家,省,地區(qū),組織,部門,名稱和郵件信息,并且會(huì)詢問(wèn)一些附加信息,作為測(cè)試,讀者可以依據(jù)下面的圖片填寫,也可以輸入自己有關(guān)的信息。
用 CA私鑰自簽名
openssl x509 -req -in ca/ca-req.csr -out ca/ca-cert.pem -signkey ca/ca-key.pem -days 365
生成WebLogic Server證書
在WebLogic Server這邊,我們會(huì)使用它提供的用于demo的私鑰和數(shù)字證書,在%BEA_HOME%下創(chuàng)建目錄server,拷 貝%BEA_HOME%weblogic81serverlib下的CertGenCA.der和CertGenCAKey.der文件 到%BEA_HOME%server下。
生成證書,DOS窗口下進(jìn)入目錄%BEA_HOME%執(zhí)行命令:
java utils.CertGen password serverCertGenCA.der serverCertGenCAKey.der export
將會(huì)生成CertGenCA.der.pem和CertGenCAKey.der.pem文件
建立keystore,并且將證書和私鑰 裝入keystore
java utils.ImportPrivateKey servermykeystore password myserver password serverCertGenCA.der.pem serverCertGenCAKey.der.pem
將 CA證書導(dǎo)入到驗(yàn)證keystore中
keytool -import -v -trustcacerts -storepass password -alias my_ca_root -file ca/ca-cert.pem -keystore server/cacerts
此處如果提示找不到keytool,要看一下JDK in的目錄是否在path變量中設(shè)置正確。
如果詢問(wèn)是否“信任這個(gè)認(rèn)證”,輸 入y回車,可以看到信息說(shuō)明認(rèn)證已經(jīng)添加到keystore中。
顯示驗(yàn)證keystore內(nèi)容
keytool -list -keystore server/cacerts
輸入密碼password(我們前面建立keystore是設(shè)置的),顯示的內(nèi) 容應(yīng)該類似如下:
C:ea>keytool -list -keystore server/cacerts
輸入 keystore密碼: password
Keystore 類型: jks
Keystore 提供者: SUN
您 的 keystore 包含 2 輸入
my_ca_root, 2006-11-21, trustedCertEntry,
認(rèn) 證指紋 (MD5): 38:32:AC:05:D9:4B:80:ED:43:43:9D:C5:2C:58:72:63
顯示服務(wù)器 keystore內(nèi)容
keytool -list -keystore server/mykeystore
輸入密碼 password(我們前面建立keystore是設(shè)置的),顯示的內(nèi)容應(yīng)該類似如下:
C:ea>keytool -list -keystore server/mykeystore
輸入keystore密碼: password
Keystore 類型: jks
Keystore 提供者: SUN
您的 keystore 包含 1 輸入
myserver, 2006-11-21, keyEntry,
認(rèn)證指紋 (MD5): 3D:1E:C1:67:FF:82:5A:4F:AE:18:63:18:97:3C:8E:0D
配置WebLogic Server
建立一個(gè)新的WebLogic Server的Domain。
啟動(dòng)WebLogic Server,通過(guò)console登錄進(jìn)管理界面,進(jìn)入“myserver”-“Configuration”-“General”,選中“SSL Listen Port Enabled”復(fù)選框,并且設(shè)定https的端口為7002,進(jìn)入“myserver”-“Configuration-Keystores & SSL”,點(diǎn)擊“Keystore Configuration”后面的“Change”,選擇“Custom Identity and Custom Trust”,如下圖設(shè)置:
其中目錄可根據(jù)自己安裝的BEA_HOME進(jìn)行修改,Pass Phrase部分都輸入“password”。
點(diǎn)擊“Continue”,在“Private Key Alias”中輸入myserver,Pass Phrase部分依然輸入“password”,最后點(diǎn)擊“finish”結(jié)束。
回 到“myserver”-“Configuration”-“Keystores & SSL”配置頁(yè)面,點(diǎn)擊“Advanced Options”后面的“change”,將“Two Way Client Cert Behavior:”部分修改為“Client certs requested and enforced”。
應(yīng)用后重新啟動(dòng)WebLogic Server。
觀察 WebLogic Server啟動(dòng)時(shí)候的控制臺(tái),正確配置后應(yīng)該有如下類似的信息:
生成客戶端IE證書
建立自己的Client目錄,例 如:client
生成Client密鑰對(duì)
openssl genrsa -out client/client-key.pem 1024
生成待簽名的證書
openssl req -new -out client/client-req.csr -key client/client-key.pem
同樣在詢問(wèn)中輸入個(gè)人證書的一些信息,確定后生成。
用CA私 鑰簽名
openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey client/client-key.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -CAcreateserial -days 365
生成Client端可以導(dǎo)入的個(gè)人證 書
openssl pkcs12 -export -clcerts -in client/client-cert.pem -inkey client/client-key.pem -out client/client.p12
詢問(wèn)設(shè)置導(dǎo)出密碼時(shí)可以 不填寫,直接回車。
將client證書導(dǎo)入IE
在資源管理器中選擇文件client.p12,鼠標(biāo)右鍵,選擇“安裝 PFX”,在密碼頁(yè),密碼部分可以不輸入,選擇“標(biāo)志此密鑰為可導(dǎo)出的”的復(fù)選框,將證書存儲(chǔ)于“個(gè)人”區(qū)域,成功導(dǎo)入后,在IE窗口顯示類似如下:
訪 問(wèn)WebLogic Server
通過(guò) https://serverip:7002/console/ 訪問(wèn)WebLogic Server,雖然服務(wù)器設(shè)置為需要客戶端認(rèn)證,但是由于我們導(dǎo)入了證書,因此可以訪問(wèn)。
<2006-11-21 下午10時(shí)49分27秒 CST>
<2006-11-21 下午10時(shí)49分27秒 CST>
查看WebLogic Server控制臺(tái),可以看到如下信息:
刪除導(dǎo)入的證書,重新 使用 https://serverip:7002/console/ 訪問(wèn)服務(wù)器,則頁(yè)面無(wú)法打開(kāi),控制臺(tái)顯示信息如下,說(shuō)明客戶端證書驗(yàn)證失?。?br />
<2006-11-21 下午10時(shí)54分53秒 CST>
<2006-11-21 下午10時(shí)54分53秒 CST>