REST API文档

RSA 加密

RSA

RSA 加密算法是一种可逆的非对称加密算法,即 RSA 加密时候用的密钥(公钥)和 RSA 解密时用的密钥(私钥)不是同一把。

基本原理是将两个很大的质数相乘很容易得到乘积,但是该乘积分解质因数却很困难。RSA 算法被广泛的用于加密解密和 RSA 签名/验证等领域。

为了解决明文传输带来的不安全问题,现 XSwitch 系统也支持使用 RSA 加密算法将数据加密后进行交互。

生成 RSA 公钥和私钥

通过非对称性加密算法生成公私钥应用于加密。生成公私钥的方式有很多,比如OpenssLOpenSSHssh-keygen以及GnuPGgpg。当然也可以选择一些在线生成工具,选择密钥格式及密钥长度(目前仅支持 2048Bits),生成对应的公钥和私钥保存在系统配置文件中。

将获取到的公/私钥存在xtra_config.lua

使用 RSA 公钥加密文本

获取公钥

在使用 RSA 加密时,需将xtra_config.lua文件中参数login_with_rsa设置为true(默认 false)。

  • 请求 URL: /api/configs 获取rsa_public_key
  • 请求方式: GET

公钥加密文本

通过公钥信息rsa_public_key,对原始文本数据进行RSA加密。在进行 RSA 加密时,填充模式不填或选择ENCRYPTION_PKCS1随机填充数据模式,对应无须设置参数HashMGFHash

比如通过用户名、密码登录获取 token 这个功能,将原始文本 RSA 加密如下:

原始文本

{
  "login": "admin",
  "password": "XSwitch.cn/6753997"
}

加密工具示例如下图所示:

rsa加密\label{fig:rsa}

加密后数据

o6ru3+MM0Frb9jkQkI9XuQ5vItjw37qJFCtj4p4d4UYaey7LPdEuSih40BuEK60CdqXP1MrVXaV+H5H6vpaAzl0QTv7FNSBKaH1tO0aLV1AwO5YeGKjPR5nqTYls4Cp7v2HdVrGzqP5e2oRPUwe8/1BvwQwSAhT7qVbmU4nS+kcppGdiXKXrPpVRTmOkshrbaS11w7/uaEZHAQqnDcidH3Ag3xXnky9CzdboqsjGgUVj/9Mlr1huVT2feMSBu6eFOsVo92DulttHCp7ye0V2ySUS3C2eDTXeadcV9cSH0AGN6baPGSTsydrPIfRPvMdtEMgt33wajl50NKILTZC1Uw==

加密登录

传输数据通过 RSA 加密后,通过参数 a 传入。以登录为例,将上一步获取到的加密结果传入到 a,如下所示:

  • 请求 URL: /api/sessions 获取 token 例子
  • 请求方式: POST
  • Body 信息:
{
  "a": "o6ru3+MM0Frb9jkQkI9XuQ5vItjw37qJFCtj4p4d4UYaey7LPdEuSih40BuEK60CdqXP1MrVXaV+H5H6vpaAzl0QTv7FNSBKaH1tO0aLV1AwO5YeGKjPR5nqTYls4Cp7v2HdVrGzqP5e2oRPUwe8/1BvwQwSAhT7qVbmU4nS+kcppGdiXKXrPpVRTmOkshrbaS11w7/uaEZHAQqnDcidH3Ag3xXnky9CzdboqsjGgUVj/9Mlr1huVT2feMSBu6eFOsVo92DulttHCp7ye0V2ySUS3C2eDTXeadcV9cSH0AGN6baPGSTsydrPIfRPvMdtEMgt33wajl50NKILTZC1Uw=="
}
  • 返回值:
{
  "expires": 1683313540,
  "currentAuthority": "admin",
  "token": "46dfd004-13c5-4a36-b4db-cf9cda516adb",
  "system_roles": {
    "roles_str": "()",
    "senior_roles_str": "()"
  },
  "user_id": 1,
  "extn": "admin",
  "super_admin": 1,
  "code": 200
}
统计图及相关文档