Weblogic 凭据解密问题

Issue with decryption of Weblogic Credentials

我已经使用此命令创建了一个配置文件和密钥文件

java weblogic.Admin -username test_user -password test_user -userconfigfile C:\temp\testingconfig.config -userkeyfile C:\temp\testingkey.key STOREUSERCONFIG

配置和密钥是

weblogic.management.username= {3DES}1VR2QW0Yj3XHj/iEr+z9Mve3mJi0RSCw3J62m1rb063xLAHPTwXcS6X+VRC6tI8xsHriNfYtsB0\= weblogic.management.password= {3DES}ALU/yO2Zi4Z7SkVj1qJDvckmy7Y1DpDc7654xPIeg2zaj5On6yxa6xB0L4Xf0oS0d/9vtLFkgps\=

当我尝试使用配置和密钥以及我的 java 代码来解密这些凭据时,我得到了一些其他加密值:

密码=[C@3ba08dab

用户名={AES}OLU4ELDpdXulGpd4abYvYbN7i/ngvXbBFZ+/UyYk89I=

我写的java代码是

UsernameAndPassword file = UserConfigFileManager
                    .getUsernameAndPassword(<Path to config file>,
                            <Path to key file>",weblogic.management");

那么如何使用配置和密钥在 java 代码中获取 解密的 凭据作为 test_user/test_user

请帮忙..

示例 WLST 脚本:

from weblogic.security import UserConfigFileManager

def decrypt(cred_file, secret_key):
  u_and_p = UserConfigFileManager.getUsernameAndPassword(cred_file, secret_key, "weblogic.management")
  return (u_and_p.getUsername(), u_and_p.getPassword().tostring())

config_path = '/path/to/config/file'
key_path = '/path/to/key/file'

print decrypt(config_path, key_path)

示例输出:

('admin', 'Pa$$w0rd')

这段代码对我来说可以正常工作几年。

以及如何从 WLST 创建新配对的示例:

import os
sys.path.append(os.path.dirname(os.path.realpath(sys.argv[0])))
from weblogic.security import UserConfigFileManager
from weblogic.security import UsernameAndPassword

ADMIN_USERNAME = 'admin'
ADMIN_PASSWORD = 'Pa$$w0rd'
CONFIG_PATH = '/path/to/config/file'
KEY_PATH = '/path/to/key/file'

System.setProperty('weblogic.management.confirmKeyfileCreation', 'true')

u_and_p = UsernameAndPassword(ADMIN_USERNAME, ADMIN_PASSWORD)
UserConfigFileManager.setUsernameAndPassword(u_and_p, CONFIG_PATH, KEY_PATH, 'weblogic.management')

要解决此问题,我们需要执行以下步骤:

  • 拥有最新版本的weblogic。较新的版本正在使用 AES 安全算法。
  • 为了接收username/password的字符串值,我们可以这样做:
    • file.getUsername().toString/file.getPassword().toString
    • file.getUsername()/file.getPassword()
    • new String(file.getUsername())/new String(file.getPassword())

在所有三个中,我们必须遵循第三个。不知道具体原因。但是创建字符串对象然后通过它获取值给了我们正确的结果。我们在这三种情况下收到的确切价值是。

  1. 第一种情况:- Username/password= 一些加密值
  2. 第二种情况:-

    • 用户名:- 正确值
    • 密码:- 空
  3. 第三种情况:

    • 用户名:- 正确值
    • 密码:- 正确值