jboss eap 6.2+ 版本中 加密datasource密码等敏感信息
默认情况下,在jboss eap 6.2+ 管理控制台创建datasource后,会在standalone.xml(独立模式)或host.xml(域模式)中以明文保存相关敏感信息。
这会给服务器留下安全隐患,不过官方已经考虑到了这一点,给出了vault机制来进行加密,步骤如下:
1. 利用keytool生成keystore文件,参考命令如下:
keytool -genseckey -alias ctas -storetype jceks -keyalg AES -keysize 128 -storepass mypassword -keystore /Users/jimmy/vault/vault.keystore
解释一下:keytool是jdk自带的小工具
红色的部分是大家要根据自身情况修改的,蓝色的可改可不改。
-alias 后的ctas为别名,可以随便改
-storepass 后的mypassword为访问keystore文件的密码
-keystore 后的/Users/jimmy/vault/vault.keystore为keystore文件的保存路径,注:该文件jboss必须具有读写权限。
整个keystore相当于一个敏感信息的文件数据库,可以把一些敏感信息,比如db连接密码,ftp密码,邮件密码保存在这里。
蓝色部分AES为加密算法,可以改成RSA之类,128为加密强度,具体可参考jboss文档。
2. JBOSS_HOME/bin/vault.sh ,进入vault交互模式,会出现类似如下输出:
========================================== JBoss Vault JBOSS_HOME: /Users/jimmy/Downloads/app/jboss-eap-6.2 JAVA: /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java ========================================== ********************************** **** JBoss Vault *************** ********************************** Please enter a Digit:: 0: Start Interactive Session 1: Remove Interactive Session 2: Exit 输入0,进入交互模式。
Starting an interactive session
Enter directory to store encrypted files:/Users/jimmy/vault/ 这里输入keystore文件所在目录 Enter Keystore URL:/Users/jimmy/vault/vault.keystore 这里输入keystore文件完整路径 Enter Keystore password: 这里输入keystore的密码,与刚才步骤1中的密码要相同 Enter Keystore password again: 再次输入密码进行验证 Values match Enter 8 character salt:20150720 撒点盐,大家根据需要修改(必须是8位字符) Enter iteration count as a number (Eg: 44):43 加密的迭代次数(可以随便改) Enter Keystore Alias:cnblogs 别名,可以随便改 这些弄完后,会输出下面这一段: Initializing Vault Jul 20, 2015 11:37:09 PM org.picketbox.plugins.vault.PicketBoxSecurityVault init INFO: PBOX000361: Default Security Vault Implementation Initialized and Ready Vault Configuration in AS7 config file: ******************************************** ... </extensions> <vault> <vault-option name="KEYSTORE_URL" value="/Users/jimmy/vault/vault.keystore"/> <vault-option name="KEYSTORE_PASSWORD" value="MASK-2W0YkkQmW8vbjUxlq79j/1"/> <vault-option name="KEYSTORE_ALIAS" value="cnblogs"/> <vault-option name="SALT" value="20150720"/> <vault-option name="ITERATION_COUNT" value="43"/> <vault-option name="ENC_FILE_DIR" value="/Users/jimmy/vault/"/> </vault><management> ... ******************************************** Vault is initialized and ready for use Handshake with Vault complete Please enter a Digit:: 0: Store a secured attribute 1: Check whether a secured attribute exists 2: Exit 注意:红色部分,意思是让你把这一段,加到standalone.xml或host.xml的相应位置。(注:建议把这一段复制出来,等会儿再加到配置文件中)
3. 保持刚才的交互模式,不要退出,继续:
输入0,准备存储敏感信息
Task: Store a secured attribute Please enter secured attribute value (such as password): 这里输入要存储的敏感信息,比如mysql的连接密码 Please enter secured attribute value (such as password) again: 再输入一次 Values match Enter Vault Block:ctasDS_PWD 容器别名,随便起 Enter Attribute Name:password Secured attribute value has been stored in vault. Please make note of the following: ******************************************** Vault Block:ctasDS_PWD Attribute Name:password Configuration should be done as follows: VAULT::ctasDS_PWD::password::1 ********************************************
注意红色部分,辛苦了半天,就是要这一行,最后按2退出,同时停止jboss(如果jboss在运行的话)
4.修改jboss配置文件,以standalone.xml为例
</extensions> <vault> <vault-option name="KEYSTORE_URL" value="/Users/jimmy/vault/vault.keystore"/> <vault-option name="KEYSTORE_PASSWORD" value="MASK-2W0YkkQmW8vbjUxlq79j/1"/> <vault-option name="KEYSTORE_ALIAS" value="cnblogs"/> <vault-option name="SALT" value="20150720"/> <vault-option name="ITERATION_COUNT" value="43"/> <vault-option name="ENC_FILE_DIR" value="/Users/jimmy/vault/"/> </vault> <management>
在</extensions>与<management>先插入第2步中刚才高亮大段标红的内容。如果是域(domain)模式,这一段要插入到host.xml文件的<management>之前,另外域模式下,每台slave机器的host.xml里都要做同样的处理,keystore文件也要复制到每台slave机器上。
然后找到testDS的位置(域模式下datasource是在master机器的domain.xml里),把密码换成:
<datasource jta="false" jndi-name="java:/testDS" pool-name="testDS" enabled="true" use-ccm="false"> ... <security> <user-name>root</user-name> <password>${VAULT::ctasDS_PWD::password::1}</password> </security> ... </datasource>
重启jboss,搞定。
- WordPress显示访客UA信息:Show UserAgent纯代码轻度汉化版
- WordPress开启颜色评论但不造成XSS漏洞的小方法
- WordPress强迫症技巧:让文章(ID)地址完美连续(障眼法)
- iOS内存管理:从MRC到ARC实践
- MySQL错误修复:Table xx is marked as crashed and last (automatic?) repair failed
- PHP跨站脚本攻击(XSS)漏洞修复方法(一)
- Windows下获取网络连线实际名称,加强IP类设置脚本的兼容性
- Android APP 快速 Pad 化实现
- PHP彩蛋还是漏洞?expose_php彩蛋的触发和屏蔽方法
- 深入源码探索 ReactNative 通信机制
- PHP跨站脚本攻击(XSS)漏洞修复思路(二)
- WordPress发布文章自动同步到新浪微博(带特色图片)
- go http 服务器编程(1)
- Linux系统内存监控、性能诊断工具vmstat命令详解
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- android如何设置Activity背景色为透明色
- Android 手机防止休眠的两种实现方法
- Android编程实现的首页左右滑动切换功能示例
- 零基础学小程序004----小程序post请求,提交数据到服务器,小程序下单,小程序用户注册功能
- HorizontalScrollView水平滚动控件使用方法详解
- Android Activity生命周期和堆栈管理的详解
- Android学习之SharedPerference存储详解
- Android编程实现对话框Dialog背景透明功能示例
- Android开发中DatePicker日期与时间控件实例代码
- Android Shader应用开发之霓虹闪烁文字效果
- Android中ToggleButton开关状态按钮控件使用方法详解
- 零基础学小程序005---小程序登陆注册功能实现
- Android RecyclerView 复用错乱通用解法详解
- Android把Bitmap保存为PNG图像文件的简单代码
- 零基础学小程序006---小程序获取用户信息用户昵称