技术干货 | 使用 mPaaS 配置 SM2 国密加密指南

本文涉及的产品
mPaaS订阅基础套餐,标准版 3个月
简介: 随着移动智能终端的广泛应用,敏感信息极易被监控或盗取,给国家、企事业及个人带来极大政治、经济损失。金融和重要领域的各个企业正在逐步落实并完成国产密码改造工作。为解决客户侧因更换加密算法造成的种种不便,mPaaS 现已支持移动网关服务兼容多种加密方式。本文将就如何生成 SM2 密钥以及完成 mPaaS 配置等问题展开详细的说明。

封面图1209.png

随着移动智能终端的广泛应用,敏感信息极易被监控或盗取,给国家、企事业及个人带来极大政治、经济损失。金融和重要领域的各个企业正在逐步落实并完成国产密码改造工作。

部分使用 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源码

curl -o openssl-1.1.1d.tar.gz https://www.openssl.org/source/openssl-1.1.1d.tar.gz

STEP2 解压源码包

tar -xvf openssl-1.1.1d.tar.gz

STEP3 进入解压的 openssl 目录

cd openssl-1.1.1d

STEP4 配置生成 makefile

./config --prefix=/usr/local/openssl

STEP5 安装

//这里用了sudo 需要输入电脑密码,为了保证不会因为权限不足而安装报错
sudo make install

STEP6 设置 openssl lib .so 加载配置

//此步骤可以忽略,so加载配置与否不影响使用生成SM2
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
ldconfig -v

STEP7 生成SM2密钥

i. 进入生成密钥文件的目录,执行以下命令生成私钥

/usr/local/openssl/bin/openssl ecparam -genkey -name SM2 -out SM2PrivateKey.pem

ii. 进入生成密钥文件的目录,生成公钥

/usr/local/openssl/bin/openssl ec -in SM2PrivateKey.pem -pubout -out SM2PublicKey.pem

1.png

2.png

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 软件,运行以下命令:

ecparam -genkey -name SM2 -out priv.key
ec -in priv.key -pubout -out pub.key

配置 mPaaS 国密

1. 初次配置加密

1.1. 开发平台配置

STEP1 登录 mPaaS 控制台 -> 移动网关 -> 网关管理 -> 数据加密 -> 打开

3.png

STEP2 打开后会弹出选择加密方式和密钥的弹出,选 SM2 并填写对应的私钥密钥。

1.2. 客户端配置

1.2.1. iOS端

iOS客户端的加密方式和公钥是配置在info.plist下的,详情见图

4.png

其中:

  • 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 文件下,如图:

5.png

其中:

  • Crypt:表示是否使用自加密,true 表示使用,false 表示关闭自加密功能。
  • RSA/ECC/SM2:表示要使用的非对称加密算法,其值只能填充 RSA 或 ECC 或 SM2。
  • PubKey:表示选择的非对称加密算法的公钥。
  • GWWhiteList: 需要进行加密的网关,即当前环境的网关地址。如果没有该 key ,则所有的请求都不会加密。

注:由于 Android 中 properties 文件的 value 值需要在同一行,因此填充公钥时需注意。

2.更换配置加密

2.1. 开发平台配置(注:MGS 版本需 >=1.34.10)

STEP1 打开移动开发平台->移动网关->网关管理:当前网关已经开启了数据加密(这里示例是RSA)

6.png

STEP2 这时更换国密,需要提前准备一对已生成的 SM2 公、私钥。参考:http://help.aliyun.com/document_detail/64281.htm

STEP3 在控制台-网关管理下,先关闭数据加密,再立刻开启数据加密,这里会出现重新选择加密算法和填写对应密钥的弹窗,如下图:

7.png

注:必须要先关闭再开启,所以请务必先提前生成好对应的 SM2 公、私钥,且保证正确性和正确格式。

STEP4 将 SM2 的私钥按正确格式填写到输入框内,点击提交。之后就能在这里看到已经配置好的两种加密方式:

8.png

介此,网关更换密钥操作已完成。

2.2. 客户端配置

2.2.1. iOS端

STEP1 iOS 客户端的加密方式和公钥是配置在 info.plist 下的,详情见图:

9.png

STEP2 此时将已生成好的 SM2 公钥按正确格式替换上述 info.plist 里 PubKey 的 value,加密算法更改为 SM2。

10.png

介此,iOS 端加密方式和公钥也已更换完毕。

2.2.2. Android端

STEP1 Android 端的加密方式和公钥是配置在 mpaas_netconfig.properties 文件下的,如图:

11.png

STEP2 此时将已生成好的 SM2 公钥按正确格式替换上述 mpaas_netconfig.properties 里的对应 value,更换后如下图:

12.png

介此,Android 端加密方式和公钥已更换完毕。

2.3. 小结

此时服务端和客户端均已更换加密方式完毕,旧版 App 依然可以正常访问网关,新版 App 也是可以正常访问网关的,后续需要等待旧版App用户完全升级后,修改掉网关旧的加密方式即可,当然一直保留也可以的。

结语

从生成自己的国密 SM2,到完整配置加密方式。客户端到 mPaaS 网关已满足各项政策对 App 数据加密方式的要求。

同时 mPaaS 团队也将在更完备支持全链路国密的道路上,而努力前进。后续会发布更全面、更方便、更深层次的国密支持方案。

本文作者:阿里云 mPaaS TAM 团队(御雪 荣阳)


动态logo2.gif

相关文章
|
1月前
|
存储 安全 算法
C#一分钟浅谈:数据加密与解密技术
【10月更文挑战第3天】在数字化时代,信息安全至关重要。数据加密作为保障信息不被未授权访问的有效手段,通过特定算法将明文转换为密文,确保即使数据被截获也难以解读。本文从基础概念入手,介绍C#中实现数据加密的方法,涵盖对称加密(如AES、DES)与非对称加密(如RSA),并通过具体示例代码演示如何使用`System.Security.Cryptography.Aes`类完成AES加密和解密过程。此外,还强调了密钥管理及安全策略的重要性。
48 4
|
1月前
|
数据安全/隐私保护
sm2加密解密
sm2加密解密
42 3
|
1月前
|
安全 测试技术 Go
Python 和 Go 实现 AES 加密算法的技术详解
Python 和 Go 实现 AES 加密算法的技术详解
76 0
|
2月前
|
存储 安全 算法
RSA在手,安全我有!Python加密解密技术,让你的数据密码坚不可摧
【9月更文挑战第11天】在数字化时代,信息安全至关重要。传统的加密方法已难以应对日益复杂的网络攻击。RSA加密算法凭借其强大的安全性和广泛的应用场景,成为保护敏感数据的首选。本文介绍RSA的基本原理及在Python中的实现方法,并探讨其优势与挑战。通过使用PyCryptodome库,我们展示了RSA加密解密的完整流程,帮助读者理解如何利用RSA为数据提供安全保障。
123 5
|
2月前
|
存储 安全 算法
显微镜下的安全战!Python加密解密技术,透视数字世界的每一个安全细节
【9月更文挑战第7天】在数字世界中,数据安全至关重要。Python加密解密技术如同显微镜下的精密工具,确保信息的私密性和完整性。以大型医疗机构为例,通过AES和RSA算法的结合,既能高效加密大量医疗数据,又能安全传输密钥,防止数据泄露。以下是使用Python的`pycryptodome`库实现AES加密和RSA密钥交换的简化示例。此方案不仅提高了数据安全性,还为数字世界的每个细节提供了坚实保障,引领我们迈向更安全的未来。
35 1
|
3月前
|
存储 安全 算法
|
3月前
|
安全 开发者 数据安全/隐私保护
Xamarin 的安全性考虑与最佳实践:从数据加密到网络防护,全面解析构建安全移动应用的六大核心技术要点与实战代码示例
【8月更文挑战第31天】Xamarin 的安全性考虑与最佳实践对于构建安全可靠的跨平台移动应用至关重要。本文探讨了 Xamarin 开发中的关键安全因素,如数据加密、网络通信安全、权限管理等,并提供了 AES 加密算法的代码示例。
59 0
|
3月前
|
安全 物联网 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享未来技术浪潮中的领航者:区块链、物联网与虚拟现实
【8月更文挑战第30天】在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的知识,帮助读者更好地了解网络安全的重要性,并提供一些实用的技巧和建议来保护个人信息和数据安全。
|
3月前
|
机器学习/深度学习 人工智能 安全
AI技术在医疗领域的应用及未来展望网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【8月更文挑战第29天】本文主要介绍了AI技术在医疗领域的应用以及未来的发展趋势。文章首先介绍了AI技术的基本概念和发展历程,然后详细介绍了AI技术在医疗领域的具体应用,包括疾病诊断、治疗建议、药物研发等方面。最后,文章对未来AI技术在医疗领域的发展趋势进行了预测和展望。
|
3月前
|
机器学习/深度学习 SQL 安全
网络防线的构建者与破坏者:网络安全漏洞、加密技术与安全意识的探索之旅深度学习中的图像识别技术:从理论到实践
【8月更文挑战第27天】在数字时代的海洋中,我们都是航行者。网络安全是保护我们免受风暴侵袭的坚固船体,而信息安全则是指引我们航向正确方向的灯塔。本文将带领读者深入理解网络安全漏洞的形成机制,探索加密技术如何成为我们的盾牌,以及为何提升个人和组织的安全意识至关重要。通过深入浅出的方式,我们将一起学习如何加固这艘船,确保它能在风浪中稳健前行。

热门文章

最新文章

相关产品

  • 移动开发平台 mPaaS