nacos 二次开发 页面登录密码加密传输

为什么要做页面登录密码加密

现在公司不定期进行漏洞扫描,其中漏洞包括前后端登录密码使用明文。nacos官方强烈推荐nacos在内网运行,所以在验证这块做的比较简单。
注意: nacos版本 2.3.0

如何去实现

重要: nacos启动后默认账户nacos的密码也是nacos,且无法配置。这就导致加密jar会将“nacos”进行加密,导致认证不通过,无法进入页面修改账户密码(通过白名单访问修改密码接口也一直不成功),所以会先将通过未加密jar启动,通过非加密进入系统,在页面进行密码修改成sha256处理之后的密码,然后再用加密jar替换非加密jar

我使用的是embed berdy数据库,有办法在加密jar情况下修改密码的请回复我

  1. 步骤1: 拉取nacos项目(国内镜像 https://gitee.com/mirrors/Nacos),修改配置文件开启权限、设置白名单,启动项目。
  2. 步骤2: 使用默认账号nacos(密码也是nacos)登录,修改密码(新密码填入的是 新密码经过SHA256哈希处理的值,而非新密码原文!新密码原文后期登录时使用)
  3. 步骤3:在另外目录拉取源码, IDEA中对页面键入的password进行SHA256哈希处理之后再发起XHR
  4. 步骤4:将新项目打包得到新的nacos-server.jar, 用他替换老jar包,启动nacos服务后密码会加密传输
步骤1 如何打包启动nacos(Windows为例)?

修改配置文件(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

步骤2 如何修改默认账号nacos密码?
http://127.0.0.1:8848/nacos/#/login 进入登录页面

此处密码填入sha256加密过的字符串 SHA256转换
如: nacos” —sha256—> 569BF0AF7A7562F31BBE4795656B6BDF307F7752163ABC139157E3A3033B43FF
密码,确认密码,填入 569BF0AF7A7562F31BBE4795656B6BDF307F7752163ABC139157E3A3033B43FF
在这里插入图片描述
======== 下面在其他目录重新拉取nacos源码进行操作 ========

步骤3 如何对明文加密?

1: 修改对页面键入密码进行SHA256哈希处理,页面有三处会键入密码

  • 新增账户
  • 修改账户密码
  • 登录账户

在新的目录拉取 https://gitee.com/mirrors/Nacos源码进行操作

  1. 引入crypto库 , 在E:\Nacos0115\console-ui\目录下打开Terminal窗口,/输入安装crypto包指令

npm install crypto

  1. 代码修改

新增账户,修改账户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,
          });
        });
    });
  };
  1. 构建前端包

构建前端包 , 在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目录下文件.

  1. nacos项目整体打包
步骤4 如何替换成加密jar包,运行项目?

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个字符串,并成功登录!
在这里插入图片描述



  • 21
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值