本文介紹如何校驗數字簽名信息。
背景信息
在計算巢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-938d0518****", "instanceId":"i-0jl1ej1czubkimg6****", "result":{ "RequestId":"CF54B4C9-E54C-1405-9A37-A0FE3D60****", "ServiceInstanceId":"si-85a343279cf341c2****", "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
(許可證元數據)的服務。請注意以下內容,否則在加簽處理中會出現錯誤,導致簽名不一致。模板中的參數不要出現中文(例如套餐名、模板名稱)。
使用時將返回的JSON轉譯為
{"TemplateName":"Custom_Image_Ecs","SpecificationName":"dataDiskSize","CustomData":"30T"}
。
在排序后的字符串最后加上該服務的密鑰。
服務密鑰的字符串格式為: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值進行對比。若兩個值相同,則表示數據未被篡改。
文檔內容是否對您有幫助?