温馨提示×

centos环境postman如何加密数据

小樊
40
2025-12-27 03:40:27
栏目: 网络安全

CentOS下Postman加密数据实操指南

一 基础安全配置

  • 使用HTTPS访问所有接口,确保传输层加密。
  • 在 Postman 设置中启用不保存敏感信息(Settings → General → Do not save sensitive information),避免密钥、密码等被持久化。
  • API Key、Secret、证书等放入环境变量/集合变量,请求中用**{{变量名}}**引用,避免硬编码。
  • 如走代理,在 Settings → Proxy 正确配置代理,减少明文暴露面。
  • 在 Postman 设置中开启Encrypt local data(本地数据加密),并设置主密码,防止本机集合、环境变量被直接读取。以上做法适用于CentOS桌面环境运行的 Postman 原生应用。

二 请求数据的加密与签名

  • 前置脚本执行顺序:Pre-request Script → 发送请求 → Tests,加密与签名通常放在 Pre-request Script。
  • 常用算法选型:对称加密用AES,非对称加密用RSA,摘要/签名用MD5/SHA/HMAC。Postman 内置 CryptoJS(支持 MD5、SHA、AES、HMAC 等),RSA 需引入第三方库(如 forge.js)。
  • 典型用法:
    • 登录密码用MD5/SHA做摘要后提交;
    • 请求体或字段用AES对称加密;
    • 敏感字段(如密码)用RSA 公钥加密;
    • 防篡改用HMAC-SHA256对 method、url、timestamp、body 等进行签名。

三 示例脚本

  • 示例1 使用 forge.js 进行 RSA 公钥加密(适用于“密码用 RSA 加密”)
// Pre-request Script
const forgeUrl = 'https://lzq1357.gitee.io/various/forge_min.js';

if (!pm.globals.has('forgeJS')) {
  pm.sendRequest(forgeUrl, (err, res) => {
    if (err) return console.error('forge.js 加载失败', err);
    pm.globals.set('forgeJS', res.text());
    runEncrypt(); // 首次加载后递归执行
  });
  return;
}
eval(pm.globals.get('forgeJS')); // 注入 forge

function rsaEncrypt(content, pem) {
  const pub = forge.pki.publicKeyFromPem(pem);
  return forge.util.encode64(pub.encrypt(content, 'RSAES-PKCS1-V1_5', {
    md: forge.md.sha256.create(),
    mgf1: { md: forge.md.sha1.create() }
  }));
}

function runEncrypt() {
  const pubKey = `-----BEGIN PUBLIC KEY-----\n${pm.environment.get('rsa_pub_key')}\n-----END PUBLIC KEY-----`;
  const pwd = pm.environment.get('raw_password'); // 原始密码
  const enc = rsaEncrypt(pwd, pubKey);
  pm.environment.set('password_enc', enc); // 在 Body/Header 中使用 {{password_enc}}
}

要点:公钥放在环境变量rsa_pub_key,明文密码放在raw_password,加密结果放入password_enc后在请求中使用。

  • 示例2 使用 CryptoJS 进行 AES 加密并替换请求体
// Pre-request Script
const CryptoJS = require('crypto-js');

function aesEncrypt(plaintext, key, iv) {
  const k = CryptoJS.enc.Utf8.parse(key);     // 16/24/32 字节
  const i = CryptoJS.enc.Utf8.parse(iv);     // 16 字节
  const enc = CryptoJS.AES.encrypt(plaintext, k, {
    iv: i,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
  });
  return enc.toString(); // Base64
}

if (pm.request.method === 'POST' && pm.environment.get('env') === 'product') {
  const key = pm.environment.get('aes_key');   // 16/24/32 字节
  const iv  = pm.environment.get('aes_iv');    // 16 字节
  const body = pm.request.body.raw;
  const encBody = aesEncrypt(body, key, iv);
  pm.request.body.raw = encBody; // 替换原请求体
}

要点:密钥/向量与后端保持一致;CBC 模式需提供IV;加密后直接替换request.body.raw

  • 示例3 HMAC-SHA256 签名并写入 Header
// Pre-request Script
const CryptoJS = require('crypto-js');

const appKey  = pm.environment.get('appKey');
const secret  = pm.environment.get('appSecret');
const ts      = Date.now().toString();
const method  = pm.request.method.toUpperCase();
const urlPath = pm.request.url.getPath(); // 不含域名与查询串

// 计算 body 摘要(注意与后端一致:是否排序键、是否转义、是否去空格)
const bodyRaw = pm.request.body.raw || '';
const bodyMd5 = CryptoJS.MD5(bodyRaw).toString();

// 拼接待签名串(示例规则,需与后端一致)
let signStr = appSecret + method + urlPath + ts + bodyMd5 + appSecret;
const sign    = CryptoJS.HmacSHA256(signStr, secret).toString(CryptoJS.enc.Hex);

pm.environment.set('timestamp', ts);
pm.environment.set('sign', sign);
// 在请求头中使用:例如 Authorization: Bearer {{sign}} 或自定义 X-Signature: {{sign}}

要点:签名串的字段顺序、编码、是否包含 query、是否对 body 做 MD5等必须与后端约定一致。

四 常见问题与排查

  • 首次引入 forge.js 会发起网络请求,可能因网络或CORS导致失败;建议将脚本内容下载到本地,通过Collection/Environment 变量内嵌后 eval 执行,避免运行时拉取。
  • 使用 RSA 时确认后端期望的填充与摘要算法(常见为RSAES-PKCS1-V1_5 配合 SHA-256/SHA-1),否则验签失败。
  • AES 注意密钥长度(16/24/32 字节)与模式/IV一致;CBC 模式 IV 必须随机且唯一,勿复用。
  • 签名验签失败优先检查:时间戳与有效期、参数排序编码/转义、是否对 query+body 统一处理、是否对 body 做 MD5 等。
  • 生产环境务必使用环境变量管理密钥,并启用本地数据加密不保存敏感信息

0