当前位置:   article > 正文

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

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

修改启动文件,启动模式由cluster改为standalone

set MODE="standalone"
  • 1

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 进入登录页面
  • 1

此处密码填入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));
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

登录账户,修改账户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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  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/"
  },
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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



  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/948448
推荐阅读
相关标签
  

闽ICP备14008679号