2009-10-01 27 views
4

我們的開發團隊開發了一個運行在Weblogic 10.3上的J2EE應用程序。每臺開發機器運行自己的Weblogic 10.3應用服務器副本。開發環境的Weblogic域最初是在一臺機器上創建的,然後使用Weblogic的配置工具(bea10/wlserver_10.3/common/bin/config.cmd)複製到所有機器上。如何將Weblogic的config.xml遷移到多臺機器?

每個開發機器都有自己的config.xml副本。該文件中的所有密碼短語(用於JDBC數據源的密碼短語等)都被加密,並且加密明顯在每臺機器上使用不同的種子,因爲相同的密碼在不同的機器上具有不同的加密表單。

問題是每隔一段時間config.xml需要更新(例如,當添加一個新的EJB時)並且需要在所有機器上應用更新。我們應該如何去做這件事?如果我們只是將文件放入CVS並從那裏更新其他機器,則每臺機器上的加密密碼將被覆蓋。當服務器試圖解密最初在另一臺機器上加密的密碼時,這會導致醜陋的paddingexceptions。

有沒有一個ant任務(我找不到一個)或類似的機制,會照顧正確合併config.xml中的更改而不覆蓋加密的密碼?或者是否有可能以明文形式指定密碼短語,並在第一次開始時對它們進行加密(我有一個微弱的回憶,這在以前的版本中是可能的,但在10.3中是不可能的)。

Weblogic開發團隊如何處理這個問題?

BR,

馬爾科

回答

6

[...]每個開發機器都有自己的 config.xml副本。所有 密碼短語(那些JDBC數據源 等),在這個文件是加密的 ...

是中,WebLogic Server加密所有存儲在其領域配置XML文件(S)的明文密碼。這是爲了防止訪問敏感信息。使用管理控制檯或腳本工具輸入密碼時,密碼將在存儲在配置XML文件中之前自動加密。

...和加密 上 顯然使用不同的種子各機器因爲相同的密碼 對 不同的機器不同的加密形式。

關於該encrypt實用程序(從Oracle WebLogic Server的Java工具),該文件說:

weblogic.security.Encrypt加密,以與WebLogic Server中使用明文字符串。該實用程序使用當前目錄的加密服務或指定的WebLogic Server域根目錄的加密服務。

注意:已加密的字符串必須已由WebLogic Server域中的加密服務加密,它將在其中使用。如果沒有,服務器將無法解密字符串。

這在文檔中沒有提到,但AFAIK Weblogic使用域的密碼salt文件(SerializedSystemIni.dat)來加密明文字符串。

[...]如果我們只是把文件放入CVS並更新其他機器,那麼每臺機器上的加密密碼都會被覆蓋。

您可以選擇在存儲在VCS中的config.xml中使用明文密碼(如果這不是問題)。實際上,在WebLogic Server 9.0之前,密碼將在隨後的重新啓動過程中得到加密。從WebLogic Server 9.0開始,在配置文件中使用明文密碼僅對開發域「完全」支持,Weblogic不會重新加密密碼。在這兩種情況下,這將允許人們檢查出配置文件沒有麻煩。

有一個Ant任務(我無法找到一個)或類似機制,照顧正確合併config.xml中的變化,但不覆蓋加密的密碼?...

我不確定這是否直接回答您的問題,但Oracle WebLogic Server爲其大多數(如果不是全部)Java實用程序提供Ant tasks。也許你會發現一些有用的有(退房Configuring a WebLogic Server Domain Using the wlconfig Ant Task

或者是有可能在某種程度上明文指定密碼短語,並在首次啓動時對其進行加密(我有一個淡淡的回憶,這是有可能在以前的版本但不在10.3)。

正如我上面寫的,這是Weblogic Server 9.0之前的「默認」行爲。我不知道你是否可以爲更高版本強制這種行爲。當然,你總是可以使用ant和encrypt來做到這一點,但說實話,如果你允許人們看到明文密碼一次,我真的沒有看到事實後加密他們的重點。

+1

嗨帕斯卡, 非常感謝您的深思熟慮的答覆!在開發環境中存儲明文密碼是可以的,所以我認爲這是一條可行的路。 但是,我找不到在config.xml中存儲這些文件的正確方法。元素是允許的,但是我在dtd(http://www.oracle.com/technology/weblogic/920/domain.xsd)中找不到它的純文本選項。我在這裏錯過了什麼? 一種替代方法(非常冒險)是在每個開發服務器上使用相同的SerializedSystemIni.dat。這將允許在所有PC上使用相同的加密憑據嗎? – MarkoU 2009-10-07 12:39:30

+1

您是否嘗試將明文密碼放在''中? IMO沒有其他選擇。關於替代方法,即使用相同的'SerializedSystemIni.dat',我不確定,這將需要一些測試。這就是爲什麼我沒有提到它。 – 2009-10-07 12:57:10

+1

嗨,將明文密碼放入<憑證加密>實際工作。還要複製SerializedSystemIni。數據到不同的域似乎工作,所以現在有替代品。再次感謝你。 – MarkoU 2009-10-08 08:14:27

1

我會用像水銀或Git的,並且使用導出/導入功能,使更改在差異列表移動,而不是在完整的文件。

Short instructions

好吧,如果你被卡住CVS(對不起,我同意你的痛苦在一定程度上),則可以考慮創建diff文件的CVS回購。例如。當創建一個新版本的配置文件時,新文件將被分配到舊文件,差異文件被添加到回購站,其他主機從CVS簽出並修補配置文件。

這是一個黑客,但應該工作。

+0

與CVS(公司政策)相當困難,但無論如何感謝。 – MarkoU 2009-10-01 14:04:34

1

就我個人而言,我會考慮WLST做大規模域更新。這真的很簡單,即使你有蟒蛇上記錄的域(Web管理界面),沒有經驗或WLST

  1. 反過來
  2. 做一個域的更改(Web管理界面)
  3. 激活更改( Web管理界面)
  4. 你應該得到一個python腳本在默認域文件夾
  5. 爲每個環境
    1. 連接到管理服務器,無線網絡破解周圍的WebLogic域的文件,然後 - 次WLST
    2. 如果需要

目前我工作的公司做了類似的事情,以你的描述適用腳本

  • 重啓域或託管服務器通過小的調整將相同的文件部署到我們所有的環境中。多年來,我們結束了一個絕對混亂。這只是不走的路。

  • 1

    我們是用WLST做的。我們在python中使用某種簡單的聲明性「域模型」,它比較抽象(即它沒有指定集羣中不同服務器的配置,在我們的環境中,所有節點必須是相同的)。這個模型非常簡短(對於擁有30多個連接池,一堆JMS資料和一些外部JMS提供者的最大應用程序來說,這個模型只有2-3頁)。之後,我們有兩個腳本:首先在目標環境中創建一個空域,第二個應用域模型。爲了收集開發人員在「主」環境中所做的更改,我們有一個腳本通過域配置並輸出模型文件。在這些模型文件上使用diff,我們可以看到發生了什麼變化。

    這看起來像一個重量級的框架,但當我們必須爲100多個應用程序管理開發,測試,暫存和生產環境時,它確實節省了大量時間。

    對於較小的情況只需複製文件並使用相同的SerializedSystemIni.dat即可。只要確保你的域名保持不變,調整地址/端口。 如果您想要使用不同的SerializedSystemInit.dat,那麼基於此代碼(http://gustlik.wordpress.com/2008/08/06/decryption-of-configuration-passwords-in-weblogic/),您也可以很容易地編寫一個實用程序,該實用程序將使用原始SerializedSystemIni.dat解碼密碼,並使用新的一。這應該做的伎倆。

    相關問題