Ubuntu下Postman如何进行数据加密
导读:Ubuntu下Postman数据加密实操指南 一 前置说明与安全边界 在 Ubuntu 上,Postman 的加密通常指两类:一是对请求参数做业务加密(如 AES、RSA、Base64、MD5),二是对传输通道启用 HTTPS/SSL 客...
Ubuntu下Postman数据加密实操指南
一 前置说明与安全边界
- 在 Ubuntu 上,Postman 的加密通常指两类:一是对请求参数做业务加密(如 AES、RSA、Base64、MD5),二是对传输通道启用 HTTPS/SSL 客户端证书。前者通过脚本在发送前处理,后者在 Postman 设置中导入证书,两者可叠加使用。
- 客户端加密只能保护“网络传输中的内容”,无法替代后端的鉴权、签名与校验;密钥/IV 等敏感信息不要硬编码在脚本中,建议放入受控的变量或外部密钥管理服务。
二 在请求前对参数进行加密
- 准备变量:在集合或环境的 Variables 中预置需要的变量,如 aes_key、aes_iv、RSA_Public_Key,请求体中使用占位符(如 { { encryptedData} } )。
- 对称加密示例(AES-CBC + PKCS7,CryptoJS 内置):
// Pre-request Script
const CryptoJS = require('crypto-js');
function aesEncrypt(content, key, iv) {
const k = CryptoJS.enc.Utf8.parse(key);
const i = CryptoJS.enc.Utf8.parse(iv);
return CryptoJS.AES.encrypt(content, k, {
iv: i, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }
).toString();
}
const plain = pm.environment.get('plainText') || 'admin';
const key = pm.environment.get('aes_key');
// 16/24/32 字节
const iv = pm.environment.get('aes_iv');
// 16 字节
pm.environment.set('encryptedData', aesEncrypt(plain, key, iv));
- 非对称加密示例(RSA,forge.js):
// Pre-request Script
if (!pm.globals.has('forgeJS')) {
pm.sendRequest('https://raw.githubusercontent.com/loveiset/RSAForPostman/master/forge.js', (err, res) =>
{
if (!err) pm.globals.set('forgeJS', res.text());
}
);
return;
// 首次加载,等待下次请求再执行加密
}
eval(pm.globals.get('forgeJS'));
function rsaEncrypt(content, pubPem) {
const pub = forge.pki.publicKeyFromPem(pubPem);
return forge.util.encode64(pub.encrypt(content, 'RSAES-PKCS1-V1_5', {
md: forge.md.sha1.create(),
mgf: forge.mgf.mgf1.create(forge.md.sha1.create())
}
));
}
const data = pm.environment.get('plainText') || 'admin';
const pub = pm.environment.get('RSA_Public_Key');
// PEM 格式
pm.environment.set('encryptedData', rsaEncrypt(data, pub));
- 使用方式:在请求 Body/Params 中填入 { { encryptedData} } ,发送前脚本会自动替换为加密结果。
三 动态占位与批量加密
- 约定占位语法:在需要加密的字段值写成 { { aes$varName} } 或 { { rsa$varName} } ,脚本会自动识别并替换为加密结果。
- 参考实现要点(放在集合级 Pre-request Script,便于复用):
// 动态占位与批量加密
function getBracketStr(t) {
const m = t.match(/\{
\{
(.+?)\}
\}
/);
return m ? m[1] : '';
}
if (!pm.globals.has('forgeJS')) {
pm.sendRequest('https://raw.githubusercontent.com/loveiset/RSAForPostman/master/forge.js', (err, res) =>
{
if (!err) pm.globals.set('forgeJS', res.text());
}
);
return;
}
eval(pm.globals.get('forgeJS'));
const aesEncrypt = (c, k, i) =>
{
const K = CryptoJS.enc.Utf8.parse(k), I = CryptoJS.enc.Utf8.parse(i);
return CryptoJS.AES.encrypt(c, K, {
iv: I, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }
).toString();
}
;
const rsaEncrypt = (c, p) =>
{
const P = forge.pki.publicKeyFromPem(p);
return forge.util.encode64(P.encrypt(c, 'RSAES-PKCS1-V1_5', {
md: forge.md.sha1.create(), mgf: forge.mgf.mgf1.create(forge.md.sha1.create())
}
));
}
;
const payload = typeof request.data === 'string' ? JSON.parse(request.data) : request.data || {
}
;
const headers = request.headers ? Object.assign({
}
, request.headers) : {
}
;
const all = Object.assign({
}
, payload, headers);
Object.keys(all).forEach(k =>
{
const v = String(all[k]);
const m = getBracketStr(v);
if (!m) return;
const [alg, src] = m.split('$');
let enc = '';
if (alg === 'aes') enc = aesEncrypt(pm.environment.get(src), pm.environment.get('aes_key'), pm.environment.get('aes_iv'));
else if (alg === 'rsa') enc = rsaEncrypt(pm.environment.get(src), pm.environment.get('RSA_Public_Key'));
if (enc) {
if (payload[k]) payload[k] = enc;
else headers[k] = enc;
pm.environment.set(m, enc);
// 便于调试与复用
}
}
);
- 说明:首次运行会从网络加载 forge.js,可能导致该次请求跳过加密;再次发送即可生效。
四 配置SSL客户端证书与HTTPS
- 在 Postman 顶部菜单进入 File → Settings → General → SSL certificate verification,点击 Add Certificate,按提示上传 CRT/PFX 证书及对应私钥(如证书受密码保护需输入密码),保存后发起以 https:// 开头的请求会自动携带客户端证书完成双向认证。
五 常见问题与最佳实践
- 首次请求失败并伴随 “forge.js 未定义”:这是脚本按需加载 forge.js 所致,忽略首次失败,再次发送即可;也可将 forge.js 文件下载到本地并通过本地静态资源加载以提升稳定性。
- 密钥与 IV 管理:避免硬编码,使用环境/集合变量集中管理;为 AES-CBC 选择足够强度的 key/iv(如 16/24/32 字节与 16 字节),并与服务端约定一致。
- 编码与格式:RSA 输出通常为 Base64;Base64 仅是编码并非加密,敏感信息仍需强加密;如请求体为 JSON,请确保加密后仍为合法字符串再赋值。
- 清理敏感变量:在 Tests 脚本中按需清除临时变量(如
pm.environment.unset('encryptedData')),减少泄露面。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu下Postman如何进行数据加密
本文地址: https://pptw.com/jishu/777270.html
