
技术干货 | 使用 mPaaS 配置 SM2 国密加密指南 原创
随着移动智能终端的广泛应用,敏感信息极易被监控或盗取,给国家、企事业及个人带来极大政治、经济损失。金融和重要领域的各个企业正在逐步落实并完成国产密码改造工作。部分使用 mPaaS 框架的用户,因早期大多数都是在网关配置的 RSA 加密或者 ECC 加密,在政策要求下,都需要更改网关加密算法为国密。
为解决客户侧因更换加密算法造成的种种不便,mPaaS 现已支持移动网关服务兼容多种加密方式。本文将就如何生成 SM2 密钥以及完成 mPaaS 配置等问题展开详细的说明。
生成 SM2 国密
1.1. Mac OS下
Mac OSX 一般自带的有 OpenSSL。但因为 OpenSSL“心脏病失血”事件,Mac OSX 自 10.11 El Capitan 起,将原有的 OpenSSL 替换为 LibreSSL。
在以上这些系统中应该除了实测必须要用 OpenSSL 软件外,应该都可以用 LibreSSL 取代 OpenSSL。而对于其他大多数还没有将系统自带的 OpenSSL 替换为 LibreSSL 的会麻烦一些,并且也可能做不到彻底替换。
只是对于编译安装的软件,可以尽量用 LibreSSL 取代 OpenSSL。(其他用 LibreSSL 取代 OpenSSL的系统还有:OpenBSD 自 5.6 起,Alpine Linux 自 3.5.0 起)
所以 Mac 下 OpenSSL 生成 SM2 密钥就需要自己安装 OpenSSL,网上有方式直接更改替换 Mac OS 自带的 LibreSSL,这里为了不影响 Mac 使用者的日常正常使用,不使用这种方式,而是在 Mac 上 download 一个 OpenSSL 版本安装、解压后单独使用,完全不会影响原有的 LibreSSL。
以 openssl 1.1.1d 实现为例:
STEP1 下载openssl源码
STEP2 解压源码包
STEP3 进入解压的 openssl 目录
STEP4 配置生成 makefile
STEP5 安装
STEP6 设置 openssl lib .so 加载配置
STEP7 生成SM2密钥
i. 进入生成密钥文件的目录,执行以下命令生成私钥
ii. 进入生成密钥文件的目录,生成公钥
1.2. Windows下
同样 Windows 下也是需要一些途径才能生成 SM2 国密密钥。
OpenSSL 官网没有提供 Windows 版本的安装包,可以选择其他开源平台提供的工具。下载地址:http://slproweb.com/products/Win32OpenSSL.html
STEP1 下载工具
选择 32 位或者 64 位合适的版本下载,例如 Win64OpenSSL_Light-1_0_2h.exe。
STEP2 安装 Win64OpenSSL 软件
设置环境变量,自行确定安装位置。
STEP3 打开 Win64OpenSSL 软件,运行以下命令:
配置 mPaaS 国密
1. 初次配置加密
1.1. 开发平台配置
STEP1 登录 mPaaS 控制台 -> 移动网关 -> 网关管理 -> 数据加密 -> 打开
STEP2 打开后会弹出选择加密方式和密钥的弹出,选 SM2 并填写对应的私钥密钥。
1.2. 客户端配置
1.2.1. iOS端
iOS客户端的加密方式和公钥是配置在info.plist下的,详情见图
其中:
-
mPaaSCrypt:加密配置的主 key,value 是 Dictionary 类型,里面包含了客户端加密所需设置的相关信息。
-
Crypt:是否进行加密,value 是 Boolean 类型,YES 代表加密,NO 代表不加密。
-
GWWhiteList: 需要进行加密的网关,即当前环境的网关地址。如果没有该 key ,则所有的请求 都不会加密。
-
RSA/ECC/SM2:非对称加密算法选择,value 是 String 类型,只能填 RSA 或 ECC 或 SM2。
-
PubKey:非对称加密公钥。value 是 String 类型,与选择的非对称加密算法保持一致。
注:iOS端PubKey 的格式必须携带 -----BEGIN PUBLIC KEY----- 及 -----END PUBLIC KEY-----。不允许有空格、自行换行等,格式不可错误。
1.2.2. Android端
Android 端的加密方式和公钥是配置在mpaas_netconfig.properties 文件下,如图:
其中:
-
Crypt:表示是否使用自加密,true 表示使用,false 表示关闭自加密功能。
-
RSA/ECC/SM2:表示要使用的非对称加密算法,其值只能填充 RSA 或 ECC 或 SM2。
-
PubKey:表示选择的非对称加密算法的公钥。
-
GWWhiteList: 需要进行加密的网关,即当前环境的网关地址。如果没有该 key ,则所有的请求都不会加密。
注:由于 Android 中 properties 文件的 value 值需要在同一行,因此填充公钥时需注意。
2.更换配置加密
2.1. 开发平台配置(注:MGS 版本需 >=1.34.10)
STEP1 打开移动开发平台->移动网关->网关管理:当前网关已经开启了数据加密(这里示例是RSA)
STEP2 这时更换国密,需要提前准备一对已生成的 SM2 公、私钥。参考:http://help.aliyun.com/document_detail/64281.htm
STEP3 在控制台-网关管理下,先关闭数据加密,再立刻开启数据加密,这里会出现重新选择加密算法和填写对应密钥的弹窗,如下图:
注:必须要先关闭再开启,所以请务必先提前生成好对应的 SM2 公、私钥,且保证正确性和正确格式。
STEP4 将 SM2 的私钥按正确格式填写到输入框内,点击提交。之后就能在这里看到已经配置好的两种加密方式:
介此,网关更换密钥操作已完成。
2.2. 客户端配置
2.2.1. iOS端
STEP1 iOS 客户端的加密方式和公钥是配置在 info.plist 下的,详情见图:
STEP2 此时将已生成好的 SM2 公钥按正确格式替换上述 info.plist 里 PubKey 的 value,加密算法更改为 SM2。
介此,iOS 端加密方式和公钥也已更换完毕。
2.2.2. Android端
STEP1 Android 端的加密方式和公钥是配置在 mpaas_netconfig.properties 文件下的,如图:
STEP2 此时将已生成好的 SM2 公钥按正确格式替换上述 mpaas_netconfig.properties 里的对应 value,更换后如下图:
介此,Android 端加密方式和公钥已更换完毕。
2.3. 小结
此时服务端和客户端均已更换加密方式完毕,旧版 App 依然可以正常访问网关,新版 App 也是可以正常访问网关的,后续需要等待旧版App用户完全升级后,修改掉网关旧的加密方式即可,当然一直保留也可以的。
结语
从生成自己的国密 SM2,到完整配置加密方式。客户端到 mPaaS 网关已满足各项政策对 App 数据加密方式的要求。
同时 mPaaS 团队也将在更完备支持全链路国密的道路上,而努力前进。后续会发布更全面、更方便、更深层次的国密支持方案。
本文作者:阿里云 mPaaS TAM 团队(御雪 荣阳)
