2009-10-01 73 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解码密码,并使用新的一。这应该做的伎俩。

    相关问题