忘记WebLogic 12C管理员密码如何重置?解密boot.properties报错
你之前尝试直接解密boot.properties恢复密码时抛出weblogic.security.internal.encryption.EncryptionServiceException: com.rsa.jsafe.JSAFE_PaddingException: Invalid padding异常,核心原因是boot.properties内的密文和对应域的SerializedSystemIni.dat加密密钥强绑定,你之前的操作没有在当前shell会话正确加载目标域的安全上下文,解密时调用了不匹配的密钥,才会触发填充错误。这种场景不需要强行恢复旧密码,走官方标准重置流程即可,全程不需要原密码,不会丢失现有域配置。
操作前置要求
- 持有域所在服务器的操作系统账号权限,且账号对域目录有完整读写权限
- 操作前完全停止域内的AdminServer、所有受管服务器、NodeManager进程,避免文件锁或配置不一致问题
- 生产环境请选择业务低峰期操作,全程服务需要短暂停机
具体操作步骤
先备份安全配置文件,避免操作失误损坏配置:
全量备份以下两个目录,存到和域目录无关的安全路径:/apps/user/Oracle/Middleware/Oracle_Home/user_projects/domains/WCC_DOMAIN/security/apps/user/Oracle/Middleware/Oracle_Home/user_projects/domains/WCC_DOMAIN/servers/AdminServer/security
如果域下还有其他受管服务器,也一并备份对应受管服务器目录下的security文件夹。
加载域环境变量
必须用source方式执行环境脚本,确保变量生效到当前shell会话,这也是之前解密操作报错的常见诱因:export JAVA_HOME=/apps/JDK/jdk1.8.0_221 export PATH=$JAVA_HOME/bin:$PATH cd /apps/user/Oracle/Middleware/Oracle_Home/user_projects/domains/WCC_DOMAIN/bin source setDomainEnv.sh进入WLST命令行执行密码重置
切换到wlst工具路径,启动交互终端:cd /apps/user/Oracle/Middleware/Oracle_Home/oracle_common/common/bin ./wlst.sh进入wlst交互界面后,依次执行以下命令:
# 进入域配置编辑模式 edit() startEdit() # 切换到默认安全领域的用户配置节点,注意路径里的WCC_DOMAIN替换成你实际的域名 cd('/SecurityConfiguration/WCC_DOMAIN/Realms/myrealm/AuthenticationProviders/DefaultAuthenticator') # 重置管理员密码,第一个参数是管理员账号(默认是weblogic,改过就填实际账号),第二个参数替换成你要设置的新密码 cmo.resetUserPassword('weblogic','你的新管理员密码') # 保存并激活配置变更 save() activate() # 退出wlst终端 exit()更新boot.properties配置
找到AdminServer安全目录下的boot.properties文件,删除原有密文格式的username、password配置项,替换为明文内容:username=你的管理员账号 password=你刚设置的新密码不需要手动加密这两个值,WebLogic第一次启动时会自动将明文加密为域绑定的密文,覆盖原文件内容。
如果域下有受管服务器,找到每个受管服务器对应security目录下的boot.properties,做同样的明文替换,避免受管服务器启动时认证失败。启动验证
先启动AdminServer,观察启动日志无报错后,用新密码登录WebLogic控制台验证功能正常,再依次启动NodeManager和所有受管服务器即可。
旧解密方法报错补充说明
你之前使用的BootProperties解密脚本逻辑本身没有问题,但执行时必须满足两个前提:一是当前shell会话已经通过source加载了目标域的setDomainEnv.sh环境变量,二是执行解密命令的工作路径必须在目标域的根目录下,保证脚本能正确读取到域下的security/SerializedSystemIni.dat密钥文件,两个条件缺一个就会触发你遇到的填充错误。相比折腾解密旧密码,上述重置流程操作更简单,稳定性更高,不会出现解密失败的问题。
内容的提问来源于stack exchange,提问作者Cris_new

