本文介紹如何校正數位簽章資訊。
背景資訊
在計算巢ECS內發起API調用時(如調用CheckoutLicense
、PushMeteringData
等),計算巢會返回數位簽章資訊(即Token欄位),服務商可以使用後文的方法計算數位簽章資訊的值,並將計算得到的數位簽章資訊和計算巢返回的數位簽章資訊進行對比,判斷資料是否被篡改。
數位簽章資訊校正流程
訊息處理流程
此處以調用CheckoutLicense
的傳回值為例,計算數位簽章的值。
調用
CheckoutLicense
,擷取傳回值。curl -H "Content-Type: application/json" -XPOST https://cn-wulanchabu.axt.aliyun.com/computeNest/license/check_out_license -d '{}'
傳回值
{ "code":200, "requestId":"4ea52d12-8e28-440b-b454-938d0518xxxx", "instanceId":"i-0jl1ej1czubkimg6xxxx", "result":{ "RequestId":"CF54B4C9-E54C-1405-9A37-A0FE3D60xxxx", "ServiceInstanceId":"si-85a343279cf341c2xxxx", "LicenseMetadata":"{\"TemplateName\":\"Custom_Image_Ecs\",\"SpecificationName\":\"dataDiskSize\",\"CustomData\":\"30T\"}", "Token":"21292abff855ab5c2a03809e0e4fb048", "ExpireTime":"2022-11-10T08:03:16Z" } }
取出參數部分的欄位,並將參數欄位去掉數位簽章(token)資訊後,按首字母進行排序並用&符號進行拼接。
拼接後的字串如下:
expireTime=2022-11-02T02:39:43Z&licenseMetadata={"TemplateName":"Custom_Image_Ecs","SpecificationName":"dataDiskSize","CustomData":"30T"}&requestId=CF54B4C9-E54C-1405-9A37-A0FE3D60xxxx&serviceInstanceId=si-85a343279cf341c2xxxx
說明對於存在
LicenseMetadata
(許可證中繼資料)的服務,建議模板中的參數不要出現中文(例如套餐名、模板名稱),否則在加簽處理中會出現錯誤,導致簽名不一致。在排序後的字串最後加上該服務的密鑰。
服務密鑰的字串格式為:key={ServiceProviderKey}。您可在服務詳情頁,擷取服務密鑰。
加上服務密鑰後的字串如下:
expireTime=2022-11-02T02:39:43Z&licenseMetadata={"TemplateName":"Custom_Image_Ecs","SpecificationName":"dataDiskSize","CustomData":"30T"}&requestId=CF54B4C9-E54C-1405-9A37-A0FE3D60xxxx&serviceInstanceId=si-85a343279cf341c2xxxx&key=37131c4a485141xxxxxx
使用MD5密碼編譯演算法對處理後的字串進行加密,加密後得到的為32位小寫值。
加密完成後,得到的值為:21292abff855ab5c2a03809e0e4fb048。
服務商通過上述方法計算得到的Token值,與計算巢返回的Token值進行對比。若兩個值相同,則表示資料未被篡改。