起因:
客戶反饋Weblogic 8.1.4配置了全球服務器證書(雙向SSL)後性能急劇下降,而不配置SSL時性能不錯。
【系統運行慢時,weblogic併發資源被耗盡,查詢顯示,併發大部分在佔用“SSL連接”】
這種問題可不太好處理,不管是不是Weblogic的問題,都要參考廠商的資料,但一般我們是很難獲得這種國外公司的支持的。週末就要出差了,我得準備一個保底方案。考慮Apache上運行SSL的性能是可以信任的,我準備的保底方案是Apache(run 2-way SSL)->Weblogic(HTTP),這樣應用雙向SSL時把SSL的壓力扔給Apache而不影響Weblogic,我想肯定是可行的。
本來打算使用Apache 2.2.x+Weblogic 9.1.0進行測試,但一來在Weblogic 9.1.0安裝目錄中找不到mod_wl_20.so,二來在網上搜索到mod_wl_20.so在Apache 2.2.x運行不了的先例,而且還沒找到解答。而我現在最重要的是解決客戶的問題,沒必要第一個吃螃蟹。
由於BEA被Oracle收購,Weblogic的早期版本從官網上都找不到下載鏈接了。花了些功夫,找到鏈接http://download2.bea.com/pub/platform/81/server814_win32.exe
配置Apache2.0.63+Weblogic 8.1.4 2的方法是:
1、複製D:/bea/weblogic81/server/bin/mod_wl_20.so到C:/Program Files/Apache Group/Apache2/modules
2、編輯httpd.conf,增加:
loadmodule weblogic_module modules/mod_wl_20.so
<IfModule mod_weblogic.c>
WebLogicHost localhost
WebLogicPort 7001
</IfModule>
<Location /CertLogonWebDemo>
SetHandler weblogic-handler
</Location>
這樣配置訪問http://localhost/CertLogonWebDemo和http://localhost:7001/CertLogonWebDemo就可以看到完全一樣的內容了。
配置apache的雙向SSL對我來說簡直輕車熟路,時間不早,不再贅述。
但是最重要的問題出現了,在java代碼裏使用request.getAttribute("javax.servlet.request.X509Certificate")返回值爲null。也就是說Apache並沒有把client certificate傳遞給Weblogic,因此運行於Weblogic上的web application無法認證客戶端的證書,這是完全不能接受的。
我先認爲應該是Weblogic Apache HTTP Server Plug-In(就是mod_wl_20.so的配置)的問題,花了很大精力卻始終不能解決。相關文檔地址如下:
http://edocs.bea.com/wls/docs81/plugins/apache.html
大概是要配置apache支持SSLExportClientCertificates選項,但是把該選項添加到Apache 2.0.63時,Apache啓動又報錯了,原來SSLExportClientCertificates是Apache 1的配置選項。
再查到http://phpeye.com/apachemanual/ssl/ssl_compat.html,根據文檔在ssl.conf中增加
SSLOptions +ExportCertData
刷新https://localhost/CertLogonWebDemo,終於搞定。
唉,現在又到2:14 am了。洗澡!睡覺!