技術乾貨 | 使用 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原始碼
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.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 控制檯 -> 移動閘道器 -> 閘道器管理 -> 資料加密 -> 開啟
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 團隊(御雪 榮陽)
App 開發、測試、運營、運維雲到端一站式解決方案