赞
踩
现在公司不定期进行漏洞扫描,其中漏洞包括前后端登录密码使用明文。nacos官方强烈推荐nacos在内网运行,所以在验证这块做的比较简单。
注意: nacos版本 2.3.0
重要: nacos启动后默认账户nacos的密码也是nacos,且无法配置。这就导致加密jar会将“nacos”进行加密,导致认证不通过,无法进入页面修改账户密码(通过白名单访问修改密码接口也一直不成功),所以会先将通过未加密jar启动,通过非加密进入系统,在页面进行密码修改成sha256处理之后的密码,然后再用加密jar替换非加密jar
我使用的是embed berdy数据库,有办法在加密jar情况下修改密码的请回复我
修改配置文件(location:E:\Nacos\distribution\conf\application.properties )
### true开启鉴权
nacos.core.auth.enabled=true
### 设置白名单,并不是用户名,用户密码! 使用时在XHR请求头 authKey:nacosSecurity
nacos.core.auth.server.identity.key=authKey
nacos.core.auth.server.identity.value=nacosSecurity
### 使用随机生成的Base64串,要求32位以上.串生成网站https://base64.supfree.net
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
修改启动文件,启动模式由cluster改为standalone
set MODE="standalone"
nacso主目录下打开Terminal窗口,执行mvn命令
mvn -Prelease-nacos -DskipTests clean install -U
点击运行 E:\Nacos\distribution\target\nacos-server-2.3.0\nacos\bin\startup.cmd
http://127.0.0.1:8848/nacos/#/login 进入登录页面
此处密码填入sha256加密过的字符串 SHA256转换
如: nacos” —sha256—> 569BF0AF7A7562F31BBE4795656B6BDF307F7752163ABC139157E3A3033B43FF
密码,确认密码,填入 569BF0AF7A7562F31BBE4795656B6BDF307F7752163ABC139157E3A3033B43FF
======== 下面在其他目录重新拉取nacos源码进行操作 ========
1: 修改对页面键入密码进行SHA256哈希处理,页面有三处会键入密码
在新的目录拉取 https://gitee.com/mirrors/Nacos源码进行操作
npm install crypto
新增账户,修改账户password 加密处理,D:\Nacos\console-ui\src\reducers\authority.js
// 引入crypto库,在创建用户,重置密码代码处进行加密 const crypto = require('crypto'); function sha256Encrypt(password) { // 创建SHA256哈希对象 const hash = crypto.createHash('sha256'); // 将要哈希的数据作为流传递给哈希对象 hash.update(password); // 获取哈希结果 const hashValue = hash.digest('hex'); return hashValue.toString(); } // ... /** * 创建用户 * @param {*} param0 */ const createUser = ([username, password]) => { password = sha256Encrypt(password); request.post('v1/auth/users', { username, password }).then(res => successMsg(res)); }; /** * 重置密码 * @param {*} param0 */ const passwordReset = ([username, newPassword]) => { newPassword = sha256Encrypt(newPassword); request.put('v1/auth/users', { username, newPassword }).then(res => successMsg(res)); };
登录账户,修改账户password 加密处理,D:\Nacos\console-ui\src\pages\Login\Login.jsx
// 添加crypto库 const crypto = require('crypto'); function sha256Encrypt(password) { // 创建SHA256哈希对象 const hash = crypto.createHash('sha256'); // 将要哈希的数据作为流传递给哈希对象 hash.update(password); // 获取哈希结果 const hashValue = hash.digest('hex'); return hashValue.toString(); } // ... handleSubmit = () => { const { locale = {} } = this.props; this.field.validate((errors, values) => { if (errors) { return; } // 对密码进行SHA-256加密 values.password = sha256Encrypt(values.password); login(values) .then(res => { localStorage.setItem('token', JSON.stringify(res)); this.props.history.push('/'); }) .catch(() => { Message.error({ content: locale.invalidUsernameOrPassword, }); }); }); };
构建前端包 , 在E:\Nacos0115\console-ui\目录下打开Terminal窗口
npm install
// 输入构建指令,在\console-ui目录下生成dist目录
npm run build
npm run build执行时,由于高版本node下载低版本node的项目报错ssl
解决方法: 在package.json 脚本增加 SET NODE_OPTIONS=–openssl-legacy-provider
"scripts": {
"start": "cross-env NODE_ENV=development webpack-dev-server --config build/webpack.dev.conf.js",
"build": "SET NODE_OPTIONS=--openssl-legacy-provider && cross-env NODE_ENV=production webpack --config build/webpack.prod.conf.js && node build/copyFile.js",
"eslint": "eslint --ext .js src/",
"eslint-fix": "eslint --ext .js --fix src/"
},
将dist目录下文件覆盖D:\Nacos\console\src\main\resources\static\console-ui\public目录下文件.
nacso主目录下打开Terminal窗口,执行mvn命令
mvn -Prelease-nacos -DskipTests clean install -U
关闭当前运行的nacos应用,使用加密的jar替换原项目的jar,在重新启动nacos
即:
D:\Nacos\distribution\target\nacos-server-2.3.0\nacos\target\nacos-server.jar 的jar去覆盖
E:\Nacos\distribution\target\nacos-server-2.3.0\nacos\target\nacos-server.jar
再次登录,可以看到密码nacos 会被加密成 32个字符串,并成功登录!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。